执行一个命令,检查somepartion上的磁盘空间是否大于1 KB,返回-1否则返回0

时间:2014-10-15 08:05:08

标签: linux bash awk

执行一个命令,检查某个部分的磁盘空间是否大于1 KB,返回-1否则返回0

例如:

df| tail -n 1 | awk '{print $4}'

此命令返回根分区上的可用空间,此命令在磁盘上返回23%的空间。

如果空格小于-1,我希望它返回1 KB,否则返回0

我们不能为此写sh文件,所以我希望0-1通过命令回答

已更新 它应该退出该返回码意味着它应该以returncode 0或-1

退出

2 个答案:

答案 0 :(得分:3)

这可能会:

df | awk 'END {print ($4<1024?"-1":"0")}'
0

您可以将数字更改为符合您需要的任何数字 END用于获取最后一行,而不是tail


要将其输入退出/返回代码,请执行以下操作:

(exit $(df | awk 'END {print ($4<1024?"-1":"0")}')); echo "$?"

PS exit -1会提供255

答案 1 :(得分:1)

使用stat获取可用的块和块大小,创建表达式并输入bc

在这里,我在几个FS上测试它的值为10240 bytes ,其中一个少于免费,另一个少于:

$ stat -f /sys/fs/cgroup -c "(%a * %s >= 10240) - 1" | bc
-1
$ stat -f / -c "(%a * %s >= 10240) - 1" | bc
0

将10240调整为您想要的值,以字节为单位

这是传统的df输出:

$ df /
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       11440712 5517040   5319464  51% /
$ df /sys/fs/cgroup/
Filesystem     1K-blocks  Used Available Use% Mounted on
none                   4     0         4   0% /sys/fs/cgroup

相应的stat基于:

$ stat -f / -c "%a * %s / 1024" | bc
5319464

请注意,使用此代替awk来解析df的输出对df的可能输出格式更改不太脆弱。

要从脚本设置退出代码,捕获输出看起来没问题:

#!/bin/bash
echo Testing $@

exit `stat -f $@ -c "(%a * %s >= 10240) - 1" | bc`

请注意,您获得255而不是-1返回 - 但是 -1超出范围,因为退出代码只能是0到255.

$ ./sizer.sh /sys/fs/cgroup/
Testing /sys/fs/cgroup/
$ echo $?
255
$ ./sizer.sh /
Testing /
$ echo $?
0