Функции и возврат значений

Тема дорожной карты · Linux & Unix Fundamentals

Функции в bash — это ключевой элемент для организации логики в скриптах, что позволяет сделать код более структурированным и повторно используемым. Они объявляются с помощью конструкции name() { ...; } или function name { ...; }. Аргументы передаются через переменные $1, $2, $@, а результат возвращается в виде кода состояния (0–255). Чтобы вернуть данные, можно использовать вывод в stdout, который затем захватывается с помощью конструкции $(...). Для создания локальных переменных, которые не будут влиять на родительскую область, используется ключевое слово local. Проверка кода состояния после выполнения функции осуществляется через переменную $?, либо через использование опции set -e, что позволяет немедленно завершить выполнение скрипта при возникновении ошибки.

Как это работает

Функции и возврат значений позволяют инкапсулировать логику в скриптах, делая их более структурированными и повторно используемыми. Для начала работы с bash скриптом необходимо добавить строку #!/usr/bin/env bash в начало файла. Далее, установите опции set -euo pipefail для обеспечения надежности и стабильности скрипта. Переменные объявляются с помощью конструкции name="value", а обращение к переменным осуществляется с помощью $name или ${name}. Управление потоком выполнения осуществляется с помощью ключевых слов if/then/fi, for x in ...; do; done, while, case. Функции объявляются с помощью конструкции f() { ...; }, а подшельфы создаются с помощью $(cmd). Арифметические операции выполняются с помощью конструкции $((1+2)). Для обработки сигналов и выполнения очистки после завершения работы скрипта используется конструкция trap "rm -f $tmpfile" EXIT. Для проверки и устранения ошибок рекомендуется использовать инструмент shellcheck.

Когда применять

Bash используется для оркестрования команд, разбора параметров командной строки через getopts, работы с текстовыми данными и для создания скриптов деплоя. Однако, если скрипт превышает ~200 строк кода, содержит сложные структуры данных или требует надежной обработки ошибок, рекомендуется использовать более мощные языки программирования, такие как Python или Go. Всегда следует тестировать скрипты на не-production хостах, чтобы убедиться в их корректной работе. Идемпотентность — это важное свойство скрипта, которое позволяет перезапускать его без вреда для системы.

Типичные ошибки

Типичные ошибки при использовании функций и возвратов значений включают отсутствие установки опции set -e, что может привести к продолжению выполнения скрипта после возникновения ошибки. Также распространенной ошибкой является word-splitting на незакавыченных переменных (for f in $files ломается на пробелах). Путаница между операторами присваивания = и сравнения == в конструкции [[ ]] также встречается часто. Кроме того, арифметические операции в $() вместо $(()) могут привести к неправильной работе скрипта. Наконец, использование bash-фич в /bin/sh-shebang (dash на Debian — не bash) может вызвать проблемы при выполнении скрипта. Для предотвращения большинства этих ошибок рекомендуется использовать инструмент shellcheck.

Связанные понятия

Полезные ресурсы