if [ условие ]then если условие справедливо выполнить все команды до else или до fielse если условие не справедливо выполнить все команды до fifi |
Дуже важливо запам'ятати, ваша конструкція повинна завжди закінчуватися словом fi!
Вирази, що використовуються з if
У наведеній нижче таблиці містяться оператори, які виконують команду test або набір команд. Ці оператори беруться у квадратні дужки [] для перевірки виконання умови.
[ -a FILE ] Правда елси FILE существует.[ -b FILE ] Правда елси FILE существует и это специальный блоковый файл.[ -c FILE ] Правда елси FILE существует и это специальный знаковый файл.[ -d FILE ] Правда елси FILE существует и это директория.[ -e FILE ] Правда елси FILE существует.[ -f FILE ] Правда елси FILE существует и это регулярный файл.[ -g FILE ] Правда елси FILE существует и установлен SGID бит.[ -h FILE ] Правда елси FILE существует и это символический ссылка.[ -k FILE ] Правда елси FILE существует и второй промежуточный бит округления установлен.[ -p FILE ] Правда елси FILE существует и это named pipe (FIFO).[ -r FILE ] Правда елси FILE существует и он доступен на чтение.[ -s FILE ] Правда елси FILE существует и больше нуля.[ -u FILE ] Правда елси FILE существует и SUID (set user ID) бит установлен.[ -w FILE ] Правда елси FILE существует и он доступен на запись.[ -x FILE ] Правда елси FILE существует и он доступен на исполнение.[ -O FILE ] Правда елси FILE существует принадлежит существующему пользователю[ -G FILE ] Правда елси FILE существует принадлежит существующей группе.[ -L FILE ] Правда елси FILE существует и это символический ссылка.[ -N FILE ] Правда елси FILE существует и был изменен с тех пор как был прочитан.[ -S FILE ] Правда елси FILE существует и это сокет.[ FILE1 -nt FILE2 ] Правда, если файл FILE1 изменялся чаще чем FILE2, или есои FILE1 существует, а FILE2 нет.[ FILE1 -ot FILE2 ] Правда, если файл FILE1 старше чем FILE2, или FILE1 существует, а FILE2 нет.[ FILE1 -ef FILE2 ] Правда, если FILE1 и FILE2 относятся к одному устройству и номеру инода.[ -o OPTIONNAME ] Правда если shell опция "OPTIONNAME" включена.[ -z STRING ] Правда если длинна "STRING" равна 0.[ -n STRING ] or [ STRING ] Правда если длинна "STRING" не равна 0.[ STRING1 == STRING2 ] Правда если выражения эквивалентны. [ STRING1 != STRING2 ] Правда если выражения не эквивалентны.[ STRING1 < STRING2 ] Правда если "STRING1" лексикографически упорядоченно до "STRING2".[ STRING1 > STRING2 ] Правда если "STRING1" лексикографически упорядоченно после "STRING2".[ ARG1 OP ARG2 ] "OP" это один из следующих параметров -eq, -ne, -lt, -le, -gt or -ge. Эти бинарные арифметические операторы возвращают результат "правда" если "ARG1" эквивалентен(-eq), не эквивалентен(-ne), меньше чем(-lt), меньше или эквивалентен(-le), больше чем(-gt), больше или эквивалентно(-ge) к "ARG2". [ ! EXPR ] правда если выражение EXPR не справедливо.[ ( EXPR ) ] возвращает значение EXPR. Это может быть использовано для изменения приоритета операторов.[ EXPR1 -a EXPR2 ] правда, если оба выражения EXPR1 и EXPR2 справедливы.[ EXPR1 -o EXPR2 ] правда, если хотя бы одно выражение EXPR1 или EXPR2 справедливы. |
Перейдімо до прикладів. Створимо скрипт, який визначатиме додатне чи від'ємне введене нами число:
#!/bin/bashread -p "Введите число : " nif [ $n -ge 0 ];then echo "$n положительное число."else echo "$n отрицательное число."fi |
інший приклад, визначимо, чи існує введений нами користувач:
#!/bin/bashread -p "Введите имя пользователя : " USERif ! grep $USER /etc/passwdthen echo "$n не существует."else echo "$n существует."fi |
Знак оклику перед grep $USER /etc/passwd говорить про те, що умова виконається, якщо користувача не існує. А тепер давайте перепишемо цей скрипт, використовуючи лише спеціальний параметр $?, який ми розглядали в третьому уроці:
#!/bin/bashread -p "Введите имя пользователя : " USERgrep $USER /etc/passwdif [ $? -ne 0 ]; then echo "$n не существует."else echo "$n существует."fi |
Приклад використання порівняння рядків. скрипт перевірятиме, чи ви root, чи ні:
#!/bin/bashif [ "$(whoami)" != 'root' ]; then echo "У вас нет прав для запуска $0." exit 1;fi |
цей скрипт можна переписати коротше:
#!/bin/bash[ "$(whoami)" != 'root' ] && ( echo У вас нет прав для запуска; exit 1 ) |
Ви також можете використовувати регулярні вирази. Як приклад, нехай наш скрипт визначає, чи містить введений нам текст літеру "ч":
#!/bin/bashLATTER="ч"read -p "Введите предложение : " STRif [[ "$STR" == *$LATTER* ]]; then echo "$LATTER найдено."else echo "$LATTER не найдено."fi |
Кілька слів щодо використання подвійних і одинарних квадратних дужок. При використанні подвійних дужок ваші змінні не будуть розбиті на кілька окремих слів, якщо ви використали пробіл, як приклад, змінна VAR="var with space" буде єдиним цілим.
