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.
W 1-szym for IMHO powinno być
for i in $a; do echo $i; done
albo coś takiego...
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:
znaczy zupełnie coś innego niż: