2014-04-14 247 views
1

我發現,我想從this website here.我按照一切用一個漂亮的小shell腳本一步一步,但在我的CentOS的機器上運行這個時收到以下錯誤。錯誤:=:找不到命令(bash腳本)

./deploy: line 3: =: command not found 

3號線僅包含...

$ERRORSTRING = "Error. Please make sure you've indicated correct parameters" 

我試着用了一下玩弄左右,但不明白爲什麼它不會接受「=」字符。腳本是否有問題,或者它與我的服務器處理腳本的方式不同?

謝謝!

+3

'='符號周圍有空格。讀取相應的行爲'$ ERRORSTRING =「錯誤。請確保您已經指出了正確的參數」'',在'='符號周圍沒有空格。 –

+2

(1)刪除'='周圍的空格。 (2)分配一個變量時,不要使用'$'(在LHS上)。 – devnull

+0

'ERRORSTRING =「錯誤,請確保你已經指出了正確的參數」' – devnull

回答

5

「Devnulls」的答案是正確的 - 我不得不刪除圍繞「=」的空間,並刪除該行的「$」爲好。最終結果是...

ERRORSTRING="Error. Please make sure you've indicated correct parameters" 

我已經upvoted Devnull和gniourf_gniourf的評論。

謝謝所有幫助過的人!

7

爾加,該腳本是充滿了不好的腳本行爲(除了你正在運行到完全錯誤)。下面是徹底錯誤:

$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良好的健全檢查工具。它不像我一樣挑剔(例如,它不會在行末尾標記分號),但它指出了此腳本中的所有實際錯誤...