Цикли

Матеріал з Wiki TNEU
Версія від 13: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
Особисті інструменти
Простори назв

Варіанти
Дії
Навігація
Інструменти