我的Bash脚本有什么错误? (第43行:在意外标记“elif”附近出现语法错误)
问题描述:
我在线上关注了Lynda.com课程。我的Bash脚本有什么错误? (第43行:在意外标记“elif”附近出现语法错误)
我正在努力学习所有我能做的事情,但我仍然在命令替换,数组和阵列中挣扎,并且有时会出现If循环。
#!/bin/bash
MLOG="/var/log/mail.log"
SLOG="/var/log/syslog"
echo "Which log(s) do you want to see? "
echo "[1] Head Of Mail.log?"
echo "[2] Head Of Syslog?"
echo "[3] Tail Of Mail.log?"
echo "[4] Tail Of Syslog?"
echo "[5] Dump Mail.log to File?"
echo "[6] Dump Syslog to File?"
read -p "Select an option [1-6]: " OPTION
if
test "$OPTION" -eq "1"
then
head $MLOG
elif
test "$OPTION" -eq "2"
then
head $SLOG
elif
test "$OPTION" -eq "3"
tail $MLOG
elif
test "$OPTION" -eq "4"
tail $SLOG
elif
test "$OPTION" -eq "5"
cat "$MLOG" > ./MessageLogDump.txt
echo "Message.Log Successfully Dumped in PWD"
elif
test "$OPTION" -eq "6"
cat "$SLOG" > ./SysLog.txt
echo "Syslog Successfully Dumped in PWD"
else $? -ne "0"
echo "Something went wrong somewhere"
else z $OPTION
echo "You selected an incorrect option"
fi
有错误我收到任何输出:即使只的标准输入“1”
./GenSysLog.sh: line 43: syntax error near unexpected token `elif'
./GenSysLog.sh: line 43: ` elif'
我试图寻找在这里的其他问题和答案有同样的错误,我注意到人们提到关于CR & LF,但我仍然无法弄清楚。
谢谢。
答
请勿使用除环境变量和内置shell变量以外的大写变量名 - 这样做会增加命名空间冲突的风险。除此之外,请考虑case
声明:
error() { echo "Something went wrong somewhere"; }
trap error ERR
read -p "Select an option [1-6]: " option
case $option in
1) head "$MLOG" ;;
2) head "$SLOG" ;;
3) tail "$MLOG" ;;
4) tail "$SLOG" ;;
5) cat "$MLOG" > ./MessageLogDump.txt
echo "Message.Log Successfully Dumped in PWD" ;;
6) cat "$SLOG" > ./SysLog.txt
echo "Syslog Successfully Dumped in PWD";;
*) echo "You selected an incorrect option" ;;
esac
更短且易于阅读。
如果你把它写成'elif test“$ OPTION”-eq 2;那么没有所有额外的换行符 - 读者(比如你)会更容易看出你错误地忽略了'then'。也就是说,这完全是一个使用case语句而不是if/elif/elif/...块的完美情形。 – 2014-10-04 19:59:56
...顺便说一句,我建议测试你的错误处理代码 - 你可能会注意到它实际上并不工作,因为如果没有选择菜单选项,它只会测试'$?',所以如果你选择一个选项并且在其操作中涉及的某些内容失败,“$?'从不检查。 (另外,在代码中既不使用''''或'test',所以它会尝试运行'$?'的扩展作为命令,而不是测试它的值。 – 2014-10-04 20:06:33