首页 > 解决方案 > 代码有时运行良好,有时会给出整数表达式预期错误

问题描述

如果它的内存超过给定的内存阈值,我正在编写一个代码来杀死我的工人。下面是代码:

#!/bin/bash
memory_usage=`ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |cut -d "" -f2 | cut -d "-" -f1 | grep worker | cut -d M -f 1`
echo "Memory usage is ${memory_usage}"
int_memory_usage=${memory_usage%.*}
echo "Int Memory usage is ${int_memory_usage}"
if [ "${int_memory_usage}" -gt 16000 ];
then
    echo "Memory for worker ${memory_usage} above threshold"
    pkill -f "worker"
fi

该代码大部分时间都可以正常工作。它给出了以下答案:

Memory usage is       4282.88 
Int Memory usage is       4282

但是在某些情况下,它会产生以下错误:

Memory usage is       4261.01 
         0.34 
Int Memory usage is       4261.01 
         0
/home/kill_worker.sh: line 6: [:       4261.01 
     0: integer expression expected

请帮我在代码中找到问题。

谢谢

标签: bashshellcut

解决方案


从输出中可以看出,memory_usage设置为字面意思

      4261.01 
         0.34 

因此,当下一个输出删除最后一个点之后的东西时,你仍然剩下

      4261.01 
         0

这显然不是整数。这是由于从第一行的某个命令中获取了两行。

@AndrewTaylor是对的,这种方法行不通。我非常推荐阅读流程管理


推荐阅读