什么';我的Bash脚本有什么问题?(第43行:意外标记“elif';”附近的语法错误)
我正在网上学习一门Lynda.com课程 我正在努力学习所有我能学的东西,但有时我仍然在与命令替换、数组和If循环作斗争什么';我的Bash脚本有什么问题?(第43行:意外标记“elif';”附近的语法错误),bash,for-loop,syntax,Bash,For Loop,Syntax,我正在网上学习一门Lynda.com课程 我正在努力学习所有我能学的东西,但有时我仍然在与命令替换、数组和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.
#!/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
我在任何输出上都收到错误:即使STDIN为“1”
我试着在这里搜索其他的问题和答案,但也有同样的错误,我注意到有人提到CR&LF,但我还是不明白
谢谢。除了环境变量和内置shell变量外,不要使用大写变量名——这样做会增加名称空间冲突的风险。除此之外,考虑<代码>案例< /代码>语句:
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测试“$OPTION”-等式2;然后
——没有所有额外的换行符——读者(像你一样!)更容易看到你错误地省略了,然后
。也就是说,使用case语句而不是if/elif/elif/…确实是一种完美的情况。。。块…顺便说一句,我建议测试您的错误处理代码——您可能会注意到它实际上不起作用,因为它只是测试$?
,如果没有选择菜单选项,那么如果您选择一个选项并且其操作中涉及的某些内容失败,$?
将永远不会被选中。(此外,您在该代码中既不使用[
也不使用test
,因此它尝试将$?
的扩展作为命令运行,而不是测试其值)。
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