В скриптовом языке bash поддерживаются два оператора ветвления: if и case. Оператор if, как и в других языках, выполняет определенный блок указаний, в зависимости от условия. Условие помещают в двойные квадратные скобки [[ ... ]], которые bash рассматривает как один элемент с кодом выхода. Внутри блока операторов помещенных в [[ ]] разрешается использовать операторы && и ||. Например:
Обратите внимание, что [, условие и ] обязательно должны быть разделены пробелами, иначе оболочка воспримет в качестве команды [условие.
# Однострочная запись
if [ ... ]; then echo "true"; else echo "false"; fi;
## Вложенные условия
if [ ... ] && [ ... ]; then
...
elif [[ ... && ... ]]; then
...
else
...
fi;
Ниже приведена таблица с возможными условиями сравнения.
Работа с файлами:
-e Проверить существует ли файл или директория (-f, -d)
-f Файл существует (!-f - не существует)
-d Каталог существует (!-f - не существует)
-s Файл существует и он не пустой
-r Файл существует и доступен для чтения
-w ... для записи
-x ... для выполнения
-h cимвольная ссылка
Работа со строками:
-z Пустая строка
-n Не пустая строка
== Равно
!= Не равно
Операции с числами:
-eq Равно
-ne Не равно
-lt Меньше
-le Меньше или равно
-gt Больше
-ge Больше или равно
Пример:
if [ `uname` == "Adam"]; then
echo "Не ешь яблоко!"
elif [ `uname` == "Eva"] then
echo "Не бери яблоко!"
else
echo "Яблоки сейчас очень дорогие!"
fi;
Если необходимо сделать выбор из нескольких альтернатив, пригодится оператор case. Принцип его работы легче понять на примере:
case "$extension" in
(jpg|jpeg)
echo "Это изображение в формате jpeg."
;;
png)
echо "Это изображение в формате png"
;;
gif)
echo "А это ))"
*)
echo "Оу!Это вообще не изображение!"
;;
esac
В примере оператор проверяет значение переменной $extension на совпадение с одним из шаблонов и в случае совпадения выполнит соответствующий блок кода. Если же совпадений не будет, выполнятся указания, соответствующие шаблону *.
Источник:
https://proglib.io/p/bash-notes2