2016-11-27 42 views
0

我想在OS X終端中運行一個shell腳本。只要您輸入m或a,程序就會終止。在OR狀態下循環不起作用。 BASH外殼

問題是,我無法獲得OR語句的工作。

#!/bin/sh 
read File 

while [ "$File" != "m" ] || [ "$File" != "a" ] 
do 
read File 
done 

當我只是做

while [ "$File" != "m" ] 

它完美的罰款。我曾嘗試過多種方法,如

while test $File != "m" || test $File != "a" 
while test $File != "m" -o test $File != "a" 
while [ $File != "m" -o $File != "a" ] 

他們都沒有工作。 上面的代碼我張貼不停止當用戶輸入一個 「M」 或

+3

也許你想''&&代替''||。您現在使用的條件將始終評估爲true,因爲如果其中一個選項評估爲false,則另一個評估爲true。換句話說,你的邏輯是可疑的。 –

+0

這個構造也很奇怪。把它寫成'while read file;如果測試「$ File」= m ||的話「$ file」= a;然後打破; fi ...'。您當前的構造不檢查是否有任何「讀取」失敗,所以當輸入流終止時它會表現異常。 –

+0

請看看:[我應該怎麼做當有人回答我的問題?](http://stackoverflow.com/help/someone-answers) – Cyrus

回答

2

我建議通過

while [ "$File" != "m" ] && [ "$File" != "a" ] 

until [ "$File" = "m" ] || [ "$File" = "a" ] 
取代

while [ "$File" != "m" ] || [ "$File" != "a" ] 

循環

或用正則表達式(bash):

while [[ ! $File =~ m|a ]] 

從慶典參見:help until

+0

這工作!謝謝! – user2856463