シェルスクリプトを実行しようとすると、次のエラーが発生します。
エラー:行13:予期しないトークン「fi」の近くに構文エラーがあります。
スクリプトは次のとおりです。
case $# in
0) echo Usage is: $0 filename [filename]
exit;;
*);;
esac
for i in $*
do
if test -f $i;
then
echo $i
cat $i
else
fi
done
なぜエラーが発生するのですか?
答え1
Healyがすでに述べたように、bashシェルスクリプト(非常に似ています)は、and、または、または、および対応if
するelse
ものelif
を受け入れません。 (これは次のように要約されます。各条件は次のとおりです。fi
else
elif
fi
する何。 )
ステートメントを削除するか、else
後で必要に応じてelse
ブロック内にダミーコマンドを配置できます。たとえば、スクリプトを次のように書き換えることができます。
case $# in
0) echo Usage is: $0 filename [filename]
exit;;
*);;
esac
for i in $*
do
if test -f $i;
then
echo $i
cat $i
else
true
fi
done
(私にも合うようにインデントしましたfi
。if
スタイルの問題ですが個人的にはこのように読むのがより簡単だと思います。)
true
唯一の目的は正常な終了状態を返すことですが、コマンドなので、名前が単純ファイル$i
(test -f
)を参照しない限り、このスクリプトは何もしません。
答え2
空のコマンドは許可されていないため、そのelse
行を削除してください。