Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash脚本中使用while循环检查两个条件_Bash_While Loop_Conditional Statements_Multiple Conditions - Fatal编程技术网

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

在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

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

      $var!=y | |$var!=n
      始终为真。任何不是
      y
      的东西都将使第一部分为真,而
      y
      将使第二部分为真。那么,我如何使其为假,然后思考您尝试测试的逻辑。您希望
      $var
      不是
      x
      还是不是
      y
      ?或者你想知道,
      $var
      不是
      x
      也不是
      y
      ?你能跟我谈谈区别吗?因为现在我对我想要它做什么有点困惑……很抱歉,我也在你的代码上使用它。