Создание функций в bash

При написании сложных сценариев в bash, разделение сценариев на более мелкие модули (функции) облегчает понимает и позволяет и позволяет повторно использовать эти модули.

Создание функций в bash

Создание bash функции

Для создания (объявления) функции необходимо использовать следующий формат

function <function-name> {
    # body
}

Ключевое слово function перед именем функции является необязательным. Чтобы быть совместимым с POSIX, имя функции bash не может содержать никаких символов, кроме букв, цифр и знаков подчеркивания, и не может начинаться с цифры.

Вызов bash функции

Как только функция bash определена, можно ее вызвать в сценарии. В bash нужно определить функцию перед ее вызовом, функция должна быть выше по тексту сценария чем ее вызов. В противном случае вы увидите ошибку "command not found". Для вызова функции достаточно использовать в тексте сценария ее имя.

function test {
     echo "Hello world"
}

test # run

В результате работы сценария в консоль будет выведен текст "Hello world"

Создание локальной переменной в bash функции

Для создания локальной переменной, которая видна (возможно использовать) только внутри функции используется параметр local перед вызовом переменной

best="Linux"
function test {
    local best="Windows"
    echo "$best is a window"
}

test
echo "$best is the best"

в результате в скрипт вернет:

Windows is a window
Linux is the best

Передача аргументов (параметров) в функцию bash

Во многих сценариях необходимо передать некоторые аргументы функции bash. С точки зрения передачи аргументов функция bash ведет себя аналогично обычному bash скрипту. Таким образом, когда функции передаются параметры, на эти параметры ссылаются внутри функции так же, как на позиционные параметры, передаваемые сценарию bash из командной строки.

Например, на первый параметр ссылается $1, на второй параметр - $2 и т. д.

function test {
    echo "First: $1"
    echo "Second: $2"
}

test "Hello world!" 1

В результате функция вернет следующий текст

First: Hello world!
Second: 1

Выход из bash функции

Если необходимо выйти из сценария, то для этого возможно использовать команду return

return 0

Цифра возвращается в основной скрипт как статус выхода функции. При этом значение функции return является необязательным, и в этом случае статус выхода функции будет статусом последней команды, выполненной внутри функции. Когда return встречается внутри функции bash, функция немедленно завершается, и управление возвращается основному сценарию.

function test {
    return 1
}

test
echo "[status]: $?"

в результате  скрипт вернет

[status]: 1

Функцию return можно использовать для выхода из цикла, она остановит выполнения сценария функции и вернет управления основному сценарию.

Возврат значения из функции Bash

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

Использование глобальной переменной

В скрипте bash любая объявленная переменная рассматривается как глобальная (если явно не указана как локальная) и видна для всего bash сценария. Если изменить глобальную переменную внутри функции, это изменение будет видно и за пределами функции. Таким образом, чтобы вернуть значение основному сценарию, функция bash может просто сохранить возвращаемое значение в глобальной переменной.

function test {
    val="Linux"
}

val="Windows" # global
test
echo "Output: $val"

В результате работы сценарий вернет

Output: Linux

Использование команды echo

Другой способ вернуть значение функцией bash - использовать команду echo, которая выводит значение переменной и может быть передано в с помощью подстановки команд.

function test {
    local val="Linux"
    echo val
}

output=$(test)
echo "Output: $output"

В результате сценарий выедет

Output: Linux

Добавить комментарий