2013-04-04 25 views
2

試圖寫一個腳本,它會讀什麼用戶開關輸入...我知道這是基本的,但停留在第一個IM如果..猛砸如果string =這樣或那樣的

echo "Please enter yes or no (y/n)?" 
read string 
if [ $string = "y" -o "n" ] 
    then 
     echo "User selected $string" 
    else 
     echo "You didn't enter y/n !!!" 
fi 

我想它如果[$ backup =「y」或「n」]

任何想法?

+4

'if [「$ string」=「y」-o「$ string」=「n」]' – Erik 2013-04-04 09:07:53

+2

@Erik發佈它作爲答案。 – Barmar 2013-04-04 09:10:30

+0

@Erik請發表回覆,以便我可以將其標記爲已解決。 – bsmoo 2013-04-04 09:14:49

回答

2

不是你實際詢問的問題,但是...你告訴用戶輸入「是」或「否」,但只測試y或n - 當然,你給了他們一個提示,但用戶是暗示性的。因此,也許一個更寬鬆的測試是爲了:

echo "Please enter yes or no (y/n)" 
read string 
case "$string" in 
    [yY]* | [nN]*) echo "User entered $string" ;; 
    *) echo "I don't understand '$string'" ;; 
esac 

這會認識到,與Y或N開頭的任何變化 - 通常這是夠好,但你可以收緊測試。此外,由於你可能會想要做的事用yes或no的反應可以展開的情況下(我也收緊在這一個測試)不同:

case "$string" in 
    [yY] | [yY][eE][sS]) echo "Here's where you process yes" ;; 
    [nN] | [nN][oO]) echo "And here you deal with no" ;; 
    *) echo "I don't understand '$string'" ;; 
esac 

你可以用if語句做到這一點但是如果有兩種以上的選擇方案,並且測試適用於大小寫語法,我發現案例更具可讀性。

2

使用此語法bash

if [ "a string" = "another one" ] ; then 

# Whatever 

fi 

對於多個條件語句如OR,使用:

if [ "a string" = "another one" ] || [ "$foo" = "bar" ] ; then 

# Whatever 

fi 

bash還支持非標準[[ ... ]]表達,其可以處理的化合物比較使用單個命令而不是2 [命令:

if [[ "a string" = "another one" || $foo = "bar" ]]; then 

# Whatever 

fi 
+1

他想要OR,而不是AND。 – Barmar 2013-04-04 09:09:13

+0

我編輯了我的答案 – 2013-04-04 09:11:47

+0

我是bash中的一個完整的新手,但是令人驚訝的是'&&'正在** **或**! :-O – zatziky 2017-10-21 08:28:16

0

你還可以嘗試:

echo "Please enter yes or no (y/n)?" 
read string 
if [[ "$string" =~ ^(y|n)$ ]] 
    then 
     echo "User selected $string" 
    else 
     echo "You didn't enter y/n !!!" 
fi 
0

我很好的解決方案是將與case,這是比較容易,如果你想使你的輸入更復雜

case $string in 
    y|n) echo "User selected $string" 
     ;; 
    *) echo "You didn't enter y/n !!!" 
     ;; 
esac 

從那裏你可以延長輕鬆修改它接受大寫或任何:

case $string in 
    y|Y) echo "yes, Sir!" 
     ;; 
    n|N) echo "No, can't do" 
     ;; 
    *) echo "Say what?" 
     ;; 
esac 

檢查case statements更多信息。