【问题标题】:Two conditions in a bash if statementbash if 语句中的两个条件
【发布时间】:2012-07-06 21:58:49
【问题描述】:

我正在尝试编写一个脚本来读取两个选项,如果它们都是“y”,我希望它说“测试完成!”如果其中一个或两个不是“y”,我希望它说“测试失败!”

这是我想出的:

echo "- Do You want to make a choice?"
read choice

echo "- Do You want to make a choice1?"
read choice1

if [ "$choice" != 'y' ] && [ "$choice1" != 'y' ]; then
    echo "Test Done!"
else
    echo "Test Failed!"
fi

但是当我用“y”回答这两个问题时,它会说“测试失败!”而不是“测试完成!”。当我用“n”回答这两个问题时,它会说“测试完成!”

我做错了什么?

【问题讨论】:

    标签: bash if-statement conditional-statements


    【解决方案1】:

    您正在检查错误的条件。

    if [ "$choice" != 'y' ] && [ "$choice1" != 'y' ];
    

    choice!='y'choice1!='y' 时上述语句为真,因此程序正确打印“Test Done!”

    修正后的脚本是

    echo "- Do You want to make a choice ?"
    read choice
    
    echo "- Do You want to make a choice1 ?"
    read choice1
    
    if [ "$choice" == 'y' ] && [ "$choice1" == 'y' ]; then
        echo "Test Done !"
    else
        echo "Test Failed !"
    fi
    

    【讨论】:

      【解决方案2】:

      试试:

      if [[ "$choice" != 'y' && "$choice1" != 'y' ]]; then
          echo "Test Done!"
      else
          echo "Test Failed!"
      fi
      

      【讨论】:

      • 请考虑在您的答案中添加一些解释或细节。虽然它可能会回答问题,但只是添加一段代码作为答案,并不能帮助 OP 或未来的社区成员理解问题或建议的解决方案。
      【解决方案3】:

      你的比较逻辑倒退了;根据你想说的描述

      if [ "$choice" = 'y' ] && [ "$choice1" = 'y' ]; then
      

      我真的很惊讶 && 构造可以工作,尽管进一步检查它可能应该。不过,我会把它写成

      if [ "$choice" = 'y' -a "$choice1" = 'y' ]; then
      

      【讨论】:

        【解决方案4】:

        另一个想法,

        $ c1='y' ; c2='y' ; [[ ${c1} = 'y' ]] && [[ ${c2} = 'y' ]] && echo true || echo false  
        true  
        $ c1='n' ; c2='y' ; [[ ${c1} = 'y' ]] && [[ ${c2} = 'y' ]] && echo true || echo false  
        false  
        $ c1='n' ; c2='y' ; [[ ${c1} = 'y' ]] || [[ ${c2} = 'y' ]] && echo true || echo false  
        true  
        $ c1='n' ; c2='n' ; [[ ${c1} = 'y' ]] || [[ ${c2} = 'y' ]] && echo true || echo false  
        false  
        $  
        

        乱码溢出。 (;

        【讨论】:

          【解决方案5】:
          if [ "$choice" != 'y' -a "$choice1" != 'y' ]; then
              echo "Test Done !"
          else
              echo "Test Failed !"
          fi
          

          【讨论】:

            【解决方案6】:

            程序正在按照您告诉它的方式进行操作。你说“如果第一个选择不等于'y'并且第二个选择不等于'y'然后打印“测试完成!”否则打印“测试失败!” - 所以只有当两个选择都是不会 y 将打印“测试完成!”。

            你的意思可能是:

            echo "- Do You want to make a choice ?"
            read choice
            
            echo "- Do You want to make a choice1 ?"
            read choice1
            
            if [ "$choice" == 'y' ] && [ "$choice1" == 'y' ]; then
            echo "Test Done !"
            else
            echo "Test Failed !"
            fi
            

            我将!= 不等于更改为== 等于。现在,只有当您对两个问题都回答“y”时,才会“测试完成!”打印出来。

            【讨论】:

            • 我们真的需要 7 个(!)答案都说逻辑颠倒了吗?
            • @AdamRosenfield 不!我只有在我发布我的时候才看到其他人。我没有删除,因为其他 6 个大多数都没有提到 !=== 的含义。 OP 显然对编程来说是相当新的,所以仅仅说“你的逻辑颠倒了”而只用最少的解释可能不会帮助他们学习。
            • 是的,其他大多数答案都没有那么有用,我只是选择了你,因为你的答案是最新的。这是Fastest Gun in the West 问题的教科书示例。
            【解决方案7】:

            你的逻辑颠倒了;当您应该检查 == 时,您正在检查 !=。试试这个:

            if [ "$choice" == 'y' ] && [ "$choice1" == 'y' ]; then
                echo "Test Done !"
            else
                echo "Test Failed !"
            fi
            

            【讨论】:

              【解决方案8】:

              线

              if [ "$choice" != 'y' ] && [ "$choice1" != 'y' ]; then
              

              测试两个选项 不是 'y',所以当两个选项 都是 'y' 时,该语句为假并且您的程序正确打印“测试失败” .

              【讨论】:

                猜你喜欢
                • 2014-10-13
                • 2012-06-10
                • 2011-08-27
                • 2016-07-27
                • 2016-02-29
                • 2014-04-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多