2016-07-05 111 views
0

有人能告訴我爲什麼這個腳本不起作用嗎?我得到Bash腳本,OR語句上的語法

./FileDirTest.sh: line 10: [: missing `]' 
./FileDirTest.sh: line 10: n: command not found 
./FileDirTest.sh: line 13: [: missing `]' 
./FileDirTest.sh: line 13: n: command not found 

這是我的腳本。

if [ -d "$PASSED1" ] 
then echo "Do you want to execute whole directory?(Y/N)" 
    read answer 
    if [ "$answer" == "y" || "$answer" == "Y" ] ; 
    then echo "Execute" 
    fi 
    if [ "$answer" == "n" || "$answer" == "N" ] ; 
    then echo "No" 
      exit 1 
    fi 
fi 

我確定它是簡單的。我是新來的。

+2

嘗試[shellcheck(http://shellcheck.net),它會自動檢測這樣 –

回答

3

||對於[命令不是有效的操作符;你只能用它來加入兩個不同[命令:

if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; 

你可以,但是,使用||bash的條件命令裏面:

if [[ "$answer" = "y" || "$answer" = "Y" ]]; 

前兩個出現錯誤是因爲||是一個特殊的shell運算符,它表示前一個命令已完成,但[要求]需要提供作爲最後的論點。發生第二個錯誤是因爲$answer的值緊跟在||之後,被視爲要運行的命令的名稱。

+0

常見語法問題,謝謝,解決了我的問題。 – Racehorse35

1

除了@ Chepner的回答,您還可以使用,慶典-o操作,

if [ "$answer" == "y" -o "$answer" == "Y" ]; then 
     echo "Execute" 
else 
     echo "No" 
     exit 1 
fi 
+1

'-o'不推薦;它是POSIX標準的擴展,它在解析器中引入了可能的歧義,因爲'['具有多於4個參數的定義不明確。 – chepner