Multiple and ors in if statement bash

前端 未结 2 1513
名媛妹妹
名媛妹妹 2021-01-20 06:17

Hi i am working on somoething , i need to create a if statement which will take multiple variables in \'&&\' and \'||\' combination . for now i am trying to this thi

相关标签:
2条回答
  • 2021-01-20 06:53

    You can't nest [ ... ] because [ is a shell command, not a separate syntactic construct. In Bash, you can use the [[ ... ]] syntactic construct which does support nesting, and in portable sh you can use the ( ... ) parentheses for precedence:

    if ([ $pcount -eq 0 ] && [ $ucount -eq 0 ]) ||  [ $flag -eq 1 ]
    

    Additional remarks:

    • [test condition] doesn't make sense, since the [ operator is already an alias for test. Write either [ condition ] or test condition.

    • Leave a space before [ and the test, otherwise sh won't recognize the [ as a command name. [ is a command like any other and is not associated with special parsing rules.

    0 讨论(0)
  • 2021-01-20 07:12

    In bash, you can do it like this:

    if [[ ( $pcount == 0  &&  $ucount == 0 ) || ( $flag == 1 ) ]]
    then
        echo "do stuff"
    fi
    

    Alternatively:

    if [ "$pcount" -eq 0 -a "$ucount" -eq 0 ] || [ "$flag" -eq 1 ]
    then
         echo "do stuff"
    fi
    

    But, I would recommend the first approach.

    0 讨论(0)
提交回复
热议问题