比较可以具有数字或字符串作为值的变量

比较可以具有数字或字符串作为值的变量

我有一个以我的一个脚本命名的变量Seconds_Behind_Master。问题是这个变量可以有一个数值,也可以将字符串NULL作为其值。现在,当我尝试在 shell 中执行此脚本时,它会被执行,但会给出如下警告:

[: Illegal number: NULL

我认为这是由于在这种情况下值是,NULL但当它与数字值进行比较时,60它会发出此警告。我该如何纠正?

答案1

在这种情况下你应该使用算术评估- :(( expression ))

if (( $Seconds_Behind_Master >= 60 )); then
    echo "replication delayed > 60."
elif [ "$Seconds_Behind_Master" = "NULL" ]; then
    echo "Delay is Null."
fi

如果您想遵守标准 POSIX,那么您可以使用:

if echo $Seconds_Behind_Master | egrep -q '^[0-9]+$' && [ "$Seconds_Behind_Master" -ge "60" ] ; then
    echo "replication delayed >= 60."
elif [ "$Seconds_Behind_Master" = "NULL" ]; then
    echo "Delay is Null."
fi

更多关于:Shell - 测试数字变量

答案2

检查 var 是否是NULL第一个,然后检查它是否是>= 60。考虑以下代码:

if [ "$Seconds_Behind_Master" = "NULL" ]; then
    echo "Delay is Null."
elif [ "$Seconds_Behind_Master" -ge 60 ] 2>/dev/null; then
    echo "replication delayed >= 60."
else
    echo "Seconds_Behind_Master is neither NULL or >= 60"
fi

您还可以更换线路

elif [ "$Seconds_Behind_Master" -ge 60 ] 2>/dev/null; then

elif [[ "$Seconds_Behind_Master" -ge 60 ]]; then

如果您愿意并且正在使用支持该语法的 shell [[

相关内容