爾加,該腳本是充滿了不好的腳本行爲(除了你正在運行到完全錯誤)。下面是徹底錯誤:
$ERRORSTRING = "Error. Please make sure you've indicated correct parameters"
由於devnull指出,這應該是:
ERRORSTRING="Error. Please make sure you've indicated correct parameters"
幾行下(並再次接近尾聲),我們有:
echo $ERRORSTRING;
...這工作,但包含了兩個不好的想法:沒有用雙引號(這有時會以意想不到的方式進行解析)可變參考,並分號在行尾(這是某人試圖在shell腳本中編寫C或Java或其他東西的標誌)。使用這個來代替:
echo "$ERRORSTRING"
的下一行是:
elif [ $1 == "live" ]
...這威力工作,取決於$1
值是否有空格,或者被定義,但是空白,或類似的東西(再次,使用雙引號來防止誤解!)。此外,==比較操作是非標準的 - 它會工作,因爲bash的支持在其[ ... ]
內置語法,但如果你在具有bash的擴展可用計數,爲什麼不使用更清潔的替代[[ ... ]]
?任何這些將是更好的替代該行:
elif [ "$1" = "live" ]
elif [[ $1 == "live" ]]
elif [[ "$1" == "live" ]]
就個人而言,我更喜歡最後一個。在這種情況下不需要使用雙引號,但IMO最安全的做法是對所有變量引用進行雙引號引用,除非有特定的原因。再往下看,有相同的評論適用於elif [ $2 == "go" ]
。
BTW,有一個爲shell腳本在www.shellcheck.net良好的健全檢查工具。它不像我一樣挑剔(例如,它不會在行末尾標記分號),但它指出了此腳本中的所有實際錯誤...
'='符號周圍有空格。讀取相應的行爲'$ ERRORSTRING =「錯誤。請確保您已經指出了正確的參數」'',在'='符號周圍沒有空格。 –
(1)刪除'='周圍的空格。 (2)分配一個變量時,不要使用'$'(在LHS上)。 – devnull
'ERRORSTRING =「錯誤,請確保你已經指出了正確的參數」' – devnull