2014-10-04 93 views
-1

我在線上關注了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,但我仍然無法弄清楚。

謝謝。

+0

如果你把它寫成'elif test「$ OPTION」-eq 2;那麼沒有所有額外的換行符 - 讀者(比如你)會更容易看出你錯誤地忽略了'then'。也就是說,這完全是一個使用case語句而不是if/elif/elif/...塊的完美情形。 – 2014-10-04 19:59:56

+0

...順便說一句,我建議測試你的錯誤處理代碼 - 你可能會注意到它實際上並不工作,因爲如果沒有選擇菜單選項,它只會測試'$?',所以如果你選擇一個選項並且在其操作中涉及的某些內容失敗,「$?'從不檢查。 (另外,在代碼中既不使用''''或'test',所以它會嘗試運行'$?'的擴展作爲命令,而不是測試它的值。 – 2014-10-04 20:06:33

回答

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 

更短且易於閱讀。

相關問題