2012-03-22 149 views
3

我面臨以下問題我已經創建了上述條件,但是當我選擇y是的時候一切正常,但是當我選擇n沒有時,我得到惱人的錯誤輸出: 輸出: 你同意是(Y)否(N) ñ ./myscript:[N:找不到命令bash輸出命令未找到

的MyScript是我的腳本代碼 這裏的名字:

echo "Do you agree yes (y) or not (n)" 
read answer 
if ([ "$answer" = 'y' ] || ["$answer" = 'Y' ]); 
then 

echo -e 「 output for y」 
done 
else 
echo -e " output for n " 
exit 1; 

任何想法,我怎麼能擺脫的輸出並解決問題? 謝謝

+0

沒有必要使用括號在'if'語句中分組測試命令。 – 2012-03-23 13:17:26

回答

1

這不是bash。 「完成」不會終止bash中的「if」條件。您應該刪除「完成」並在else主體的末尾添加「fi」。

另外,不需要「退出1」之後的分號。

0

做完應該在else子句之後,即退出之前。而且「fi」沒有「完成」。

5

您在第二種情況下在[之後缺少空格。 [實際上是一個命令,因爲它一起試圖從字面上運行[n。您沒有看到y的輸出,因爲評估是短路的(即第一個條件爲真,因此無需評估第二個條件)。

6

你錯過了在空間:

["$answer" = 'Y' ] 

更改爲:

[ "$answer" = 'Y' ] 

也有腳本對方失誤。這裏你有工作代碼:

echo "Do you agree yes (y) or not (n)" 
read answer 
if ([[ "$answer" = 'y' ]] || [[ "$answer" = 'Y' ]]); 
then 
echo -e " output for y" 
else 
echo -e " output for n" 
exit 1 
fi 
+0

x處於測試狀態,可以解決古老的Bourne和C shell中的錯誤。使用'[['。 – jordanm 2012-03-23 03:31:57

+0

你說得對,我只是檢查是否缺少x不是代碼問題,忘記刪除它。 – stanwise 2012-03-23 17:42:19