Nowe posty

xx Odpowiednie wykorzystanie rdzeni P i E procesora (0)
Wczoraj o 17:52:01
xx Samba DC/AD problem z DNS (0)
2024-07-25, 12:42:23
xx DNS i WWW na virtualbox (4)
2024-07-24, 10:30:38
xx Instalacja Manjaro Linux (11)
2024-07-13, 22:57:31
xx Linux Lite 6.6. Po uruchomieniu z DVD przeglądarka Chrome jest nieaktywna (12)
2024-07-10, 22:33:30
xx Laptop MSI CR500 - nie akceptuje linuksa (6)
2024-07-03, 05:30:18
xx Co to jest ? (3)
2024-07-02, 13:36:58
xx Nowa wersja libreoffice (1)
2024-06-30, 18:22:49
xx Dystrybucja - środowisko graficzna dla amigowca (MUI) (4)
2024-06-30, 12:14:25
xx Jaki kod błędu zwracać z kernela? (3)
2024-06-09, 12:29:22

Autor Wątek: Sprawdzanie katalogów - problem ze skryptem  (Przeczytany 5661 razy)

  • Gość
Sprawdzanie katalogów - problem ze skryptem
« dnia: 2007-08-28, 11:59:26 »
witam,
mam problem ze skryptem, który na moje oko powinien działać poprawnie.
Oto fragment,w którym wyrzuca błąd:
### Test that each of the data directories exists

for d in `echo $DATA_DIRECTORY | awk '{split($0, a, ":"); for (i in a) print a[i]; }'`
do
if [ ! -d $d ]
then
echo "$d cannot be found."
exit 1
elif [ -d $NIC_DIRECTORY$d ]
then
# Clear out old tracking files

cd $NIC_DIRECTORY$d

if [ "x$SILENT" = "x" ]
then
echo "Checking for old tracking files in $NIC_DIRECTORY$d"
fi

for j in `ls *-nic.* | awk 'BEGIN{FS="-nic"} {print $1}'`
do
if [ ! -f $DATA_DIRECTORY/$j ]
then
if [ "x$SILENT" = "x" ]
then
echo "remove $NIC_DIRECTORY$d/$j-nic.*"
fi

rm -f $NIC_DIRECTORY$d/$j-nic.*
fi
done
fi
done
błąd składni w pobliżu nieoczekiwanego tokenu 'do
w najbardziej zewnetrznej petli. jesli ktos bylbyw stanie pomoc moge przeslac caly skrypt.

--edit ZipoKing--
Wrzuciłem kod do znacznika BBCode, zmiana tytułu+ wątek przesunięty do bardziej odpowiadającej kategorii.

ZipoKing

  • Gość
Sprawdzanie katalogów - problem ze skryptem
« Odpowiedź #1 dnia: 2007-08-28, 12:29:38 »
W 1-szym for IMHO powinno być
for i in $a; do echo $i; done
albo coś takiego...

xavery

  • Gość
Sprawdzanie katalogów - problem ze skryptem
« Odpowiedź #2 dnia: 2007-08-28, 17:05:01 »
Cytat: wludzik
błąd składni w pobliżu nieoczekiwanego tokenu 'do
w najbardziej zewnetrznej petli. jesli ktos bylbyw stanie pomoc moge przeslac caly skrypt.
Na moje ślepe, starcze oko to ten fragment wygląda OK a przy próbie wykonania, shell nie zgłasza błędów składniowych. Mogą być dwie przyczyny nie działania całości. Pierwsza to niewłaściwy format danych zwracany przez zagnieżdżone wywołania w pętli for lub (co chyba bardziej prawdopodobne) błąd leży gdzie indziej a shell zgłasza błąd właśnie w tej linii. Zdarzą się tak stosunkowo często przy braku zamknięcia jakiegoś bloku for/while/if... Myślę, że dobrze by było poznać całość skryptu.

arctgx

  • Gość
Sprawdzanie katalogów - problem ze skryptem
« Odpowiedź #3 dnia: 2007-08-28, 17:19:28 »
Nawiasem: warto się zastanowić nad ujęciem wartości zmiennych w cudzysłowy, np. "$a" na wypadek, gdyby zawierały spacje czy niektóre nietypowe znaki, które powłoka mogłaby traktować w dziwny sposób.

xavery

  • Gość
Sprawdzanie katalogów - problem ze skryptem
« Odpowiedź #4 dnia: 2007-08-28, 21:09:38 »
Cytat: arctgx
Nawiasem: warto się zastanowić nad ujęciem wartości zmiennych w cudzysłowy, np. "$a" na wypadek, gdyby zawierały spacje czy niektóre nietypowe znaki, które powłoka mogłaby traktować w dziwny sposób.
Powiem więcej :) Tego typu zapis jak poniżej:
$NIC_DIRECTORY$d/$j-nic.*
warto zapisać tak:
${NIC_DIRECTORY}${d}/${j}-nic.*
żeby było wiadomo co jest zmienną a co tekstem
Z cudzysłowami różnie bywa i należy na nie uważać, ponieważ zapis:
for i in $a; do
znaczy zupełnie coś innego niż:
for i in "$a"; do