
- •И.Н.Акуленок
- •Утверждено советом университета
- •Введение
- •Глава 1. Текстовые редакторы
- •1.1. Редактор ed
- •1.1.1. Команды, не использующие адресации строк
- •1.1.2. Команды, использующие один адрес
- •1.1.3. Команды, использующие два адреса
- •1.1.4. Нумерация строк
- •1.1.5. Примеры использования команд
- •1.2. Редактор VI и ex
- •1.2.1. Редактирование нескольких файлов
- •1.2.2. Вставка текста из одного файла в другой
- •1.3. Потоковый редактор sed
- •1.4. Контрольные вопросы
- •Глава 2. Командные процессоры ос unix
- •2.1. Типы командных процессоров
- •2.2. Идентификация и смена оболочки
- •2.3. Запуск shell и стартовых shell–файлов
- •2.4. Установка переменных среды
- •2.5. Псевдонимы команд
- •2.6. Выполнение .Profile после его изменения
- •2.7. Контрольные вопросы
- •Глава 3. Интерпретатор shell
- •3.1. Shell–переменные
- •3.1.1. Задание значений переменных и их отмена
- •3.1.2. Экспорт переменных
- •3.2. Специальные символы
- •3.2.1. Использование двойных кавычек и апострофа
- •3.2.2. Обратные апострофы
- •3.2.3. Обратная наклонная черта
- •3.3. Позиционные переменные
- •3.4. Код завершения процесса
- •3.5. Конвейеры и списки
- •3.6. Композиции команд
- •3.5.1. Порожденный shell – оператор круглые скобки ( )
- •3.5.2. Оператор списка – фигурные скобки {}
- •3.6. Контрольные вопросы
- •Глава 4. Программные структуры
- •4.1. Команда test
- •4.1.1. Условия проверки файлов
- •4.1.2. Условия проверки строк
- •4.1.3. Условия сравнения целых чисел
- •4.1.4. Сложные условия
- •4.2. Команда expr
- •4.3. Команда read
- •4.4.Условный оператор if
- •4.5. Оператор цикла for
- •4.6. Операторы цикла while и until
- •4.7. Оператор вызова case
- •4.8. Функции в shell
- •4.9. Контрольные вопросы
- •5. Создание сценария командного процессора
- •5.1. Пример простейшего сценария
- •5.2. Основные этапы разработки сценария
- •5.3. Отладка командных процедур
- •5.4. Выполнение shell–программ
- •5.5. Создание новых команд
- •5.6. Контрольные вопросы
- •Список литературы
- •Оглавление
- •Акуленок Ирина Николаевна
3.5. Конвейеры и списки
В терминологии UNIX следует различать группы простых команд, конвейеры и списки. Мы уже знаем, что представляют собой простые команды. Кроме них, в ОС UNIX существуют еще два фундаментальных понятия – конвейеры и списки. Их необходимо уяснить для того, чтобы лучше разобраться в управляющих структурах.
Конвейер– это простая команда либо группа простых команд, разделенных вертикальной чертой.
Любая из перечисленных ниже строк представляет собой конвейер:
$ ls –l /bin /usr/bin
$ who | wc –l
$ a | b | c | d
$ ps
Конвейеры в данном случае разделяются символами новой строки.
В системе UNIX последовательность конвейеров называют списком, так что эти четыре строки образуют список и выступают в качестве элементов–конвейеров. Следующий список эквивалентен первому:
$ ls –l /bin /usr/bin;who|wc –l;a|b|c|d;ps
Список считается основной структурой в UNIX. Он может быть простым, как простая команда и настолько сложным, насколько вам удастся его таким сделать. Значение кода завершения, возвращаемое списком, равно соответствующему значению для последнего конвейера в нем. Важно осознавать различие между командой, конвейером и списком:
1) По простой команде выполняется одна программа.
2) Конвейер представляет собой последовательность простых команд, объединенных символом конвейера. Простейший конвейер – это любая простая команда.
3) Список состоит из конвейеров. Простейший список – это один конвейер, содержащий одну простую команду.
Код завершения конвейера равен значению кода его последней команды. Возвращаемое значение этого кода для команды или конвейера может исследоваться при управлении последовательностью выполнения в shell–программе.
3.6. Композиции команд
Существует четыре основных приема композиции команд:
Последовательная схема:
$ command 1; command 2; …; command N
Здесь элементы разделены символами «;»или символ новой строки, указывающий на последовательное выполнение
Условная схема:
Если две команды разделены двойным амперсантом, то вторая из них выполняется только при условии, что первая дает код завершения = 0.
&&– операторAND–IF, указывающий на условное (true) выполнение следующего конвейера, имеет следующий формат:
$ command 1 && command 2
command 2будет вызвана только тогда, когдаcommand 1завершается успешно.
Например:
$ test –d /u/user1 && echo success!
По этой команде печатается сообщение «success!», если файл/u/user1представляет собой каталог. Программаtestпредназначена для проверки различных условий. Флаг–dуказывает ей на то, что необходимо проверить является ли аргумент каталогом.
Если две команды разделены оператором ||, то вторая команда может быть выполнена, только в том случае, когда код завершения первой не равен 0.
||– операторOR–IF, указывающий на условное (false) выполнение следующего конвейера, имеет следующий формат:
$ command 1 || command 2
Интерпретатор shell вызывает command 1и проверяет код ее завершения. Еслиcommand 1не выполняется, код завершения будет ненулевым, и интерпретатор вызоветcommand 2
Например:
$ test –d /u/user1 || echo failure!
Эта команда вызовет печать сообщения «failure!» при условии, что указанный файл не существует или что он – не каталог.
true– успешное завершение, код завершения =0
false– неуспешное завершение, код завершения =1. Код может иметь несколько значений, с помощью которых определяется причина неуспешного завершения.
Многие команды UNIX вырабатывают код завершения только для поддержки этих операторов.
Фоновое исполнение, когда оператор &, указывает на фоновое (асинхронное) выполнение предшествующего конвейера.
Группирование команд.
При работе с интерпретатором shellоператор круглые скобки()используются для группирования команд. Т.е. вывод целой группы команд может быть целиком направлен в один канал.
(command1; command2; …)
{command1; command2; …}