2013-04-01 70 views
0

我試圖運行一個非常簡單的腳本,從用戶讀取輸入並持續循環問題,如果用戶輸入不符合預期的。while shell腳本中的循環說:[:太多的參數

它正在通過bash中執行:

echo "Specify a directory [Y/N]?" 

read ans 
while [ [ "$ans" != "Y" ] || [ "$ans" != "y" ] || [ "$ans" != "N" ] || [ "$ans" != "n" ] ] 
do 
    echo "$ans is not valid, please answer [Y/N]" 
    read ans 
done 

代碼繼續....

知道爲什麼這是不工作?這似乎是一個非常簡單的循環。

+1

你不能將''[']'表達式相互嵌套在一起。 – chepner

+1

要添加到@ chepner的評論 - 如果你真的需要分組(在這種情況下你不需要 - 見下面的Clement Rey的答案),你需要使用'('和')'(可能有適當的轉義/引用,取決於你的確切語法)。 – twalberg

回答

1

這應該工作:

echo "Specify a directory [Y/N]?" 
read ans 
while [ "$ans" != "Y" ] && [ "$ans" != "y" ] && [ "$ans" != "N" ] && [ "$ans" != "n" ] 
do 
    echo "$ans is not valid, please answer [Y/N]" 
    read ans 
done 

有幾個錯誤:

  • 你可能會想,而不是OR
  • 沒有全局[ ]的multiconditionnal while loop
+0

這允許我的程序在沒有無限循環的情況下繼續進行,但我仍然得到「[:too many arguments」錯誤。 「 –

+1

'&&'是在這裏使用的正確的運算符,因爲'$ ans'將*總是*不等於其中的一個選項。 – chepner

+1

用'||',他會進入,不管怎麼樣,所以我猜他想要一個'&&'。 – cmc