如何在Bash中循环直到达到可用磁盘空间限制?

如何在Bash中循环直到达到可用磁盘空间限制?,bash,while-loop,disk,Bash,While Loop,Disk,我想执行一组操作(xyz),只要我在安装到/media/z的文件系统上有至少200MB的可用空间 我该怎么做 我试过类似的东西 while (`df | grep /media/z | awk '{print $4}'` > 204800); do x; y; z; done; 但是我猜我的while语法是错误的。()在子shell中执行命令。如果要测试条件,必须使用test命令:[] while [ `df | grep /media/z | awk '{print $4}'` -gt

我想执行一组操作(
xyz
),只要我在安装到
/media/z
的文件系统上有至少200MB的可用空间

我该怎么做

我试过类似的东西

while (`df | grep /media/z | awk '{print $4}'` > 204800); do x; y; z; done;
但是我猜我的
while
语法是错误的。

()
在子shell中执行命令。如果要测试条件,必须使用test命令:
[]

while [ `df | grep /media/z | awk '{print $4}'` -gt 204800 ]; do 
    x; y; z; sleep 5; 
done;

如果您使用bash use[[]]来使用内部测试,它会更快,并为您提供标准运算符:

while (( $(df /media/z | awk 'NR==2{print $4}') > 204800 )); do
    x; y; z
done

这将是
-gt
,而不是
(这是输出重定向)同样,在Bash中,可以使用
$((4+5))
@fredden:在注释中执行数学运算,对于代码示例,请使用反勾号而不是
。您可以使用
df-h/media/z
而不是
df-grep/media/z
,如果两个或多个磁盘的起始卷名为“z”,它将毫不含糊地选择一个磁盘,因为
df-h
将只选择具有完全匹配的磁盘grep+awk是对grep的无用使用,因为awk可以做所有的工作;事实上,您可以编写“awk'/\/media\/z/{print$4}”,并得到完全相同的结果。这可能会执行得更快:
df/media/z | awk'NR==2{print$4}
+1另外,正如您所示,
$()
比backticks更可取。使用
-gt
进行数字比较。
进行字符串比较(例如
[[5>204800]
的计算结果为true,但
[[5-gt 204800]]
的计算结果为true。@Gordon你说得对,我应该使用((>),现在已修复,谢谢。