Bash while循环shell脚本中允许的值
我正在试图找出运行while循环的最佳方法,该循环读取输入,输入只能是Y或N(大写或小写),如果输入了其他内容(Y或N除外),则再次运行循环。。。。如果它是空的,也可以再次运行循环…下面是我想到的,但我不认为这不是最好的解决方案,而且似乎不起作用Bash while循环shell脚本中允许的值,bash,shell,sh,Bash,Shell,Sh,我正在试图找出运行while循环的最佳方法,该循环读取输入,输入只能是Y或N(大写或小写),如果输入了其他内容(Y或N除外),则再次运行循环。。。。如果它是空的,也可以再次运行循环…下面是我想到的,但我不认为这不是最好的解决方案,而且似乎不起作用 read ANS while [[ $ANS = "" ]]; do echo "This Cannot be Blank, Please enter answer again" read ANS done while : do echo
read ANS
while [[ $ANS = "" ]]; do
echo "This Cannot be Blank, Please enter answer again"
read ANS
done
while :
do
echo "Enter Y for yes, N for no"
read system
case "${system}" in
[yY]) export ANS=YES ;;
[pP]) export ANS=NO ;;
esac
done
四个问题:一,。循环中没有中断,因此它当然是一个无限循环;2.no的情况是
[pP]
?打字错误3.我认为没有理由导出ANS
。4.阅读ANS
而不使用它却立即覆盖它有什么意义?你可以用Yes
或Yes
以及[yY]*
(你的Pp
(修复为Nn
)对选项和陷阱进行长时间的详细讨论。它是针对Python的,但其中很多也适用于Bash,或者只是一般的编程。如果用户输入Yes
,该怎么办?添加一个*
怎么样?或者,只需测试${request,,}
,然后[yn]*
?请随意编辑…必须运行…做我需要的事情,如果有人输入(空白)它将运行到循环中,当输入了除y或y或n或n之外的其他内容时,它将进入循环中。。。
while :;do
read -p "Enter Y for yes, N for no: " request;
if [[ $request == [YynN] ]];then
break;
fi;
done