Операторы if-then-else и case

21.03.2018

Теги: BashLinuxОператор

Практически любая программа требует выполнения различных наборов команд в зависимости от условий. В bash для этого есть операторы if-then-else и case.

Оператор if-then-else

Оператор if-then-else проверяет — является ли код возврата команды нулевым (поскольку 0 означает ИСТИНА), и если это так, то выполняет команды, следующие за словом then. Если код возврата ненулевой (ЛОЖЬ), то выполняются команды, следующие за словом else.

if команда; then
    команда
    команда
    .......
else
    команда
    команда
    .......
fi

Существует специальная команда — […] (синонимом команды test). Она воспринимает свои аргументы как выражение сравнения или как файловую проверку и возвращает код завершения в соответствии с результатами проверки (0 — истина, 1 — ложь).

В новых версиях bash добавлена конструкция [[…]] (расширенный вариант команды test), которая выполняет сравнение способом, более привычном для программистов. Оболочка исполняет [[…]] как один элемент, который имеет код возврата.

Круглые скобки ((…)) возвращают код 0, если результатом арифметического выражения является ненулевое значение. Таким образом, арифметические выражения могут участвовать в операциях сравнения.

if [ "$(whoami)" != 'root' ] ; then
    echo "У вас нет прав для запуска $0."
    exit 1;
fi
for file in /home/evgeniy/* ; do
    if [ -d "$file" ] ; then
        echo "$file — это директория"
    elif [ -f "$file" ] ; then
        echo "$file — обычный файл"
    else
        echo "$file — что-то еще"
    fi
done

Оператор case

Оператор case позволяет выполнять тот или иной участок кода, в зависимости от результатов проверки условий. Она является, своего рода, краткой формой записи большого количества операторов if/then/else. Синтаксис крайне простой: нужно указать переменную, шаблоны и блоки кода после каждого шаблона.

#!/bin/bash

# считывание ввода пользователя
echo -n 'Введите имя файла: '
read file

# проверяем совпадение переменной file с шаблоном
case $file in
    *.php) echo 'Программа на языке PHP'   ;;
    *.js ) echo 'Исходный код JavaScript'  ;;
    *.css) echo 'Каскадная таблица стилей' ;;
        *) echo 'Тип файла не распознан'   ;;
esac

Оператору case можно передать всего один параметр, который поочередно сравнивается с подготовленными шаблонами. Если сравнение истинно, выполняется блок кода, следующий за шаблоном. Выполнение case завершится при отработке блока кода, либо прохождении всех шаблонов до конца и отсутствии совпадений.

Если требуется назначить несколько шаблонов для одного и того же блока команд, используйте символ «|» для их разделения. Например, «*.txt|*.shell».

Дополнительно

Поиск: Bash • Linux • Оператор • if • then • else • case

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.