Цикли та розгалуження
Управління ходом виконання - один із ключових моментів структурної організації сценаріїв мовою командної оболонки. Цикли та переходи є інструментальними засобами, які забезпечують управління порядком виконання команд.
Цикл - це блок команд, який виконується багаторазово доти, доки буде виконано умова виходу з циклу.
цикли for
Це один з основних різновидів циклів. І вона значно відрізняється від аналога у мові C.
На кожному проході циклу, змінна-аргумент циклу arg послідовно, одне за одним, набуває значень зі списку list.
Елементи списку можуть включати шаблонні символи.
Якщо ключове слово do знаходиться в одному рядку зі словом for, то після списку аргументів (перед do) необхідно ставити крапку з комою.
Приклад 10-1. Простий цикл for
Кожен із елементів[списку] може містити кілька аргументів. Це корисно при обробці груп параметрів. У цьому випадку для примусового розбору кожного з аргументів у списку необхідно використовувати інструкцію set (див. Приклад 11-13).
Приклад 10-2. Цикл for з двома параметрами в кожному з списку
Як список, в циклі for, можна використовувати змінну.
Приклад 10-3. Fileinfo: обробка списку файлів, що знаходиться в змінній
У[списку] циклу for можуть бути використані імена файлів, які у свою чергу можуть містити символи-шаблони.
Приклад 10-4. Обробка списку файлів у циклі for
Якщо[список] у циклі for не заданий, то як воно використовується змінна $@ - список аргументів командного рядка. Онь дотепна ця особливістьпроілюстрована Приклад A-18.
Приклад 10-5. Цикл for без переліку аргументів
При створенні списку аргументів у циклі for допускається користуватися підстановкою команд. Див. Приклад 12-39, Приклад 10-10 та Приклад 12-33.
Приклад 10-6. Створення списку аргументів у циклі for за допомогою операції підстановки команд
Більш складний приклад використання підстановки команд під час створення списку аргументів циклу.
Приклад 10-7. grep для бінарних файлів
Ще один приклад.
Приклад 10-8. Список усіх користувачів системи
І заключний приклад використання підстановки команд під час створення [списку].
Результат роботи циклу for може передаватися іншим командам конвеєру.
Приклад 10-10. Список символічних посилань у каталозі
Виведення циклу може бути перенаправлено зі stdout у файл, нижче наводиться трохи модифікований варіант попереднього прикладу, що демонструє цю можливість.
Приклад 10-11. Список символічних посилань у каталозі, що зберігається у файлі
Оператор циклу for має і альтернативний синтаксис запису - дуже схожий на синтаксис оператора for у мові C. Для цього використовуються подвійні круглі дужки.
Приклад 10-12. C-подібний синтаксис оператора циклу for
А зараз приклад сценарію, який може знайти "реальне" застосування.
Приклад 10-13. Робота з командою efax у пакетному режимі
Оператор while перевіряє умову перед початком кожної ітерації і якщо умова істинно (якщо код повернення дорівнює 0), то управління передається в тіло циклу. На відміну від циклів for, цикли while використовуються у випадках, коли кількість ітерацій заздалегідь невідомо.
Зверніть увагу: в окремих випадках, таких яквикористання конструкції getopts спільно з оператором while, синтаксис дещо відрізняється від наведеного тут.
Приклад 10-14. Простий цикл while
Приклад 10-15. Інший приклад циклу while
Оператор while може мати кілька умов. Але лише останнє з них визначає можливість продовження циклу. У цьому випадку синтаксис оператора циклу має бути дещо іншим.
Приклад 10-16. Цикл while з кількома умовами
Як і у випадку з for, цикл while може бути записаний в C-подібної нотації, з використанням подвійних круглих дужок (див. Приклад 9-28).
Приклад 10-17. C-подібний синтаксис оформлення циклу while
Стандартний пристрій введення stdin, для циклу while, можна перенаправити на файл за допомогою команди until until
Оператор циклу until перевіряє умову на початку кожної ітерації, але на відміну від коли ітерація можлива тільки в тому випадку, якщо умова помилкова.
Зверніть увагу: оператор until перевіряє умову завершення циклу перед черговою ітерацією, а не після того, як це прийнято в деяких мовах програмування.