2016-09-27 76 views
-1

此腳本嘗試ping通主機字符串數組。bash腳本在for循環中出現意外其他

for i in "${arr[@]}" 
do 
    echo "check if $i is online" 
    ping -c1 $i &>/dev/null 
    if[ $? -eq 0 ] then 
     echo "$i is online" 
    else 
     echo "$i is not online" 
    fi 
done 

我是新來的bash腳本這樣如果有一個人能告訴我,爲什麼我得到附近意外的標記'其他」

語法錯誤並且如果這是一個不錯的辦法。在此先感謝

+3

請將您的代碼粘貼到http://www.shellcheck.net/您在'if'[$?'中有一個拼寫錯誤,它應該在' if'。 – fedorqui

回答

4

[不是bash的語法的一部分;它是一個常規字符,如a8。因此,解析器不會將if[識別爲兩個詞if[;它只是看到名稱爲if[,它假定它可能是一個命令名稱,然後是在該行尾部結束的一系列參數。以下行也是一個有效的命令。 下一個行,但是,從else開始,這是一個可識別的關鍵字,因此不能出現在命令位置,但僅作爲正在進行的if語句的一部分,觸發該錯誤。

所有這一切都是說,你需要必須單獨if[一個空格。

if [ $? -eq 0 ]; then 

(你還需要then之前一個分號,如果它出現在同一行上,這將是你固定空間的問題後遇到的下一個問題。)

4

行號6,本應與分號;,並需要在ifif[ $?行後的空格。

if [ $? -eq 0 ]; then 

比較推薦的方法是,你可以直接在爲什麼我用了-c標誌使用ping's出口代碼if語句作爲

if ping -c 1 "$i" &> /dev/null 
then 
    echo "$i is online" 
else 
    echo "$i is not online" 
fi 

見下文摘自man ping頁面。使用http://www.shellcheck.net/來調試這種微不足道的語法錯誤。

+0

您還修復了if和[ – Lennart

+0

'之間缺乏空格';'是分號,這是一個問題,但不是直接的問題。 – chepner

+0

@Lennart:感謝您的評論,請立即參考我的更新! – Inian

2

if [ $? -eq 0 ]; then你需要有一個在if[之間的空格,也錯過了;