2015-04-03 24 views
3

如何在Bash中詢問是/否類型問題?如何在bash中提示是或否?

我問的問題... echo "Do you like pie?"

和接收答案... read pie

我怎樣做的東西,如果答案是yes,或y開始(所以是的,是的,等,也會起作用)。

回答

6

我喜歡用下面的函數:

function yes_or_no { 
    while true; do 
     read -p "$* [y/n]: " yn 
     case $yn in 
      [Yy]*) return 0 ;; 
      [Nn]*) echo "Aborted" ; return 1 ;; 
     esac 
    done 
} 

所以在你的腳本,你可以使用這樣的:

yes_or_no "$message" && do_something 

如果用戶比[yYnN]它將按任意鍵以外重複該消息。

+1

'讀-p「$ @ [Y/n]:「'不正確,您需要使用'$ *',否則如果使用多個參數調用該函數,則讀取將爆炸。另外,技術上這應該使用'yes_or_not'$ @'',但是對於這個只有在你使用'yes_or_not'foo bar''時才重要,然後用戶不輸入yes或no(內部空間將會丟失)。 – 2015-04-03 17:04:44

+0

@EtanReisner你是對的謝謝! – Tiago 2015-04-03 17:10:00

+0

這真是太棒了:) – 2015-04-03 18:43:57

1

這工作:

echo "Do you like pie?" 
read pie 
if [[ $pie == y* ]]; then 
    echo "You do! Awesome." 
else 
    echo "I don't like it much, either." 
fi 

[[ $pie == y* ]]測試,看看變量$pie開始與Y的。

如果您願意,可以隨意更好。

4

這工作太:

read -e -p "Do you like pie? " choice 
[[ "$choice" == [Yy]* ]] && echo "doing something" || echo "that was a no" 

模式開始y或將被視爲yes

+1

真棒1班輪 – 2015-04-10 16:49:33

0

相較於其他答案這個功能可以使您設置一個默認的可能性:

function askYesNo { 
     QUESTION=$1 
     DEFAULT=$2 
     if [ "$DEFAULT" = true ]; then 
       OPTIONS="[Y/n]" 
       DEFAULT="y" 
      else 
       OPTIONS="[y/N]" 
       DEFAULT="n" 
     fi 
     read -p "$QUESTION $OPTIONS " -n 1 -s -r INPUT 
     INPUT=${INPUT:-${DEFAULT}} 
     echo ${INPUT} 
     if [[ "$INPUT" =~ ^[yY]$ ]]; then 
      ANSWER=true 
     else 
      ANSWER=false 
     fi 
} 

askYesNo "Do it?" true 
DOIT=$ANSWER 

if [ "$DOIT" = true ]; then 
    < do some stuff > 
fi 

在命令行中,你會看到

Do it? [Y/n] y