Nowe posty

Autor Wątek: Sprawdzanie katalogów - problem ze skryptem  (Przeczytany 5592 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