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

时间:2014-10-04 19:45:21

标签: bash for-loop syntax

我在网上关注Lynda.com课程。

我正在努力学习尽我所能,但我仍然在努力使用Command Substitution,Arrays和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”

./GenSysLog.sh: line 43: syntax error near unexpected token `elif'
./GenSysLog.sh: line 43: `      elif'

我尝试在这里搜索其他问题和答案时出现同样的错误,我注意到有人提到CR& LF,但我仍然无法理解。

谢谢。

1 个答案:

答案 0 :(得分:0)

除环境变量和内置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

更短更容易阅读。