我正在尝试创建一个cronjob,它将根据特定文件夹的磁盘使用情况输出来运行。在我的测试环境中,我有一个名为“ Test”的文件夹,它的大小为4.0 KB。我要查询其大小:
du -csh /home/<username>/Test | grep total | cut -f1 | tr -d 'K'
输出被分配给一个名为DISK_SPACE的变量,并留下4.0
给我。我无法弄清楚如何将4.0转换为整数以满足以下条件:
if [ $DISK_SPACE -gt 3.0 ]
then
rm -rf /home/<username>/Test/*.*
else
echo $DISK_SPACE "is less than 3.0K and as a result the contents of the folder will NOT be deleted."
我的完整bash文件如下所示:
#!/bin/bash
DISK_SPACE=$(du -csh /home/<username>/Test | grep total | cut -f1 | tr -d 'K')
echo $DISK_SPACE
if [ $DISK_SPACE -gt 3.0 ]
then
rm -rf /home/<username>Test/*.*
else
echo $DISK_SPACE "is less than 3.0K and as a result the contents of the folder will NOT be deleted."
fi
运行此命令后收到的错误是:
4.0: integer expression expected
答案 0 :(得分:4)
du -h
打印供人类使用的数字。脚本不应使用-h
。尝试使用-k
或-b
来获取易于解析的整数:
-k like --block-size=1K
-b, --bytes
equivalent to '--apparent-size --block-size=1'
答案 1 :(得分:0)
使用printf
将您的实数舍入为整数。
printf "%1.0f\n" 4.0
4
printf "%1.0f\n" 4.6
5
请参见printf联机帮助页。
例如,您可以这样做:
DISK_SPACE=4.0
DISK_SPACE=$(printf "%1.0f" ${DISK_SPACE})
echo ${DISK_SPACE}
4
答案 2 :(得分:0)
Bash不支持浮点运算。如果您只关心第一个数字是否大于3,则可以简单地修剪任何小数。
if [ "${disk_space%.*}" -gt 3 ]; then ...
如果需要适当的浮点比较,那么实际上use a tool which supports floating-point arithmetic.
可能会更简单还请注意,我已将您的变量转换为小写。您should not use all-uppercase names for your private variables.
答案 3 :(得分:0)
除了约翰·库格曼(John Kugelman)的答案之外,我还更改了以下行:
原文:
if [ $DISK_SPACE -gt 3.0 ]
新功能:
if [ $DISK_SPACE -gt 3072 ]
这允许John建议的更改在脚本中更好地工作:
du -csb /home/<username>/Test | grep total | cut -f1