我知道这里已经多次询问过这个问题了,但是我已经查看过所有以前的内容但仍然无法解决。这只是一个简单的脚本,它检查正在运行的服务并执行我定义的操作。
#!/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”,因为输出将始终为十进制格式,但这没有帮助。我觉得我在这里缺少一些简单的东西。
答案 0 :(得分:2)
错误是因为bash仅支持整数数学,而您的脚本正在将5.4
与1
进行比较。
您可以使用以下方法修复脚本:
if [[ ${MEM%.*} -ge 1 ]]l then
mailx -s "Alert: server needs to be checked" me@admins.com
fi
${MEM%.*}
将在小数点后删除部分,因为您只是将其与1
进行比较,因此不需要在变量MEM
中包含小数点。