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

4. Програмні структури

Як у всякій|усякій| мові|язиці| програмування в тексті на мові|язиці| shell можуть бути коментарі. Для цього використовується символ "#". Все, що знаходиться|перебуває| в рядку (у командному файлі) ліво цього символу, сприймається інтерпретатором як коментар. Наприклад

# Це коментар.

## І це.

### І це теж|також|.

Як у всякій|усякій| процедурній мові|язиці| програмування в мові|язиці| shell є оператори. Ряд|лава,низка| операторів дозволяє управляти послідовністю виконання команд. У таких операторах часто необхідна перевірка умови, яка і визначає напрям|направлення| продовження обчислень|підрахунків|.

4.1. Команда test ("[ ]")

Команда test перевіряє виконання деякої умови. З використанням цієї (вбудованої) команди формуються оператори вибору і циклу мови|язика| shell.

Два можливі формати команди:

test умова

або

[ умова ]

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

Насправді shell розпізнаватиме цю команду по відкриваючій|відчиняючій| дужці "[", як слову(!), відповідному команді "test". Вже цього достатньо|досить|, щоб попередити про поширену помилку початківців: Між дужками і умовою, що міститься|утримується| в них, обов'язково повинні бути пропуски|прогалини|.

Пропуски|прогалини| повинні бути і між значеннями і символом порівняння або операції (як, до речі, і в команді "expr"). Не плутати|путати| з|із| протилежною вимогою для привласнення значень змінним.

У shell використовуються умови різних "типів".

УМОВИ ПЕРЕВІРКИ ФАЙЛІВ:

-f file

файл "file" є|з'являється,являється| звичайним|звичним| файлом;

-d file

файл "file" - каталог;

-с file

файл "file" - спеціальний файл;

-r file

є|наявний| дозвіл на читання файлу "file";

-w file

є|наявний| дозвіл на запис у файл "file";

-s file

файл "file" не порожньої|пустої|.

Приклади|зразки|. Вводячи|запроваджуючи| з клавіатури командні рядки в першому випадку одержимо|отримаємо| підтвердження (код завершення "0"), а в другому - спростування (код завершення "1"). "specific" - ім'я існуючого файлу.

[ -f specific ] ; echo $?

0

[ -d specific ] ; echo $?

1

УМОВИ ПЕРЕВІРКИ РЯДКІВ:

str1 = str2

рядки "str1" і "str2" співпадають|збігаються|;

str1 != str2

рядки "str1" і "str2" не співпадають|збігаються|;

-n str1

рядок "str1" існує (непорожня|пуста|);

-z str1

рядок "str1" не існує (порожня|пуста|).

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

x="who is who"; export x; [ "who is who" = "$x" ]; echo $?

0

x=abc ; export x ; [ abc = "$x" ] ; echo $?

0

x=abc ; export x ; [ -n "$x" ] ; echo $?

0

x="" ; export x ; [ -n "$x" ] ; echo $?

1

ВАЖЛИВЕ|поважне| ЗАУВАЖЕННЯ. Команда "test" дає значення "істина" (тобто код завершення "0") і просто якщо в дужках коштує непорожнє|пусте| слово.

[ privet ] ; echo $?

0

[ ] ; echo $?

1

Крім того, існують два стандартні значення умови, які можуть використовуватися замість умови (для цього не потрібні дужки).

true ; echo $?

0

false ; echo $?

1

УМОВИ ПОРІВНЯННЯ ЦІЛИХ ЧИСЕЛ:

x -eq у|в,біля|

"x" рівне "y"

x -ne у|в,біля|

"x" нерівний "y"

x -gt у|в,біля|

"x" більше за "y"

x -ge у|в,біля|

"x" більше або рівне "y"

x -lt у|в,біля|

"x" менше за "y"

x -le у|в,біля|

"x" менше або рівне "y".

Тобто|цебто| в даному випадку команда "test" сприймає рядки символів як цілі (!) числа. Тому у всій решті випадків "нульовому" значенню відповідає порожній|пустий| рядок. У даному ж випадку, якщо треба обнулити змінну, скажімо, "x", то це досягається привласненням "x=0".

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

x=abc ; export x ; [ abc -eq "$x" ] ; echo $?

"[": integer expression expected before -eq

x=321 ; export x ; [ 321 -eq "$x" ] ; echo $?

0

x=3.21 ; export x ; [ 3.21 -eq "$x" ] ; echo $?

"[": integer expression expected before -eq

x=321 ; export x ; [ 123 -lt "$x" ] ; echo $?

0

СКЛАДНІ УМОВИ:

Реалізуються за допомогою типових логічних операцій:

!

(not) інвертує значення коду завершення.

-o

(or) відповідає логічному "АБО".

-a

(and) відповідає логічному "И".

ПОПЕРЕДЖЕННЯ|попереджувати,запобігання|. Не забувайте про пропуски|прогалини|.

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

[ ! privet ] ; echo $?

1

x=privet; export x; [ "$x" -a -f specific ] ; echo $?

0

x="";export x; [ "$x" -a -f specific ] ; echo $?

1

x="";export x; [ "$x" -a -f specific -o privet ] ; echo $?

0

x="";export x; [ "$x" -a -f specific -o ! privet ] ; echo $?

1

РАДА|порада|. Не зловживати складними умовами.

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