我有一个以我的一个脚本命名的变量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 [[
。