bash中出现“意外令牌`elif'附近的语法错误”错误

时间:2016-05-25 13:04:56

标签: linux bash

我写了一个脚本,部分脚本如下:

#!/bin/bash

if [ "$1" == "this_script" ] then
      this_script --parameters
elif [ "$1" == "other_script" ] then
      other_script --parameters
else
      echo "missing argument"
fi

当我运行此脚本时,我收到错误

syntax error near unexpected token `elif'
`elif [ "$1" == "SWDB" ] then'

1)线路结尾是否存在问题?我在Windows上用Notepad ++编写了脚本但是我已经在Edit to UNIX / OSX格式下启用了EOL转换。

2)如果不是行结尾,那么错误是什么?

我在Redhat Linux操作系统上的bash shell中运行此脚本。

2 个答案:

答案 0 :(得分:6)

您需要在if [ ... ]之后和then之前使用分号,并且在elif之后需要分号:

if [ "$1" == "this_script" ]; then
#                           ^
#                           here!
#                              v
elif [ "$1" == "other_script" ]; then

来自Bash manual - 3.2.4.2 Conditional Constructs

  

if命令的语法是:

if test-commands; then
  consequent-commands;
[elif more-test-commands; then
  more-consequents;]
[else alternate-consequents;]
fi
     

执行test-commands列表,如果其返回状态为零,   执行consequent-commands列表。如果test-commands返回a   非零状态,每个elif列表依次执行,如果退出   状态为零,执行相应的more-consequents并执行   命令完成。如果'else alternate-consequents'存在,那么   最终ifelif子句中的最终命令具有非零退出   状态,然后执行alternate-consequents。返回状态是   执行最后一个命令的退出状态,如果没有条件则返回零   测试成真。

答案 1 :(得分:2)

'then'语句应该在新行上:

#!/bin/bash

if [ "$1" == "this_script" ]
then
    this_script --parameters
elif [ "$1" == "other_script" ]
then
    other_script --parameters
else
    echo "missing argument"
fi

以这种格式为我工作。