3.8 Циклы в shell-программах

3.8 Циклы в shell-программах

Язык shell — действительно язык программирования: в нем есть переменные, циклы, ветвления и т.п. Здесь мы обсудим основные циклы, а структуры управления рассмотрим более подробно в гл. 5.

Типичным считается цикл по последовательности имен файлов, и оператор for языка shell является единственной структурой управления, которую обычно задают с терминала, а не помещают в файл для последующего выполнения. Синтаксис оператора for таков:

for перем in список_слов

do

 команды

done

Например, для получения эха имен файлов по одному на строке достаточно задать:

$ for i in *

> do

>  echo $i

> done

Вместо i можно применять любую переменную языка shell, но это обозначение традиционно. Заметьте, что значение переменной получается с помощью $i, однако в заголовке цикла переменную указывают как i. Мы задействовали * для выбора всех файлов текущего каталога, но можно использовать и любой другой список аргументов. Обычно нужно сделать что-нибудь более интересное, чем печать имен файлов. Нам часто приходилось сравнивать набор файлов с их предыдущими версиями, например старую версию гл. 2 (хранимую в каталоге old) с текущей:

$ ls ch2. * | 5

ch2.1 ch2.2 ch2.3 ch2.4 ch2.5

ch2.6 ch2.7

$ for i in ch2.*

> do

>  echo $i

>  diff -b old/$i $i

> echo Добавим пустую строку для красоты

> done | pr -h "diff `pwd`/old `pwd` | lpr &

3712   Номер процесса

$

Выходной поток направлен по конвейеру через команды pr и lpr просто для того, чтобы показать, что это возможно: стандартный выходной поток программ, находящихся внутри цикла for, попадает в стандартный выходной поток самой команды for. С помощью флага -h в команде pr мы поместили в выходной поток заголовок с "архитектурными излишествами", используя два вложенных обращения к pwd. Вся последовательность команд запущена асинхронно (&), так что не нужно ждать ее окончания; & применяется ко всякому циклу и конвейеру.

Мы предпочитаем указанный формат для цикла for, но вы можете сократить его. Единственное ограничение заключается в том, что do и done распознаются как ключевые слова, только если они появляются сразу после перевода строки или точки с запятой. В зависимости от размера цикла for иногда лучше помещать все на одной строке:

for i in список; do команды; done

Следует использовать цикл for для обработки составных команд или в тех случаях, когда не подходит встроенная обработка отдельных команд. Но не применяйте его там, где в отдельной команде есть цикл по именам файлов:

# Плохая идея:

for i in $*

do

 chmod +x $i

done

Предпочтительнее сделать так:

chmod +x $*

поскольку в цикле for отдельная команда chmod выполняется для каждого файла, что требует больших вычислительных ресурсов. (Убедитесь в том, что вы понимаете разницу между командами

for i in *

в которой цикл выполняется по всем именам файлов текущего каталога, и

for i in $*

в которой цикл выполняется по всем аргументам командного файла.)

Список аргументов для цикла for часто получают путем выбора имен файлов по шаблону, но можно получать и любым другим способом, в частности:

for i in `cat ...`

или просто вводом аргументов. Например, ранее в этой главе мы создали ряд программ для печати в несколько столбцов под именами 2, 3 и т.д. Они являются связями с одним файлом, которые можно установить следующим образом (при условии, что программа 2 написана):

$ for i in 3 4 5 6; do ln 2 $i; done

$

Цикл for имеет и более интересное назначение. Выберем с помощью команды pick те файлы, которые будут сравниваться с файлами из каталога старых версий:

$ for i in `pick ch2.*`

> do

>  echo $i:

>  diff old/$i $i

> done | pr | lpr

ch2.1? y

ch2.2

ch2.3

ch2.4? y

ch2.5? y

ch2.6?

ch2.7?

$

Очевидно, данный цикл следует поместить в командный файл, чтобы уменьшить ввод в следующий раз (ведь если вы что-то сделали дважды, вероятно, вы сделаете это и в третий раз).

Упражнение 3.15

Если цикл с командой diff хранится в командном файле, поместите ли вы туда команду pick? Объясните, почему.

Упражнение 3.16

Что произойдет, если последняя строка приведенного цикла будет иметь вид:

> done | pr | lpr &

т.е. кончаться амперсандом? Попробуйте сделать прогноз, а затем проверьте его.

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Похожие главы из других книг:

(5.1) Вместо русских букв в некоторых программах показываются закорючки.

Из книги автора

(5.1) Вместо русских букв в некоторых программах показываются закорючки. Запустите апплет Control Panel?Regional Options. На закладке General есть два раздела, Settings for the current user и Language settings for the system. Первый раздел настраивает локаль для конкретного пользователя и отвечает за то, в каком виде и


5.1. Вместо русских букв в некоторых программах показываются закорючки.

Из книги автора

5.1. Вместо русских букв в некоторых программах показываются закорючки. Запустите апплет Control Panel -> Regional and Languadge Options. На закладке Regional Options есть два раздела, Standarts and formats и Location. Первый раздел настраивает локаль для конкретного пользователя и отвечает за то, в каком виде и


20. Зарабатываем на партнерских программах: что такое, как работает

Из книги автора

20. Зарабатываем на партнерских программах: что такое, как работает Зарабатывать на партнерских программах достаточно просто. Типов партнерских программ в наше время существует огромное множество, и с каждым днем количество их возрастает.Типы партнерских программ:


Заработок на партнерских программах

Из книги автора

Заработок на партнерских программах Суть здесь заключается в том, что рекламируя чужие товары, вы получаете свой процент за то, что посетитель с вашего сайта, перейдя на сайт партнера, купил тот или иной товар. Таких партнерских программ (партнерок) в сети много, одна из


Глава 23. Заработок на партнерских программах

Из книги автора

Глава 23. Заработок на партнерских программах Суть в том, что вы получаете процент за каждого привлеченного клиента. Дается уникальная реферальная ссылка, и вы начинаете ее распространять где только можно: в комментариях, на своей странице, в группе и т. д.Минусы – тяжело


Глава 1 Общие сведения о программах Linux

Из книги автора

Глава 1 Общие сведения о программах Linux • Особенности программ Linux• Установка программ в LinuxLinux – это не программа, а операционная система со своими принципами построения и особенностями. Здесь все не так, как в Windows: например, в Linux нет привычных обозначений дисков С:, D:,


Циклы Do

Из книги автора

Циклы Do Все возможные версии оператора Do ... Loop предназначены для повторения заданного блока программного кода неопределенно долго, пока не будет выполнено некоторое условие.Для того чтобы выяснить, продолжать цикл или нет, оператор Do ... Loop оценивает заданное условное


Использование элементов управления ActiveX в программах

Из книги автора

Использование элементов управления ActiveX в программах Добавив элемент управления ActiveX в панель Toolbox, вы можете добавлять его в свои формы точно так же, как стандартные элементы управления VBA. Правда, чтобы заставить элемент управления делать что-нибудь полезное, нужно


Общие сведения о шпионских программах – SpyWare

Из книги автора

Общие сведения о шпионских программах – SpyWare В настоящее время существует несколько видов шпионского ПО. Например, у многих злоумышленников пользуются популярностью сканерs жесткого диска. Этот шпион тщательно изучает все содержимое жесткого диска вашего компьютера


1.5. О программах

Из книги автора

1.5. О программах Теперь поговорим о программах, которые можно использовать на вашем ПК. Программ для компьютера написано великое множество — на ПК можно набирать тексты, слушать музыку, смотреть фильмы, рассчитывать зарплату сотрудникам, анализировать результаты


Справка в программах

Из книги автора

Справка в программах Как недостаток справочной системы Windows XP можно отметить тот факт, что в ней нет сведений о программах, поставляемых в стандартном комплекте или устанавливаемых пользователем по мере необходимости. Справка вызывается через сами эти программы. Как


1.11. МНЕМОНИКА ИМЕН В ПРОГРАММАХ

Из книги автора

1.11. МНЕМОНИКА ИМЕН В ПРОГРАММАХ Предлагаемая здесь методика составления имен (идентификаторов) носит рекомендательный характер. Для использования этой методики в конкретном проекте необходима ее адаптация. Составленные в соответствии с методикой имена можно


Основные сведения о базах данных и программах для их обработки

Из книги автора

Основные сведения о базах данных и программах для их обработки Сегодня компьютеры хранят и обрабатывают значительные объемы информации, начиная от бухгалтерии маленькой фирмы и заканчивая большими информационными системами. Например, на железной дороге тысячи