在 bash 脚本中使用 while 循环检查两个条件

checking two conditions using while loop in bash script

我想检查用户是否没有输入 '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 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