2017-08-13 56 views
1

我試圖與brakets,引號,||-o許多不同的組合,但腳本作品,未經無窮遠循環的唯一方法是沒有或while循環相比,這樣的:while [ $name != Jorge ]] ; do ...此是我要運行腳本的一個例子:語法或bash的條件,而循環

#!/bin/bash 
echo "What is my name: " 
read name 

while [ $name != "Jorge" ] || [ $name != "Eduardo" ] ; do  
    echo "Not. Try again: " 
    read name 
done 

echo "Well done!" 
+1

我建議由於您使用'bash',你可以使用正則表達式的''&& – Cyrus

+1

更換''||運營商也'同時[[! $ name =〜^(Jorge | Eduardo)$]]; do' – Inian

回答

3

你應該while語句的條件中使用&&代替||

您試圖從stdin中讀取名稱,如果名稱是「Jorge」或「Eduardo」,則表示已完成。當它處於一段時間的情況下,當你想要繼續循環名稱時,如果不是「Jorge」這個名字不是「Eduardo」。

您目前的狀況表示如果名稱不是「Jorge」,名稱不是「Eduardo」,則繼續循環。這個名字不能同時出現。

2

使用正則表達式:

while [[ ! "$name" =~ ^(Jorge|Eduardo)$ ]]; do 

或猛砸extented globbing

shopt -s extglob 
while [[ "$name" != @(Jorge|Eduardo) ]]; do 
+1

'-a'已過時,不應該按照[測試的POSIX規範](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html#tag_20_128_16)使用。 – chepner

+0

@chepner從我的答案中刪除。 – SLePort