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

4.2. Умовний оператор "if"

У загальному|спільному| випадку оператор "if" має структуру

if умова

then список

[elif умова

then список]

[else список]

fi

Тут "elif" скорочений варіант від "else if" може бути використаний разом з|поряд з,поряд із| повним|цілковитим|, тобто допускається вкладення довільного числа операторів "if" (як і інших операторів). Зрозуміло "список" у кожному випадку повинен бути осмислений і допустимий в даному контексті.

Конструкції

[elif умова

then список]

і

[else список]

не є|з'являються,являються| обов'язковими (в даному випадку для вказівки на необов'язковість конструкцій використані квадратні дужки - не плутати|путати| з|із| квадратними дужками команди "test"!).

Сама усічена структура цього оператора

if умова

then список

fi

якщо виконано умову (як правило це грудка одержаний|отриманий| код завершення "0", то виконується "список", інакше він пропускається.

Зверніть увагу, що структура обов'язково завершується службовим словом "fi". Число "fi", природно, завжди повинне відповідати числу "if".

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

Хай|нехай| написаний розрахунок "if-1"

if [ $1 -gt $2 ]

then pwd

else echo $0 : Hello!

Fi

Тоді виклик розрахунку

if-1 12 11

дасть

/home/sae/STUDY/SHELL

а

if-1 12 13

дасть

if-1 : Hello!

Можливо використовувати в умові та властивість shell, що команди можуть видавати різний код завершення. Це нагадує прийоми програмування на Сі. Хай|нехай| розрахунок "if-2" буде

if a=`expr "$1" : "$2"`

then echo then a=$a code=$?

else echo else a=$a code=$?

Fi

тоді виклик

if-2 by by

дасть

then a=2 code=0

а

if-2 by be

дасть

else a=0 code=1

Ще приклад|зразок| на вкладеність

###

# if-3: Оцінка досягнень

echo -n " А яку оцінку одержав|отримав| на іспиті|екзамені|?: "

read z

if [ $z = 5 ]

then echo Молодець !

elif [ $z = 4 ]

then echo Все одно молодець !

elif [ $z = 3 ]

then echo Все одно !

elif [ $z = 2 ]

then echo Все !

else echo !

fi

Можна звернути увагу на те, що бажано використовувати зрушення|зсуви| при записі програм, щоб краще виділити вкладеність структур.

4.3. Оператор виклику ("case")

Оператор вибору "case" має структуру:

case рядок in

шаблон) список команд;;

шаблон) список команд;;

...

esac

Тут "case" "in" і "esac" - службові слова. "Рядок" (це може бути і один символ) порівнюється з|із| "шаблоном". Потім виконується "список команд" вибраного рядка. Незвичним буде службове слово "esac", але|та| воно необхідне для завершення структури.

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

###

# case-1: Структура "case".

# Що вже розглядався|розглядувався| у зв'язку з

# структурою "if" приклад|зразок| простіше і

# наочніше|наглядніше| можна реалізувати з|із|

# допомогою структури "case".

echo -n " А яку оцінку одержав|отримав| на іспиті|екзамені|?: "

read z

case $z in

5) echo Молодець ! ;;

4) echo Все одно молодець ! ;;

3) echo Все одно ! ;;

2) echo Все ! ;;

*) echo ! ;;

esac

Незвично виглядають в кінці|у кінці,наприкінці| рядків вибору ";;", але|та| написати тут ";" було б помилкою. Для кожної альтернативи може бути виконано декілька команд. Якщо ці команди будуть записані в один рядок, то символ ";" використовуватиметься як роздільник команд.

Звичайно останній рядок вибору має шаблон "*", що в структурі "case" означає "будь-яке значення". Цей рядок вибирається, якщо не відбувся збіг значення змінної (тут $z) ні з|із| одним з раніше записаних шаблонів, обмежених дужкою ")". Значення є видимими у порядку|ладі| запису.

###

# case-2: Довідник.

# Для різних фірм по імені видається

# назва холдингу, в який вона входить

case $1 in

ONE|TWO|THREE) echo Холдинг: ZERO ;;

MMM|WWW) echo Холдинг: Not-Net ;;

Hi|Hello|Howdoing) echo Холдинг: Привіт! ;;

*) echo Немає такої фірми ;;

esac

При виклику "case-2 Hello" на екран буде виведено:

Холдинг: Привіт!

А при виклику "case-2 HELLO" на екран буде виведено:

Немає такої фірми

Якщо слово "case" переводиться|перекладається,переказується| як "вибір", то це як би натяк на те, що можна цю структуру використовувати для реалізації простих меню.

###

# case-3: Реалізація меню за допомогою команди "case"

echo "Назвіть|накликайте| файл, а потім (через пропуск|прогалину|)

наберіть цифру, відповідну потрібною

обробці:

1 - відсортувати

2 - видати на екран

3 - визначити число рядків "

read x у|в,біля| # x - ім'я файлу, у|в,біля| - що зробити

case $y in

1) sort < $x ;;

2) cat < $x ;;

3) wc -l < $x ;;

*) echo "

Ми не знаємо

такої команди ! " ;;

esac

Зрозуміло, бажання|воління| можуть бути складніші і на місці окремих команд можуть бути послідовності команд або виклики складніших розрахунків.

Напишемо команду "case-4", яка додає|добавляє| інформацію до файлу, вказаного першим параметром (якщо параметр один), із стандартного входу, або (якщо 2 параметри) з|із| файлу, вказаного як перший параметр:

###

# case-4: Додавання|добавка| у файл.

# Використання стандартної змінної.

# "$#" - число параметрів при введенні розрахунку

# ">>" - перенаправлення з|із| додаванням|добавкою| у файл

case $# in

1) cat >> $1 ;;

2) cat >> $2 < $1 ;;

*) echo "Формат: case-4 [звідки] куди" ;;

esac

"$1" (при "$#=1") - це ім'я файлу, в який відбувається|походить| додавання|добавка| із стандартного входу.

"$1" і "$2" (при $#=2) - це імена файлів, з|із| якого ("$1") і в який ("$2") додавати|добавляти|.

У всіх інших випадках (*) видається повідомлення|сполучення| про те, яким повинен бути правильний формат команди.

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