2015-04-03 46 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 
相关问题