摆脱脚本中预期的整数表达式

时间:2016-03-08 18:37:09

标签: bash

我知道这里已经多次询问过这个问题了,但是我已经查看过所有以前的内容但仍然无法解决。这只是一个简单的脚本,它检查正在运行的服务并执行我定义的操作。

#!/bin/bash

SERVICE="$1"
RESULT=`ps -a | sed -n /${SERVICE}/p`
MEM=$(ps aux | sort -rk +4 | grep $1 | grep -v grep | awk '{print    $4}' | awk 'NR == 1')

if [ "${RESULT:-null}" = null ]; then
echo "$1 is NOT running"
else
echo "$MEM"
fi

if [ "$MEM" -ge 1 ]; then
mailx -s "Alert: server needs to be checked"    me@admins.com
fi

这是我得到的错误:

./check_service: line 15: [: 5.4: integer expression expected

如果我取出MEM变量的命令并在脚本之外运行它返回5.4,这就是我所期望的。在我的脚本中,我尝试将“1”更改为“1.0”,因为输出将始终为十进制格式,但这没有帮助。我觉得我在这里缺少一些简单的东西。

1 个答案:

答案 0 :(得分:2)

错误是因为bash仅支持整数数学,而您的脚本正在将5.41进行比较。

您可以使用以下方法修复脚本:

if [[ ${MEM%.*} -ge 1 ]]l then
    mailx -s "Alert: server needs to be checked"    me@admins.com
fi

${MEM%.*}将在小数点后删除部分,因为您只是将其与1进行比较,因此不需要在变量MEM中包含小数点。