Умовні оператори

Матеріал з Wiki TNEU
Перейти до: навігація, пошук

Оператор варіантів case

Загальний синтаксис оператора case:

case значення in
шаблон1) список1;;
шаблон2 | шаблон3) список2;;
esac

Логічна послідовність виконання оператора case: а) шукається перший шаблон, що співпадає із значенням; б) якщо він знайдений, виконується відповідний йому список команд, завершений ";;"; в) управління передається операторам, наступним за конструкцією case. Шаблон і список розділяються символом ")". Одному списку команд може відповідати кілька умов, тоді їх потрібно розділяти символом "|".

Приклад використання конструкції case:

echo "Помилка. Кому відправити повідомлення?"
echo "Начальнику: b"
echo "Колегам: c"
echo "Нікому: any key"
read answer
case $ answer in
   b | B) mail-s "error log" boss <error.log;;
   c | C) mail-s "Help! error log"-c denis nick <error.log;;
   *) Echo "error"; exit;;
esac

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

Загальний синтаксис оператора if:

if список1 then
список2
[Elif спісок3 then
спісок4]
[Else
спісок5]
fi

Квадратні дужки тут вказують на необов'язкові конструкції.

Логічна послідовність виконання оператора case: а) виконується список1; б) якщо він виконаний без помилок, виконується список2. В іншому випадку виконується список3, і якщо він завершується без помилок - список4. Якщо ж і список3 повертає код помилки, виконується список5; в) управління передається операторам, наступним за конструкцією if.

Приклад використання if:

if grep-q Bash file; then
echo "Файл містить слово Bash."
fi

Оператор test і умовні вирази

У наведеному вище прикладі замість аналізу коду завершення використана перевірка умови. Дві форми такої перевірки еквівалентні: вбудована команда test і [умова]. Наприклад, для перевірки існування файлу потрібно написати:

test-e <файл>

або

[-E <файл>]

Команда test може перевіряти рядок на наявність символів. Непорожній рядок призводить до коду завершення 0. Порожній, відповідно - 1. Наприклад:

$ Test $ USER; echo $?
0

Умовні вирази можна комбінувати за допомогою звичайних логічних операцій:

! <Вираз> - заперечення;
<Вираз1>-a <вираз2> - логічне І;
<Вираз1>-o <вираз2> - логічне АБО.

Елементарні умовні вирази для файлів:

-E - файл існує;
-F - звичайний файл (не каталог і не файл пристрою);
-S - ненульовий розмір файлу;
-D - файл є каталогом;
-B - файл є блоковим пристроєм (floppy, cdrom і т.п.);
-C - файл є символьним пристроєм (клавіатура, модем, звукова карта і т.п.);
-P - файл є каналом;
-H - файл є символічним посиланням;
-L - файл є символічним посиланням;
-S - файл є сокетом;
-T - файл пов'язаний з термінальним пристроєм;
-R - файл доступний для читання (користувачеві, що запустила сценарій);
-W - файл доступний для запису (користувачеві, що запустила сценарій);
-X - файл доступний для виконання (користувачеві, що запустила сценарій);
-G - (sgid) прапор для файлу або каталогу встановлений;
-U - (suid) прапор для файлу встановлений;
-K - прапор sticky bit встановлений;
-O - ви є власником файлу;
-G - ви належите до тієї ж групи, що й файл;
-N - файл був модифікований з моменту останнього читання;
файл1-nt файл2 - файл1 новіший, ніж файл2;
файл1-ot файл2 - файл1 старіший, ніж файл2;
файл1-ef файл2 - файл1 і файл2 є «жорсткими» посиланнями на один і той же файл.

Елементарні умовні вирази для порівняння рядків:

-Z рядок - довжина рядка дорівнює 0;
-N рядок - довжина рядка не дорівнює 0;
рядок1 == рядок2 - рядки збігаються (аналог "=");
рядок1! == рядок2 - рядки не збігаються (аналог "!=");
рядок1 <рядок2 - рядок1 передує строке2 в лексикографічному порядку;
рядок1> рядок2 - рядок1 слід за строкой2 в лексикографічному порядку.

Арифметичний умовний вираз має формат:

аргумент1 операція аргумент2

де аргументами є цілі числа, і припустимі наступні операції:

-Eq - рівно;
-Ne - не одно;
-Lt - менше;
-Le - менше або дорівнює;
-Gt - більше;
-Ge - більше або дорівнює;
<- Менше (всередині подвійних круглих дужок);
<= - Менше або дорівнює (всередині подвійних круглих дужок);
> - Більше (всередині подвійних круглих дужок);
> = - Більше або дорівнює (всередині подвійних круглих дужок).
Особисті інструменти
Простори назв

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