在bash脚本中使用while循环检查两个条件
我想检查用户是否没有输入“y”或“n”,如果没有,则继续循环,要求用户输入正确的字母,但它不起作用。。。下面的代码显示了我到目前为止所做的尝试…有人能帮我吗在bash脚本中使用while循环检查两个条件,bash,while-loop,conditional-statements,multiple-conditions,Bash,While Loop,Conditional Statements,Multiple Conditions,我想检查用户是否没有输入“y”或“n”,如果没有,则继续循环,要求用户输入正确的字母,但它不起作用。。。下面的代码显示了我到目前为止所做的尝试…有人能帮我吗 echo "Enter 'y' to exit or 'n' to continue" echo -n "Do you want to exit? " read character while [ "$character" != "y" || "$character" != "n" ]; do echo -n "Wrong k
echo "Enter 'y' to exit or 'n' to continue"
echo -n "Do you want to exit? "
read character
while [ "$character" != "y" || "$character" != "n" ];
do
echo -n "Wrong key re-enter 'y' to exit or 'n' to continue"
read character
done
你可以:
while [[ $(read -sn1 character; echo ${character^^}) =~ [^YN] ]]; do
echo -n "Wrong key ..."
done
- 如果不想回显键,则需要-s
- 您需要使用-n1将输入限制为一个字符
- 您还可以通过$检查是否按了ctrl+c和ctrl+d?(ctrl-d为1,ctrl+c为130,但ctrl+d捕捉仅在包含-e标志并使用readline时有效)
- 如果需要,您也可以在其中包含一个提示,而且,您不必使用“$character”,您只需不给它任何内容并选中$REPLY即可 如果你真的不想CTRL+C完全按下,考虑使用陷阱
- 非常感谢大家。。。经过良好的毅力和韧性,我终于找到了我想要的答案。。。A发布了以下代码:
#if the user's input is not Y or N
while [[ $(read -sn1; echo ${character^^}) =~ [^YN] ]];
do
echo -n "Re-enter 'y' to exit or 'n'to continue: ?"
read character
done
这种方法试图考虑更多的用户可能性,并且仍然完成同样的事情
#if the user's input is not Y or N, Yes or No, y or n, yes or no
while [[ ! "$character" =~ ^([yY][eE][sS]|[yY])$ ]] && [[ ! "$character" =~ ^([nN][oO]|[nN])$ ]]
do
echo -n "Wrong key re-enter 'y' to exit or 'n' to continue"
read character
done
$var!=y | |$var!=n
始终为真。任何不是y
的东西都将使第一部分为真,而y
将使第二部分为真。那么,我如何使其为假,然后思考您尝试测试的逻辑。您希望$var
不是x
还是不是y
?或者你想知道,$var
不是x
也不是y
?你能跟我谈谈区别吗?因为现在我对我想要它做什么有点困惑……很抱歉,我也在你的代码上使用它。