Читайте также: |
|
В Bash неможливо прямо задавати умови, наприклад, для порівняння змінної і значення. По-перше, вся архітектура Bash заснована на тому, що всі дії здійснюються за допомогою команд, побудованих за однаковим зразком, по-друге, спеціальні символи <та> вже закріплені для виконання інших функцій. Тому для формулювання умов в циклах і точках переходу в Bash необхідно використовувати команду test. (Між іншим, test є самостійною командою і існує не тільки в Bash. Ця команда була інтегрована в Bash, щоб збільшити швидкість обробки даних).
Команда test повертає значення 0 (істина), якщо умова виконується, або 1 (не істина), якщо не виконується. Для скорочення друкованої роботи передбачений короткий варіант запису в квадратних дужках.
Команда test використовується для вирішення задач двох класів: для порівняння двох чисел, для порівняння послідовностей символів і для того, щоб дізнатися, чи існує файл і проявляє він певні властивості. У наступних прикладах показані деякі можливі варіанти застосування цієї команди.
1. test "$х" - перевіряє, чи зайнятий х (тобто, якщо в послідовності символів міститься 0 символів, маємо «не істина»; в іншому випадку «істина»).
2. test $х -gt 5 - перевіряє, чи має змінна х числове значення більше 5. Якщо х не містить числа, виводиться повідомлення про помилку. Замість -gt (більше) можуть також використовуватися наступні оператори порівняння: -eq (дорівнює), -ne (не дорівнює), -lt (менше), -le (менше або дорівнює) і -ge (більше або дорівнює).
3. test -f $х – перевіряє, чи існує файл з ім'ям, зазначеним у х.
Якщо необхідно інтерактивно виконувати команду test в оболонці, після неї потрібно зчитати значення змінної $? (Значення, що повертається останньою командою) за допомогою echo:
user$ a=20
user$ test $a - eq 20; echo $?
0
user$ test $a - gt 20; echo $?
1
Умовні переходи Case
Конструкції с ase вводяться ключовим словом с ase, за яким слідує параметр, призначений для аналізу (зазвичай це змінна). Після ключового слова in можна вказати кілька можливих шаблонів рядки, з якими буде порівнюватися параметр. При цьому можуть використовуватися ті ж джокерні символи, що і при роботі з іменами файлів. Шаблон завершується круглою дужкою, тобто, наприклад, - - *). Це робиться для розпізнавання таких послідовностей, які починаються з двох знаків «мінус». Кілька шаблонів можна відокремлювати один від одного символом |. У такому випадку перевіряються обидва шаблони. Наприклад, *.c | *.h) служить для розпізнавання файлів *.c і *.h в одному і тому ж розгалуженні програми.
Команди, що йдуть слідом за дужками, повинні завершуватися двома крапками з комою. Якщо буде потрібно перехід else, то в якості останнього шаблону необхідно вказати * такому шаблону будуть відповідати всі послідовності символів. При обробці конструкції з с ase враховується тільки перший перехід, в якому параметр відповідає зазначеному шаблону.
У наступному прикладі casetst показано застосування с ase для класифікації переданих параметрів на імена файлів. Цикл для змінної і виконується з усіма параметрами, переданими файлу оболонки. У цьому циклі кожен окремий параметр аналізується за допомогою с ase. Якщо параметр починається з дефіса (-), то він знаходиться в кінці змінної OPT, в іншому випадку в кінці DAT.
#! /bin/sh
# Приклад casetst
opt= # Видалення opt і dat
dat=
for i do # Цикл для всіх переданих параметрів
case "$i" in
-*) opt="$opt $i";;
*) dat="$dat $i";;
esac
done # Кінець циклу
echo "Options: $opt" echo "Files: $dat"
Тестовий запуск файлу оболонки на практиці показує, як працює цей простий оператор вибору. Параметри, передані по порядку без сортування, поділяються на імена файлів і параметри:
user$ casetst -x -y dat1 dat2 -z dat3
Options: -x -y - z
Files: dat1 dat2 dat3
За тим самим принципом умовні переходи case можуть використовуватися для класифікації певних розширень файлів (шляхом зазначення пошукового шаблону *.abc). Якщо ви хочете щільніше зайнятися case -аналізом, подивіться файл оболонки /usr/bin/gnroff. У ньому дається синтаксис параметрів, що передаються Nroff, у вигляді, зрозумілому спорідненsq команді groff.
Дата добавления: 2015-04-11; просмотров: 20 | Поможем написать вашу работу | Нарушение авторских прав |