Shell脚本,要求用户继续使用y / n

时间:2010-03-05 14:52:08

标签: bash shell

我有一个shell脚本,我想询问用户是否要继续。如果他们输入'n'并按回车键,脚本将退出。

如果他们按'y'并输入它将继续运行。我把它放在我的脚本的顶部,但无论我输入什么,它都会继续。

我做错了什么?

goon=
while [ -z $goon ]
do
    echo -n 'Do you want to continue? '
    read goon
    if [[ $goon = 'n' ]]
    then
        break
    fi
    goon=
done

8 个答案:

答案 0 :(得分:5)

使用这样的无限循环和case / esac:

while true
do
    read -r -p 'Do you want to continue? ' choice
    case "$choice" in
      n|N) break;;
      y|Y) echo 'Do your stuff here';;
      *) echo 'Response not valid';;
    esac
done

答案 1 :(得分:4)

'break'语句将退出你的while循环。

如果要退出要使用“退出”的脚本。

答案 2 :(得分:2)

如果我摆脱加倍的方括号,那对我来说效果非常好:

if [ $goon = 'n' ]

答案 3 :(得分:1)

而不是echo + read,只需使用read -p

read -p  "Do you want to continue? " goon 

答案 4 :(得分:0)

以下是一个工作示例(==代替=进行相等测试)

goon=
while [ -z $goon ]
do
    echo -n 'Do you want to continue? '
    read goon
    if [[ $goon == 'n' ]]
    then
        break
    fi
    goon=
done

奇怪的是,原作对我来说也不错......

答案 5 :(得分:0)

我不太积极,但看起来你的if语句总是评估为false。 这是一个关于BASH编码的资源,它解释了如何以您尝试的方式使用条件。 http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-6.html#ss6.4

答案 6 :(得分:0)

如果您希望整个脚本退出,我认为您的意思是“退出”而不是“休息”。

另外,你实际上并没有检查“y”,所以即使他们说“y”,它也会永远循环。

if [[ $goon = 'n' ]]
then
    exit
fi
if [[ $goon = 'y' ]]
then
    break
fi

答案 7 :(得分:0)

尝试以下脚本

#!/bin/bash
pause ()
{
 REPLY=X
 while [ "$REPLY" == "X" ] || [ "$REPLY" != "n" ]
 do
 echo -e "\t\tPress 'n' to continue\t\t\tPress 'x' to quit"
 read -n1 -s
     case "$REPLY" in
     "x")  exit                      ;;
     "X")  echo "case sensitive!!"   ;; 
     "n")  clear                     ;;
     "N")  echo "case sensitive!!"   ;;
      * )  echo "Invalid Option"     ;;
 esac
 done
 }
 pause
 echo "Hi"

我相信这个脚本只会给你两个选择...