如果Statement bash命令

时间:2015-06-22 21:29:51

标签: bash if-statement integer compare

我遇到此代码的问题:

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

我无法弄清楚我做错了什么。我假设我将整数与文本进行比较?

2 个答案:

答案 0 :(得分:1)

此代码存在一些问题:

  1. Cyrus 注意到时,您在脚本末尾缺少done,以结束循环。
  2. [ $counter = 1 ]不是有效的比较,您应该使用[ $counter -eq 1 ]
  3. 此循环永远不会结束,因为counter的值永远不会更改。
  4. 显然memhighmem的值不是两个整数。您应该从打印声明中注意到这一点。由于这两个变量在句点之后似乎都浮动了一个数字,因此只需将它们乘以10然后进行比较即可。这可以通过以下方式实现:if [ "${mem//./}" -gt "${highmem//./}" ]

答案 1 :(得分:0)

问题有两个 - 首先我使用-GT而不是>标志。另一个问题是我在比较11.6到60 ..所以我将文本与数字进行比较。 简单的解决方法是将方程式或分数从方程中取出或者只是去掉,然后就可以完成工作了。有可能做的事情我只是用awk和cut做了。所以最后我的highmem等于整数,没有分数和mem,所以这两个数字都变成了整数进行比较

感谢您的所有帮助