Bash. Условный оператор if
Sysadminium
Условный оператор if позволяет проверить условие и от полученного результата выполнить один или другой блок кода. В этой статье научимся им пользоваться.
Синтаксис примерно такой:
if [[ условие ]]; then команды elif [[ условие ]]; then команды else команды fi
Можно использовать несколько elif, или убрать elif и else если они не требуются.
Помимо двойных квадратных скобок можно применять одинарные двойные и двойные круглые. Но двойные квадратные скобки — более универсальны, и позволяют делать все тоже самое что и одинарные квадратные и двойные круглые. Поэтому легче запомнить однотипные конструкции с двойными квадратными скобками.
Сравнение чисел
Равно (-eq) или не равно (-ne):
$ cat test.sh #!/bin/bash a=1 b=2 if [[ "$a" -eq "$b" ]]; then echo "$a равно $b" elif [[ "$a" -ne "$b" ]]; then echo "$a не равно $b" else echo "Все остальное" fi $ ./test.sh 1 не равно 2
В таком сравнении используются следующие операторы:
-eq - равно -ne - не равно -gt - больше -ge - больше или равно -lt - меньше -le - меньше или равно
Сравнение строк
Строки сравниваются оператором <, >, =. Например:
$ cat test.sh #!/bin/bash a=110 b=22 # сравниваем числа if [[ "$a" -gt "$b" ]]; then echo "$a больше $b" elif [[ "$a" -lt "$b" ]]; then echo "$a меньше $b" else echo "Все остальное" fi # сравниваем строки if [[ "$a" > "$b" ]]; then echo "$a больше $b" elif [[ "$a" < "$b" ]]; then echo "$a меньше $b" else echo "Все остальное" fi $ ./test.sh 110 больше 22 110 меньше 22
В таком сравнении используются следующие операторы:
!= - не равно
В сравнении строк применяются не только бинарные операторы где сравниваются две строки, а также унарные где смотрится является ли строка пустой или нет. Обратите внимание, здесь обрабатывается только одна строка, поэтому оператор называется унарным:
[[ -z "$a" ]] - является ли строка пустой [[ -n "$a" ]] - является ли строка не пустой
Пример с пустой строкой:
$ cat test.sh #!/bin/bash a='' if [[ -z "$a" ]]; then echo "Строка пустая" fi $ ./test.sh Строка пустая
Булевы операторы
Булевы операторы ! (нет), && (и), || (или) также можно использовать с if:
[[ условие ]] && [[ условие ]]
Например:
$ cat test.sh #!/bin/bash a=0 b=1 if [[ -n "$a" ]] && [[ "$a" -gt "$b" ]]; then echo "$a не пустая и больше чем $b" else echo "$a либо пустая, либо меньше чем $b" fi $ ./test.sh 0 либо пустая, либо меньше чем 1
Проверка файлов
С помощью if можно проверить существует ли файл, является ли файл файлом или каталогом и многое другое. Ниже покажу список подобных операторов.
Унарные операторы:
-e - объект существует (файл или каталог) -f - объект существует и является файлом -s - файл не пуст (имеет не нулевой размер) -d - файл является каталогом -b - файл является блочным устройством -c - файл является символьным устройством -p - файл является каналом -h - файл является символической ссылкой -S - файл является сокетом -t - является ли дескриптор файла открытым и связанным с терминалом. Например для проверки stdin [ -t 0 ] или stdout [ -t 1 ] -r - файл доступен для чтения (пользователю, запустившему сценарий) -w - файл доступен для записи (пользователю, запустившему сценарий) -x - файл доступен для исполнения (пользователю, запустившему сценарий) -O - вы являетесь владельцем файла -G - вы принадлежите к той же группе, что и файл
Бинарные операторы:
f1 -nt f2 - файл f1 более новый, чем f2 f1 -ot f2 - файл f1 более старый, чем f2 f1 -ef f2 - файлы f1 и f2 являются "жесткими" ссылками на один и тот же файл
Использование команды вместо условия
В этом случае используется такая конструкция:
if команда; then
Если команда завершилась с кодом выхода 0, то значит условие выполнилось.
Например:
$ cat test2.txt яблоко слива груша вишня $ cat test.sh #!/bin/bash if grep вишня test2.txt; then echo "Вишня в тексте есть!" fi $ ./test.sh вишня Вишня в тексте есть!
На этом все, надеюсь с if разобрались!