当我尝试运行 shell 脚本时出现此错误:
错误:第 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
正如希利已经提到的,bash shell 脚本(看起来非常像)不允许在if
和 、else
or elif
、fi
or 之间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
它的唯一目的是返回成功的退出状态,但它是一个命令,因此如果 in 中的名称$i
不引用简单文件 ( test -f
),则此脚本将不执行任何操作。
答案2
不允许使用空命令,因此只需删除该else
行即可。