如何在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