与-lt的bash比较返回true,但应该为false

时间:2016-09-04 23:49:06

标签: bash

我有一个简单的命令来评估根分区上是否有足够的可用磁盘空间:

if [ $(df | awk '$6 == "/" {print $4}') -lt 30000 ]; then
        echo "Insufficient free disk space"
else
        echo "Disk space check OK"
fi

这将返回"磁盘空间检查确定" (即false),但是从df命令返回的实际值大于30000.所以,我希望比较返回true:

$ echo $(df | awk '$6 == "/" {print $4}')
38052168

我在这里缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

注意print "$4"用awk打印可用的磁盘空间。如果是这样 你可以使用sed来完成这个简单的工作,但也需要引入一些错误检查,以防df返回错误。

我可以这样试试

avail=$(df --output=avail / 2>/dev/null | sed 1d)
if [ -z "$avail" ] # $avail can be empty only df fails as per this case
then
echo "Error with df"
 elif [ "$avail" -lt 30000 ] # Your original logic is correct!!
then
 echo "Insufficient Disk Space"
else
 echo "Disk Check Passed"
fi
df --output=avail /

为您提供如下输出

  Avail
8708124

答案 1 :(得分:0)

38052168不小于30000,这就是else块正在运行的原因。而不是-lt使用-gt或

if [[ ! com1 -lt com2 ]];then
    # do stuff
else
    # do stuff
fi