Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/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
Shell 和,或if语句中的条件_Shell_Unix_If Statement_Conditional Statements - Fatal编程技术网

Shell 和,或if语句中的条件

Shell 和,或if语句中的条件,shell,unix,if-statement,conditional-statements,Shell,Unix,If Statement,Conditional Statements,我有以下代码 elif [ $text2 == 'LANDING' ] && [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; then 条件是text2应该是landing,而text4可以是fail或null。 如何评估上述命令 如果我做错了什么,请帮忙 提前感谢使用大括号或圆括号将|操作数分组在一起。圆括号看起来更好,但它们创建的子shell效率很低,所以大括号是一种方法,尽管它们很难看 elif [ $text2 == 'LAN

我有以下代码

elif [ $text2 == 'LANDING' ] && [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; then
条件是text2应该是landing,而text4可以是fail或null。 如何评估上述命令

如果我做错了什么,请帮忙
提前感谢

使用大括号或圆括号将
|
操作数分组在一起。圆括号看起来更好,但它们创建的子shell效率很低,所以大括号是一种方法,尽管它们很难看

elif [ $text2 == 'LANDING' ] && { [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; }; then
请注意,大括号需要额外的分号

或者,如果您使用的是bash,则可以使用双方括号,这允许使用稍微漂亮的:

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

使用大括号或圆括号将操作数分组在一起。圆括号看起来更好,但它们创建的子shell效率很低,所以大括号是一种方法,尽管它们很难看

elif [ $text2 == 'LANDING' ] && { [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; }; then
请注意,大括号需要额外的分号

或者,如果您使用的是bash,则可以使用双方括号,这允许使用稍微漂亮的:

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

您需要明确地将它们分组:

elif  [ "$text2" = 'LANDING' ] &&
      { [ "$text4" = 'FAIL' ] || [ "$text4" = '' ]; }; then
在以下两种情况下,您的尝试都会成功:

  • text2
    着陆,而
    text4
    失败
  • text4
    为空或未设置
  • 由于
    &&
    | |
    具有相同的优先级,因此您可以(可能令人惊讶地)不分组地编写它:

    elif [ "$text4" = '' ] || [ "$text4" = FAIL ] && [ $text2 == 'LANDING' ]; then
    
    如果使用的是
    bash
    ,则可以使用
    […]
    命令而不是
    […]
    。分组是必需的;
    [[…]]
    中的运算符确实具有其他语言所期望的先例(即,
    a | | b和&c
    a | |(b和&c)
    ,而不是
    (a | b)和&c


    您需要明确地将它们分组:

    elif  [ "$text2" = 'LANDING' ] &&
          { [ "$text4" = 'FAIL' ] || [ "$text4" = '' ]; }; then
    
    在以下两种情况下,您的尝试都会成功:

  • text2
    着陆,而
    text4
    失败
  • text4
    为空或未设置
  • 由于
    &&
    | |
    具有相同的优先级,因此您可以(可能令人惊讶地)不分组地编写它:

    elif [ "$text4" = '' ] || [ "$text4" = FAIL ] && [ $text2 == 'LANDING' ]; then
    
    如果使用的是
    bash
    ,则可以使用
    […]
    命令而不是
    […]
    。分组是必需的;
    [[…]]
    中的运算符确实具有其他语言所期望的先例(即,
    a | | b和&c
    a | |(b和&c)
    ,而不是
    (a | b)和&c


    不是特别推荐,但是对于bash,您可以在
    […]

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

    不是特别推荐,但是对于bash,您可以在
    […]

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