Unix if语句bash中的多个and和OR
您好,我正在做一些事情,我需要创建一个if语句,它将以“&&”和“| |”组合形式接受多个变量。现在我正在尝试完成这个简单的任务,但是我得到了错误“Command not found”。我想用我在代码中设置的标志首先计算两个计数。下面是我正在尝试的代码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 [[$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中,您可以使用支持嵌套的[…]
语法构造,在portablesh中,您可以使用(…)
优先顺序的括号:
if ([ $pcount -eq 0 ] && [ $ucount -eq 0 ]) || [ $flag -eq 1 ]
补充说明:
[测试条件]
没有意义,因为[
运算符已经是测试的别名。请编写[条件]
或测试条件
- 在
[
和测试之前留一个空格,否则sh
不会将[
识别为命令名。[
与其他命令一样,是一个与特殊解析规则无关的命令
感谢您如此详尽的回答