“else”之后的“fi”处出现语法错误

“else”之后的“fi”处出现语法错误

当我尝试运行 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和 、elseor eliffior 之间elseelif和相应的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行即可。

相关内容