下面的 if-then-else 有什么问题?我从来都打不中 else。
if [ $result > $value ]; then
echo HEALTH: OK. Result is $result Value is $value
exit 0
else
echo HEALTH: CRITICAL. Result is $result which is over $value
exit 2
fi
# ./check_cw_auto <AWS variables> 5.0
HEALTH: OK. Result is 275593.8 Value is 5.0
# ./check_cw_auto <AWS variables> 10000000.0
HEALTH: OK. Result is 275593.8 Value is 10000000.0
我正在尝试创建一个 nagios bash 脚本。我尝试使用 -gt 而不是 >,但会出现错误。示例:
./check_cw_auto <AWS variables> 5.0
./check_cw_auto: line 30: [: 256497.2: integer expression expected
HEALTH: CRITICAL. Result is 256497.2 which is over 5.0
答案1
在中[]
,比较两个字符串按照字典顺序,而不是数字形式。您想使用-gt
或-lt
。
编辑:回复您的更新,bash
没有浮点逻辑。您需要使用整数。
答案2
由于比较过程中有一个浮点数,因此可以使用公元前进行比较,如果比较结果为真,则 bc 返回 1
if [ $(echo "$result > $value" | bc -q ) -eq 1 ]; then
echo HEALTH: OK. Result is $result Value is $value
exit 0
else
echo HEALTH: CRITICAL. Result is $result which is over $value
exit 2
fi
答案3
http://mywiki.wooledge.org/BashPitfalls#A.5B.5B_.24foo_.3E_7_.5D.5D
它被视为字符串比较。
改用“-gt”:
if [ $result -gt $value ]; then