您好我正在研究somoething,我需要创建一个if语句,它将在'&&&'中采用多个变量和'||'组合。现在我正在尝试这个简单的任务,但我收到错误'命令未找到'。我想先和&&两个计数比||它带有我在我的代码中设置的标志。以下是我正在尝试的代码
if [[$pcount -eq 0 ] && [$ucount -eq 0]] || [test $flag -eq 1]
then
do my stuff
else
exit 1
fi
提前谢谢。
答案 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
但是,我会推荐第一种方法。