Как зациклить в Bash, пока не будет достигнуто ограничение свободного места на диске? - PullRequest
2 голосов
/ 15 января 2011

Я хотел бы выполнить ряд операций (x y z), если у меня есть не менее 200 МБ свободного места в файловой системе, смонтированной на /media/z.

Как я могу это сделать?

Я пробовал что-то вроде

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

, но я думаю, мой синтаксис while неправильный.

Ответы [ 2 ]

3 голосов
/ 15 января 2011

( ) выполняет команду в под-оболочке.Если вы хотите проверить условие, вы должны использовать команду test : [ ].

while [ `df | grep /media/z | awk '{print $4}'` -gt 204800 ]; do 
    x; y; z; sleep 5; 
done;
2 голосов
/ 15 января 2011

если вы используете bash, используйте [[]] для внутреннего тестирования, это быстрее и дает вам стандартные операторы:

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