多个和ors在if语句中

您好我正在somoething工作,我需要创build一个if语句,将采取'&&'和'||' 组合。 现在我正在尝试这个简单的任务,但我得到错误'命令未find'。 我想先&&两个计数比|| 它与我在我的代码中设置的标志。 以下是我正在尝试的代码

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

先谢谢你。

你不能嵌套,因为[是一个shell命令,而不是一个单独的语法结构。 在Bash中,可以使用支持嵌套的[[ ... ]]语法结构,而在便携式sh ,可以使用括号( ... )作为优先级:

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

补充说明:

  • [test condition]没有意义,因为[运算符已经是test的别名。 写入[ condition ]test condition

  • [和测试之前留出一个空格,否则sh不会将[作为命令名称。 [是任何其他命令,不与特殊的解析规则相关联。

在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 

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