"syntax error near unexpected token `elif'" 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 上使用记事本++编写了脚本,但我在编辑为 UNIX/OSX 格式下启用了 EOL 转换。

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

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

你需要在if [ ... ]之后和then之前有一个分号,elif也是如此:

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

来自 Bash 手册 - 3.2.4.2 条件构造:

if 命令的语法为:

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

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

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

#!/bin/bash
if [ "$1" == "this_script" ]
then
    this_script --parameters
elif [ "$1" == "other_script" ]
then
    other_script --parameters
else
    echo "missing argument"
fi

以这种格式为我工作。

相关内容

  • 没有找到相关文章

最新更新