Библиотека сайта rus-linux.net
Руководство по Bash для начинающих | ||
---|---|---|
Назад | Глава 9: Повторяющиеся задачи | Вперед |
Цикл типа until
Что это такое?
Цикл until очень похож на цикл while, за исключением лишь того, что цикл выполняется до тех пор, пока команда TEST-COMMAND не будет успешно выполнена. До тех пор, пока эта команда возвращает код неудачного выполнения, выполнение цикла будет продолжаться. Синтаксис такой же, как и для цикла while:
until TEST-COMMAND; do CONSEQUENT-COMMANDS; done
Кодом возврата будет код возврата последней команды, выполненной в списке CONSEQUENT-COMMANDS, или ноль, если ни одна из команд не выполнялась. В качестве команды TEST-COMMAND может, опять же, быть любая команда, которая возвращает различные коды в случае успеха и в случае неудачи, а в качестве команд CONSEQUENT-COMMANDS могут быть любые команды UNIX, скрипты или конструкции командной оболочки.
Как мы ранее объясняли, символ ";" везде, где он появляется, можно заменять одним или несколькими символами новой строки.
Пример
Это улучшенный скрипт picturesort.sh
(смотрите раздел "Вложенные циклы while"), в котором проверяется наличие на диске свободного места. Если на диске недостаточно свободного места, то удаляются фотографии, сделанные в предыдущих месяцах:
#!/bin/bash # This script copies files from my homedirectory into the webserver directory. # A new directory is created every hour. # If the pics are taking up too much space, the oldest are removed. while true; do DISKFUL=$(df -h $WEBDIR | grep -v File | awk '{print $5 }' | cut -d "%" -f1 -) until [ $DISKFUL -ge "90" ]; do DATE=`date +%Y%m%d` HOUR=`date +%H` mkdir $WEBDIR/"$DATE" while [ $HOUR -ne "00" ]; do DESTDIR=$WEBDIR/"$DATE"/"$HOUR" mkdir "$DESTDIR" mv $PICDIR/*.jpg "$DESTDIR"/ sleep 3600 HOUR=`date +%H` done DISKFULL=$(df -h $WEBDIR | grep -v File | awk '{ print $5 }' | cut -d "%" -f1 -) done TOREMOVE=$(find $WEBDIR -type d -a -mtime +30) for i in $TOREMOVE; do rm -rf "$i"; done done
Обратите внимание на инициализацию переменных HOUR
и DISKFULL
и на то, как в командах ls и date используются параметры для получения в TOREMOVE
(на удаление) правильного списка фотографий.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Цикл типа while | Перенаправление ввода/вывода и циклы |