[::整数表达式预期

时间:2015-06-15 21:17:09

标签: bash if-statement integer

COUNTER=0    
    let COUNTER=COUNTER+1
    count=`ssh -i /var/www/.ssh/id_rsa_root -o stricthostkeychecking=no $host $cmd`
    count1=`echo $count | awk '{print $4}'`
    printf "count1 : $count1\n"
    result1=${count1/.*}
    if [ "$result1" -ge "0" ]; then
            echo $host 
    else
            echo $host
            exit
    fi

如果$result1的值为INTEGER且大于零,则它会转到IF循环(对我来说很好)

但是当它不是INTEGER时,它会转到else循环(它应该这样做),输出中有以下错误

line 55: [: : integer expression expected

但我不想在输出中出现上述错误。我尝试使用2>/dev/null,但没有运气。

请帮忙!

3 个答案:

答案 0 :(得分:1)

如果要优雅地处理空结果,请明确检查:

if [ -z "$result1" ]; then
        : "ignoring empty string"
elif [ "$result1" -ge 0 ]; then
        printf '%s\n' "$host" 
else
        printf '%s\n' "$host"
        exit
fi

答案 1 :(得分:1)

在进行算术比较之前,您还可以检查result1是否为有效整数:

function isNumber () {
    [[ $1 =~ ^-?[0-9]+$ ]]
}

if ! isNumber "$result1"; then
    echo "not a number"
elif [ "$result1" -ge "0" ]; then
    echo "null or positive"
else
    echo "negative"
fi

答案 2 :(得分:0)

if [ "$result1" -ge "0" ]; then更改为

if (( result1 >= 0 )); then

如果result1未定义(或为空)或恰好是某个string,则此语法不会抛出任何错误。