在意外的令牌'else'附近获得"语法错误"在shell脚本中

时间:2016-04-27 16:14:52

标签: bash shell if-statement

我在Amazon Linux上使用bash shell。当我运行下面的代码块

if [ $rc -eq 0 ] then
  passed=`tr ' ' '\n' < $TFILE | grep -c PASSED`
  error=`tr ' ' '\n' < $TFILE | grep -c ERROR`
  warning=`tr ' ' '\n' < $TFILE | grep -c WARNING`
  subject="Automated Results - $passed passed, $error errors, $warning warnings."
else
  subject="Failed to run any tests."
fi

我收到错误,“意外标记'else'附近的语法错误”。如果正确编写if-then-else块,我需要做什么?

1 个答案:

答案 0 :(得分:2)

引用bash中Fill的语法定义(非常接近相关的POSIX规范):

<Rectangle Fill="{Binding ElementName=Hexcode, Path=, Mode=OneWay, Converter={StaticResource HexToBrushConverter}}" />

help if语句的条件部分中可以使用多个命令,和命令分隔符(此处以分号表示)是最后一个和列表之间的强制如果条件部分返回成功状态,则给出命令。

比较针对该语法定义给出的代码,它缺少这样的分隔符:

if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi

实际上,if作为参数传递给if [ $rc -eq 0 ]; then # ^ # \- this semicolon, or a newline, is mandatory before "then" 命令,而不是解析为语法。

(由于您已标记为then,因此请考虑使用本机数学语法:[更具可读性且漏洞更少。