2016-03-29 69 views
0

我是bash腳本的新手。我今天寫了這個小腳本。當我運行它時,它返回錯誤:./test1.sh:第8行:[n!= y]]:找不到命令。我嘗試了幾種不同的組合,並且無法使其工作。Bash腳本條件無法工作

#!/bin/bash 

function ask_yes_or_no 
{ 
    local exitLoop="n" 
    local answer="" 
    while ["$exitLoop" != "y"]] 
    do 
     read -p "$1 (y/n)? " choice 
     case "$choice" in 
     y|Y) 
      answer="y" 
      exitLoop="y" 
      ;; 
     n|N) 
      answer="y" 
      exitLoop="y" 
      ;; 
     esac 
    done 

    echo $answer 
} 

retVal=$(ask_yes_or_no "Do you want to continue") 

echo $retVal; 

exit 0 
+1

while循環有2結束]應該只有],此外還有空間,這是非常重要的:**,而[ 「$ exitLoop」= 「y」] ** –

+0

函數定義應該是**函數ask_yes_or_no()** –

回答

0

如果你把所有在一起的話在我的評論,並與shellcheck online幫助,下面有個第一個版本:

#!/bin/bash -- 

function ask_yes_or_no() 
{ 
    local exitLoop="n" 
    local answer="" 
    while [ "$exitLoop" != "y" ] 
    do 
    read -r -p "$1 (y/n)? " choice 
    case "$choice" in 
     y|Y) 
     answer="y" 
     exitLoop="y" 
     ;; 
     n|N) 
     answer="n" 
     exitLoop="y" 
     ;; 
    esac 
    done 

    echo $answer 
} 

retVal=$(ask_yes_or_no "Do you want to continue") 

echo "$retVal"; 

exit 0 

所以,你的第一個嘗試是差不多好了。正如在評論中寫的,有2個結尾]]而不是]在的條件,並且有重要的空間字符添加。其餘部分來自shellcheck(可以作爲命令行安裝)。

測試低於:

chmod +x ./myscript.sh 
./myscript.sh 
Do you want to continue (y/n)? y 
y 
./myscript.sh 
Do you want to continue (y/n)? n 
n 
+0

謝謝Jay。那工作。我永遠不會懷疑這些額外的空間會導致錯誤。這是一個奇怪的語法。 –