if语句bash中的多个和ors

时间:2012-11-14 08:52:56

标签: unix

您好我正在研究somoething,我需要创建一个if语句,它将在'&&&'中采用多个变量和'||'组合。现在我正在尝试这个简单的任务,但我收到错误'命令未找到'。我想先和&&两个计数比||它带有我在我的代码中设置的标志。以下是我正在尝试的代码

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

提前谢谢。

2 个答案:

答案 0 :(得分:7)

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

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

补充说明:

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

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

答案 1 :(得分:2)

在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

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