什么';我的Bash脚本有什么问题?(第43行:意外标记“elif';”附近的语法错误)

什么';我的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.

我正在网上学习一门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.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