简单的 nagios 脚本失败

简单的 nagios 脚本失败

下面的 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

相关内容