Shellscript missing]

时间:2015-02-22 11:08:33

标签: bash

我有一个shellcript,在行

中告诉我missing ]
if [ $status != "2" && $status != "3" && `echo "$temp1 > $upperLimit" | bc` = "1" ]

以及行中的missing ]

if [ $status = "2" && `cat motionsensordate` \> `date +%s` ]

为什么?

2 个答案:

答案 0 :(得分:2)

[不支持括号内的逻辑运算符。你必须在

之外使用它们
if [ "$status" != 2 ] && [ "$status" != 3 ] ...

对单个括号中的变量使用双引号,以防止变量为空时出现unary operator expected错误。

或者,切换到双括号:

if [[ $status != 2 && $status != 3 ... ]]

此外,不同于2和3的状态可以用模式表示:

if [[ $status != [23] && ... ]]

答案 1 :(得分:0)

如果您愿意(除了这里的答案)将条件组合在一起:

if [[ (  COND1  ||  COND2 ) && COND3  ]] 
then
    echo "$cmd"
    break
fi