Умовні оператори
Оператор варіантів 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 - більше або дорівнює; <- Менше (всередині подвійних круглих дужок); <= - Менше або дорівнює (всередині подвійних круглих дужок); > - Більше (всередині подвійних круглих дужок); > = - Більше або дорівнює (всередині подвійних круглих дужок).