代码有时运行良好,有时会给出 Integer 表达式预期的错误
Code runs fine sometimes and gives Integer expression expected error sometimes
我正在编写代码以在其内存超过给定内存阈值时杀死我的工作人员。下面是代码:
#!/bin/bash
memory_usage=`ps -eo size,pid,user,command --sort -size | awk '{ hr=/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
这显然不是一个整数。这是由于从第一行的某个命令中获取了两行。
is right, this approach isn't going to work. I would very much recommend reading up on process management.
感谢您的建议。我在我的代码中添加了以下行,它开始正常工作。
memory_usage=`echo "${memory_usage}" | head -1`
谢谢。
我正在编写代码以在其内存超过给定内存阈值时杀死我的工作人员。下面是代码:
#!/bin/bash
memory_usage=`ps -eo size,pid,user,command --sort -size | awk '{ hr=/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
这显然不是一个整数。这是由于从第一行的某个命令中获取了两行。
感谢您的建议。我在我的代码中添加了以下行,它开始正常工作。
memory_usage=`echo "${memory_usage}" | head -1`
谢谢。