我遇到此代码的问题:
highmem="58.0"
counter=1
while [ $counter = 1 ];
do
#sleep 5
mem=`ps -C ats -o pid=,%mem= | awk {'print $2'}`
echo $mem
echo $highmem
if [ "$mem" -gt "$highmem" ]
then
echo test
fi
done
获取./memtest: line 9: [: 20.3: integer expression expected
。
我无法弄清楚我做错了什么。我假设我将整数与文本进行比较?
答案 0 :(得分:1)
此代码存在一些问题:
done
,以结束循环。[ $counter = 1 ]
不是有效的比较,您应该使用[ $counter -eq 1 ]
counter
的值永远不会更改。 mem
和highmem
的值不是两个整数。您应该从打印声明中注意到这一点。由于这两个变量在句点之后似乎都浮动了一个数字,因此只需将它们乘以10然后进行比较即可。这可以通过以下方式实现:if [ "${mem//./}" -gt "${highmem//./}" ]
。答案 1 :(得分:0)
问题有两个 - 首先我使用-GT而不是>标志。另一个问题是我在比较11.6到60 ..所以我将文本与数字进行比较。 简单的解决方法是将方程式或分数从方程中取出或者只是去掉,然后就可以完成工作了。有可能做的事情我只是用awk和cut做了。所以最后我的highmem等于整数,没有分数和mem,所以这两个数字都变成了整数进行比较
感谢您的所有帮助