syntax error near unexpected token done
シェルスクリプトを実行すると、次の結果が表示されます。
while read filename
do
echo "$filename"
if [ -s $filename ]; then
tail -10 $filename | grep `date '+%Y-%m-%d'` >> $lastlines1
echo "- Next Error File - " >> $lastlines1
done
else
echo " no errrors"
fi
私が間違っているアイデアはありますか?
答え1
ifの前にwhileを閉じています。
while read filename
do
echo "$filename"
if [ -s $filename ]
then
tail -10 $filename | grep date '+%Y-%m-%d' >> $lastlines1
echo "- Next Error File - " >> $lastlines1
else
echo " no errrors"
fi
done
答え2
いくつかの新しい行とインデントを追加しましょう。
1 while read filename; do
2 echo "$filename"
3 if [ -s $filename ]; then
4 tail -10 $filename | grep date '+%Y-%m-%d' >> $lastlines1
5 echo "- Next Error File - " >> $lastlines1
6 done
7 else
8 echo " no errrors"
9 fi
6号線と9号線が変わるようです。つまり、while-do-done
とif-then-else-fi
句が重なります。これはシェル(および他のほとんどのコンピュータ言語)では無効です。
答え3
スクリプトを作成するにはエディタを使用する必要があり、vim
構文エラーがある場合はテキストが赤で表示されます。
while read FileName
do
echo "${FileName}"
if [ -s "${FileName}" ]; then
tail -10 $FileName | grep "date '+%Y-%m-%d'" >> "${lastlines1}"
echo "- Next Error File - " >> "${lastlines1}"
else
echo " no errrors"
fi
done
答え4
時々、このエラーはファイルの予期しないCR文字が原因で発生します。これは通常、CR 行末を使用する Windows システムでファイルが作成されたためです。たとえば、またはdos2unix
を実行してこの問題を解決できます。tr
tr -d '\015' < yourscript.sh > newscript.sh
これにより、ファイルからすべてのCR文字が削除され、新しいシェルスクリプトファイルでエラーが発生しなくなります。