Библиотека сайта rus-linux.net
Руководство по Bash для начинающих | ||
---|---|---|
Назад | Глава 9: Повторяющиеся задачи | Вперед |
Перенаправление ввода/вывода и циклы
Перенаправление ввода
Вместо того, чтобы управлять циклом с помощью проверки результата работы команды или с помощью ввода данных пользователем, вы можете указать файл, из которого нужно делать ввод и который управляет циклом. В таких случаях, управляющей командой часто является команда read. До тех, пока в цикле считываются строки, выполнение цикла продолжается. Как только все входные строки будут прочитаны, произойдет выход из цикла.
Поскольку конструкция цикла рассматривается как структура, состоящая из одной команды (такая, как while TEST-COMMAND; do CONSEQUENT-COMMANDS; done), перенаправление происходит после инструкции done, следовательно, это соответствует форме
command < file
Этот вид переадресации также работает с другими видами циклов.
Перенаправление вывода
В примере, приведенном ниже, вывод команды find используется в качестве входа команды read, управляющей циклом while:
[carol@octarine ~/testdir] cat archiveoldstuff.sh #!/bin/bash # This script creates a subdirectory in the current directory, to which old # files are moved. # Might be something for cron (if slightly adapted) to execute weekly or # monthly. ARCHIVENR=`date +%Y%m%d` DESTDIR="$PWD/archive-$ARCHIVENR" mkdir "$DESTDIR" # using quotes to catch file names containing spaces, using read -d for more # fool-proof usage: find "$PWD" -type f -a -mtime +5 | while read -d $'\000' file do gzip "$file"; mv "$file".gz "$DESTDIR" echo "$file archived" done
Перед тем, как файлы помещаются в архив, они сжимаются.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Цикл типа until | Команды break и continue |