Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum



  • www.ussodesign.com expoglobal group дизайн выставочных стендов
  • ussodesign.com

Lines Club

Ищем достойных соперников.

Книги по Linux (с отзывами читателей)

Библиотека сайта или "Мой Linux Documentation Project"

На главную -> MyLDP -> Электронные книги по ОС Linux
Руководство по 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


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют