我写了一个脚本,脚本的一部分如下:
#!/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
',并且 finalif
或elif
子句中的 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
以这种格式为我工作。