if语句中的AND,OR条件

时间:2016-06-01 21:46:41

标签: shell unix if-statement conditional-statements

我有以下代码

elif [ $text2 == 'LANDING' ] && [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; then

条件是text2应该登陆,text4可以是fail或null。 如何评估上述命令。

如果我做错了,请帮忙 提前致谢

3 个答案:

答案 0 :(得分:1)

您需要明确地对它们进行分组:

elif  [ "$text2" = 'LANDING' ] &&
      { [ "$text4" = 'FAIL' ] || [ "$text4" = '' ]; }; then

您的尝试将成功执行以下两个条件之一:

  1. text2登陆 text4失败
  2. text4是空的或未设置。
  3. 由于&&||具有相同的优先级,您可以(可能令人惊讶地)编写它而不进行分组:

    elif [ "$text4" = '' ] || [ "$text4" = FAIL ] && [ $text2 == 'LANDING' ]; then
    

    如果您使用的是bash,则可以使用[[ ... ]]命令代替[ ... ]。分组是必需的; [[ ... ]] 中的运算符具有您期望从其他语言中获得的优先级(即a || b && ca || (b && c),而不是(a || b) && c。< / p>

    elif [[ $text2 == 'LANDING' && ( "$text4" == 'FAIL' || "$text4" == '') ]]; then
    

答案 1 :(得分:1)

不是特别推荐,但使用bash,您可以在<system.serviceModel> <diagnostics> <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000" maxSizeOfMessageToLog="2000"/> </diagnostics> <!-- your other stuff here --> </system.serviceModel>

中使用扩展的通配模式
tracing.scvlog

答案 2 :(得分:0)

使用花括号或括号将||个操作数组合在一起。圆括号看起来更好,但是它们会创建一个效率低下的子壳,所以即使它们很难看,也可以使用花括号。

elif [ $text2 == 'LANDING' ] && { [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; }; then

请注意,花括号需要额外的分号。

或者,如果你正在使用bash,你可以使用双方括号,这样可以让它更漂亮:

elif [[ $text2 == 'LANDING' && ("$text4" == 'FAIL' || "$text4" == '') ]]; then