bash - 代码有时运行良好,有时会给出整数表达式预期错误
问题描述
如果它的内存超过给定的内存阈值,我正在编写一个代码来杀死我的工人。下面是代码:
#!/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
请帮我在代码中找到问题。
谢谢
解决方案
从输出中可以看出,memory_usage
设置为字面意思
4261.01
0.34
因此,当下一个输出删除最后一个点之后的东西时,你仍然剩下
4261.01
0
这显然不是整数。这是由于从第一行的某个命令中获取了两行。
@AndrewTaylor是对的,这种方法行不通。我非常推荐阅读流程管理。
推荐阅读
- python - scipy曲线拟合中的回归系数
- javascript - 使用 Python 抓取网页动态内容(动态 HTML/Javascript 表格)
- html - 在 BootstrapVue 中使用卡片时,有没有办法在卡片图像中添加重叠图像?
- c# - 如何在保存之前附加新实体?
- php - Laravel UpdateOrCreate 在更新时创建不同的值
- python - 在 Json 数组中查找键的值 - Python
- mysql - 如何在 sql 的 case 语句中执行计算并将其显示为带有其他值的注释?
- java - 如何在带有图像的列表视图中的自定义适配器中添加搜索过滤器?
- r - 从 gtsummary 包中省略 tbl_regression 中的协变量
- mongodb - 在 MongoDB 嵌套数组中查找空值或零值