Цикли
Матеріал з Wiki TNEU
Версія від 12:31, 6 грудня 2011; Gerasymchuk (Обговорення)
Цикли, як і умови, є тими інструментальними засобами, які забезпечують управління порядком виконання команд.
Bash підтримує цикли типу for, while, until і select. Тепер перейдемо до докладного розгляду кожного з них.
Оператор циклу for
Загальний синтаксис оператора for:
for змінна [in шаблон]
do список команд done
Цикл for в bash значно відрізняється від циклу for в таких мовах програмування, як C або PHP. Тому якщо ви програмуєте на C, вам потрібно буде звикнути до цих відмінностей, щоб не плутатися. В результаті підстановки шаблону виходить список слів. При кожній ітерації мінлива приймає кожне наступне значення цього списку, і виконуються команди, які стоять між do і done. Ітерації припиняються після вичерпання слів у списку.
$ For day in Mon Tue Wed Thu Fri do echo "Сьогодні $ day" done
Зарезервовані слова оператора for також можна писати в одну строчку, як це було в попередньому пості для оператора if. Для цього потрібно ставити ";". Перепишемо попередній приклад з урахуванням цієї можливості:
$ For day in Mon Tue Wed Thu Fri; do echo "Сьогодні $ day"; done
Відсутність конструкції [in шаблон] еквівалентно запису in $ @. Про параметрі $ @ говорилося в моїй першій статті.
Оператор циклу while
Загальний синтаксис оператора while:
while список1
do список2 done
Спершу виконується список1. Якщо він завершується успішно, тобто повертає нульовий код, управління переходить спіску2. Ітерації продовжуються до тих пір, поки результат виконання спіска1 не стане ненульовим. Наприклад:
i = 10 while [$ i-gt 0]; do echo $ i i =$(($ i-1)) done; echo 'end'
Оператор циклу until
Загальний синтаксис оператора until:
until список1
do список2 done
Спершу виконується список1. Якщо він завершується неуспішне, тобто з ненульовим кодом повернення, управління переходить спіску2. Ітерації продовжуються до тих пір, поки результат виконання спіска1 не стане нульовим. Наприклад:
i = 10 until [$ i-lt 0]; do echo $ i i =$(($ i-1)) done; echo 'end'
Оператор циклу select
Загальний синтаксис оператора select:
select змінна [in шаблон]
do список done
В результаті підстановки шаблону виходить список слів. До цих слів оператор додає порядкові номери і виводить весь набір в стандартний потік помилок. Відсутність конструкції [in шаблон] еквівалентно запису in $ @. Після цього виводиться запрошення і зчитується рядок з стандартного потоку введення. Якщо рядок містить номер, що відповідає якомусь слову зі списку, то змінна отримує його в якості значення. Якщо відповідного слова не було знайдено, то значенням змінної стає порожній рядок. Після цього виконується список команд, і ітерації продовжуються до тих пір, поки в рядку введення не попадеться символ кінця файлу або поки в списку команд не зустрінеться break або return. Команди break і return служать для управління ходом виконання циклу. Команда break перериває виконання циклу, в той час як return повертає код результату (нульовий або ненульовий). Оператор select корисний для створення нумерованих меню. Наприклад, у каталозі ~ / temp знаходиться 3 файла: proto.txt, file.txt і readme. Приклад фрагмента скрипта, що дозволяє швидко переглянути будь-який з них.
echo "Виберіть файл для перегляду:" select file in ~ / temp / * Quit; do if [-f $ file]; then cat $ file; else break; fi done
Запустивши даний скрипт, ми побачимо на екрані:
Виберіть файл для перегляду:
1) / home / istergul / temp / file.txt 2) / home / istergul / temp / proto.txt 3) / home / istergul / temp / readme 4) Quit