我有一个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
答案 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"
我相信这个脚本只会给你两个选择...