如何在Bash中询问是/否类型问题?如何在bash中提示是或否?
我问的问题... echo "Do you like pie?"
和接收答案... read pie
我怎样做的东西,如果答案是yes
,或y
开始(所以是的,是的,等,也会起作用)。
如何在Bash中询问是/否类型问题?如何在bash中提示是或否?
我问的问题... echo "Do you like pie?"
和接收答案... read pie
我怎样做的东西,如果答案是yes
,或y
开始(所以是的,是的,等,也会起作用)。
我喜欢用下面的函数:
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]它将按任意键以外重复该消息。
这工作:
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的。
如果您愿意,可以随意更好。
这工作太:
read -e -p "Do you like pie? " choice
[[ "$choice" == [Yy]* ]] && echo "doing something" || echo "that was a no"
模式开始y或将被视为yes
。
真棒1班轮 – 2015-04-10 16:49:33
相较于其他答案这个功能可以使您设置一个默认的可能性:
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
'读-p“$ @ [Y/n]:“'不正确,您需要使用'$ *',否则如果使用多个参数调用该函数,则读取将爆炸。另外,技术上这应该使用'yes_or_not'$ @'',但是对于这个只有在你使用'yes_or_not'foo bar''时才重要,然后用户不输入yes或no(内部空间将会丢失)。 – 2015-04-03 17:04:44
@EtanReisner你是对的谢谢! – Tiago 2015-04-03 17:10:00
这真是太棒了:) – 2015-04-03 18:43:57