Unix if语句bash中的多个and和OR

Unix if语句bash中的多个and和OR,unix,Unix,您好,我正在做一些事情,我需要创建一个if语句,它将以“&&”和“| |”组合形式接受多个变量。现在我正在尝试完成这个简单的任务,但是我得到了错误“Command not found”。我想用我在代码中设置的标志首先计算两个计数。下面是我正在尝试的代码 if [[$pcount -eq 0 ] && [$ucount -eq 0]] || [test $flag -eq 1] then do my stuff else exit 1 fi 提前感谢您。在bash中,您可

您好,我正在做一些事情,我需要创建一个if语句,它将以“&&”和“| |”组合形式接受多个变量。现在我正在尝试完成这个简单的任务,但是我得到了错误“Command not found”。我想用我在代码中设置的标志首先计算两个计数。下面是我正在尝试的代码

if [[$pcount -eq 0 ] && [$ucount -eq 0]] ||  [test $flag -eq 1]
then 
do my stuff 
else 
exit 1
fi

提前感谢您。

在bash中,您可以这样做:

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

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

但是,我推荐第一种方法。

您不能嵌套
[…]
,因为
[
是一个shell命令,而不是一个单独的语法构造。在Bash中,您可以使用支持嵌套的
[…]
语法构造,在portable
sh中,您可以使用
(…)
优先顺序的括号:

if ([ $pcount -eq 0 ] && [ $ucount -eq 0 ]) ||  [ $flag -eq 1 ]
补充说明:

  • [测试条件]
    没有意义,因为
    [
    运算符已经是
    测试的别名。请编写
    [条件]
    测试条件

  • [
    和测试之前留一个空格,否则
    sh
    不会将
    [
    识别为命令名。
    [
    与其他命令一样,是一个与特殊解析规则无关的命令


感谢您如此详尽的回答