java输入YN控制循环_如何在Linux Shell脚本中提示输入Yes / No / Cancel?

我想在shell脚本中暂停输入,并提示用户选择。 标准的“是,否或取消”类型的问题。 如何在典型的bash提示中完成此操作?

#1楼

使用read命令:

echo Would you like to install? "(Y or N)"

read x

# now check if $x is "y"

if [ "$x" = "y" ]; then

# do something here!

fi

然后您需要的所有其他东西

#2楼

这是我整理的:

#!/bin/sh

promptyn () {

while true; do

read -p "$1 " yn

case $yn in

[Yy]* ) return 0;;

[Nn]* ) return 1;;

* ) echo "Please answer yes or no.";;

esac

done

}

if promptyn "is the sky blue?"; then

echo "yes"

else

echo "no"

fi

我是一个初学者,所以可以加一点盐,但是似乎有效。

#3楼

yn() {

if [[ 'y' == `read -s -n 1 -p "[y/n]: " Y; echo $Y` ]];

then eval $1;

else eval $2;

fi }

yn 'echo yes' 'echo no'

yn 'echo absent no function works too!'

#4楼

此解决方案读取单个字符并在“是”响应上调用一个函数。

read -p "Are you sure? (y/n) " -n 1

echo

if [[ $REPLY =~ ^[Yy]$ ]]; then

do_something

fi

#5楼

多选版本:

ask () { # $1=question $2=options

# set REPLY

# options: x=..|y=..

while $(true); do

printf '%s [%s] ' "$1" "$2"

stty cbreak

REPLY=$(dd if=/dev/tty bs=1 count=1 2> /dev/null)

stty -cbreak

test "$REPLY" != "$(printf '\n')" && printf '\n'

(

IFS='|'

for o in $2; do

if [ "$REPLY" = "${o%%=*}" ]; then

printf '\n'

break

fi

done

) | grep ^ > /dev/null && return

done

}

例:

$ ask 'continue?' 'y=yes|n=no|m=maybe'

continue? [y=yes|n=no|m=maybe] g

continue? [y=yes|n=no|m=maybe] k

continue? [y=yes|n=no|m=maybe] y

$

它将REPLY设置为y (在脚本内部)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值