我写了一个脚本,部分脚本如下:
#!/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中运行此脚本。
答案 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
'存在,那么 最终if
或elif
子句中的最终命令具有非零退出 状态,然后执行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
以这种格式为我工作。