Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SPO_SRS.doc
Скачиваний:
5
Добавлен:
02.05.2019
Размер:
1.06 Mб
Скачать

4.5. Оператор циклу з|із| передумовою ("while")

Структура "while", що також забезпечує виконання розрахунків, переважно тоді, коли невідомий наперед|заздалегідь| точний список значень параметрів або цей список повинен бути одержаний|отриманий| в результаті|унаслідок,внаслідок| обчислень|підрахунків| в циклі.

Оператор циклу "while" має структуру:

while умова

do

список команд

done

де "while" - службове слово що визначає тип циклу з|із| дійсною умовою. Список команд в тілі циклу (між "do" і "done") повторюється до тих пір, поки зберігається істинність умови (тобто код завершення останньої команди в тілі циклу рівний "0") або цикл не буде перерваний зсередини спеціальними командами ("break", "continue" або "exit"). При першому вході в цикл умова повинна виконуватися.

###

# print-50: Структура "while"

# Розрахунок дозволяє надрукувати|видрукувати| 50

# екземплярів|примірників| файлу "file-22"

n=0

while [ $n -lt 50 ] # поки|доки| n < 50

do

n=`expr $n + 1`

cat file-22 > /dev/lp

done

Звернемо увагу на те, що змінній "n" спочатку привласнюється значення 0, а не порожній|пустий| рядок, оскільки|тому що| команда "expr" працює з|із| shell-змінними як з|із| цілими числами, а не як з|із| рядками.

n=`expr $n + 1`

тобто при кожному виконанні значення "n" збільшується на 1.

Як і взагалі в житті, можна реалізувати те ж саме і складніше. Розрахунок "рr-br" приведений для ілюстрації нескінченного|безконечного| циклу і використання команди "break", яка забезпечує припинення циклу.

###

# рr-br: Структура "while" з|із| "break"

# Розрахунок дозволяє надрукувати|видрукувати| 50

# екземплярів|примірників| файлу "file-22"

n=0

while true

do

if [ $n -lt 50 ] # якщо n < 50

then n=`expr $n + 1`

else break

fi

cat file-22 > /dev/lp

done

Команда "break [n]" дозволяє виходити з|із| циклу. Якщо "n" відсутній, то це еквівалентно "break 1". "n" указує|вказує| число вкладених циклів, з|із| яких треба вийти, наприклад, "break 3" - вихід з|із| трьох вкладених циклів.

На відміну від команди "break" команда "continue [n]" лише припиняє виконання поточного циклу і повертає на ПОЧАТОК циклу. Вона також може бути з|із| параметром. Наприклад, "continue 2" означає вихід на початок другого (якщо вважати|лічити| з|із| глибини) вкладеного циклу.

Команда "exit [n]" дозволяє вийти взагалі з процедури з|із| кодом повернення "0" або "n" (якщо параметр "n" вказаний). Ця команда може використовуватися не тільки|не лише| в циклах. Навіть в лінійній послідовності команд вона може бути корисна при відладці, щоб припинить виконання (поточного) розрахунку в заданій точці.

4.6. Оператор циклу з|із| постумовою ("until")

Оператор циклу "until" має структуру:

until умова

do

список команд

done

де "until" - службове слово що визначає тип циклу з|із| помилковою умовою. Список команд в тілі циклу (між "do" і "done") повторюється до тих пір, поки зберігається помилковість умови або цикл не буде перерваний зсередини спеціальними командами ("break", "continue" або "exit"). При першому вході в цикл умова не повинна виконуватися.

Відмінність|відзнака| від оператора "while" полягає в тому, що умова циклу перевіряється на помилковість (на ненульовий код завершення останньої команди тіла циклу) перевіряється ПІСЛЯ|потім| кожного (у тому числі і першого!) виконання команд тіла циклу.

Програмістів, знайомих з|із| операторами "until" в інших мовах|язиках| може спочатку збивати така семантика цього оператора.

Приклади|зразки|.

until false

do

read x

if [ $x = 5 ]

then echo enough ; break

else echo some more

fi

done

Тут програма з|із| нескінченним|безконечним| циклом чекає введення слів (повторюючи на екрані фразу "some more"), поки|доки| не буде введене|запроваджене| "5". Після|потім| цього видається "enough" і команда "break" припиняє виконання циклу.

Інший приклад|зразок| ("Очікування|чекання| півдня") ілюструє можливість|спроможність| використовувати в умові обчислення|підрахунку|.

until date | grep 12:00:

do

sleep 30

done

Тут кожні 30 секунд виконується командний рядок умови. Команда "date" видає поточну дату і час. Команда "grep" одержує|отримує| цю інформацію через конвейєр і намагається|пробує| сумістити|поєднати| заданий шаблон "12:00:" з часом|згодом|, видаваним командою "date". При неспівпаданні "grep" видає код повернення "1", що відповідає значенню "брехня", і цикл "виконує очікування|чекання|" протягом 30 секунд, після чого повторюється виконання умови. Опівдні|ополудні| (можливо з|із| декількома секундами) відбудеться порівняння, умова стане істинною, "grep" видасть на екран відповідний рядок і робота циклу закінчиться.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]