no scp yes 不提示_如何在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 (在脚本内部)。


版权声明:本文为weixin_28892727原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。