Программирование

Bash. Часть 2. Ветвление (if, case)

В скриптовом языке 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