在`until`循环中监视磁盘空间

时间:2015-06-06 19:42:12

标签: bash

我的第一个问题。希望它是一个好的。

所以我希望创建一个脚本,当我的磁盘达到某种用途时,该脚本会杀死运行arecord的另一个脚本。 (我应该指出,我不确定我是如何进入那个df过滤器...只是有点搜索...)我的计划是运行两个脚本(一个记录,一个监控)磁盘使用情况)在单独的screen s。

我在Raspberry Pi上做这一切,顺便说一句。

所以这是我目前的代码:

#!/bin/bash

DISK=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')

until [ $DISK -ge 50 ]
    do
        sleep 1
    done

killall arecord

当我使用起始值(“50”变为“30”左右)时,此代码有效。但它似乎并没有像我想要的那样“监视”我的磁盘。我有点想知道发生了什么:变量DISK只被分配一次,没有定期检查或重新定义。

换句话说,我可能想要 in 我的until循环中的某些内容“获取”来自df的磁盘使用情况,对吗?有什么好方法可以解决这个问题?

=

PS我非常有兴趣听听如何将整个脚本的目的整合到运行arecord本身的脚本中,但现在这已经超出了我......还有另外一个问题......

1 个答案:

答案 0 :(得分:0)

设置DISK一次,因为它在循环开始之前完成,而不是作为循环过程的一部分完成。

一个简单的解决方法是将磁盘空间的评估结合到实际的while循环中,例如:

#!/bin/bash
until [ $(df / | awk 'NR==2 {print $5}' | tr -d '%') -ge 50 ] ; do
    sleep 1
done
killall arecord

你会注意到我已经对命令做了一些小修改,具体来说:

  • 您可以使用awk本身从ps输出中获取相关行,无需在单独的管道阶段使用grep
  • 我更喜欢tr删除单个字符,sed可以做到这一点,但它有点矫枉过正。