2017-09-21 61 views
0
這一行shell腳本的

我有問題:猛砸如果或聲明,命令沒有找到

if [ "$(lsb_release -r -s)" == "16.04" ] || [ "$(lsb_release -r -s)" == "17.04" ]; then 

我得到「[:未找到命令」運行腳本時。我不懂爲什麼。

+ '[' -f /etc/debian_version ']' 
++ lsb_release -r -s 
+ '[' 17.04 == 16.04 ']' 
++ lsb_release -r -s 
+ ' [' 17.04 == 17.04 ']' 
./mhn/scripts/install_mongo.sh: line 8:  [: command not found 

如果在17.04上運行,而不是在16.04上,我只會得到錯誤。如果我改變陳述並首先檢查17.04,它將在16.04,而不是17.04中斷。聲明後半部分的內容正在打破。

https://github.com/ngatilio/mhn/blob/2e992934a350e0367a214dc86cc63e7ecd5d59ef/scripts/install_mongo.sh

+1

添加OS(Ubuntu的?)和bash版本的問題。 – Cyrus

+1

如果將該行復制粘貼到新腳本中並單獨運行該腳本,是否還會出現相同的錯誤? –

+0

@thatotherguy它工作正常,如果它只是if語句。但在完整的腳本中,它在第8行,而bash告訴我「第8行:[未找到命令」 – d1str0

回答

3

有你的問題:

+ ' [' 17.04 == 17.04 ']' 

你出現在最後[之前有某種時髦的空間性格。刪除並重新輸入以將其轉換爲常規ASCII空間。

當你在這裏複製粘貼這一行時,或者通過非原始的github視圖查看它時,它會被轉換爲一個常規空間,所以它不會出現在你的文章中。這也是爲什麼當複製粘貼到另一個文件時它工作得很好。

這裏的ShellCheck上的文件從github上下載的(而不是複製粘貼):

$ shellcheck install_mongo.sh 

In install_mongo.sh line 8: 
    if [ "$(lsb_release -r -s)" == "16.04" ] || [ "$(lsb_release -r -s)" == "17.04" ]; then 
               ^-- SC1018: This is a unicode non-breaking space. Delete and retype it. 
+0

@ d1str0:這說明了問題:'cat -A install_mongo.sh | sed -n 8p' – Cyrus

+0

哇!那是一個PITA。另外,shellcheck看起來非常酷。非常感謝! – d1str0

0

試試這個:

if [ "$(lsb_release -r -s)" == "16.04" -o "$(lsb_release -r -s)" == "17.04" ]; then 
+0

感謝您的答案,但不幸的是,這不會解決我的問題。另一個答案完全解決了我的問題。 – d1str0

+0

你能否把它標記爲解決方案呢? –