Функции Bash группируют связанные команды под одним именем. При вызове этого имени выполняется весь блок. Вы можете передавать аргументы для настройки поведения и возвращать значения для передачи результатов. Это делает код чистым и простым в поддержке.
Linux занимает доминирующее положение в серверных окружениях по всему миру, поэтому умение работать с функциями Bash сегодня важнее, чем когда-либо. Функции превращают запутанные скрипты в чистую, многократно используемую автоматизацию.
Это руководство проведёт вас от базового синтаксиса до продвинутых сценариев использования. Вы узнаете, как объявлять функции, передавать параметры, обрабатывать возвращаемые значения, и увидите десять практических примеров, которые можно применять в собственных скриптах.
Коротко о главном
- Функции Bash - это именованные блоки кода, которые можно многократно использовать в скриптах
- Функции определяются с помощью синтаксиса function_name() { commands; } синтаксис
- Аргументы передаются с помощью $1, $2, $3 позиционных параметров
- Функции улучшают читаемость, модульность и сопровождаемость кода
- Используйте return для выхода из функций и передачи кодов состояния (0 — успех, ненулевое значение — ошибка)
- Функции можно использовать в нескольких скриптах с помощью source or export -f
- Практические примеры: резервное копирование файлов, мониторинг диска, валидация ввода и проверка сервисов
Что такое Bash-скрипты?

Bash-скрипт — это программа на языке Bash, предназначенная для автоматизации задач в командной оболочке. Bash используется как оболочка по умолчанию в Linux и остаётся стандартным инструментом в среде macOS. Скрипт можно запустить прямо в терминале или как отдельный исполняемый файл.
При том, что использование Linux на десктопах стабильно растёт , а сама операционная система доминирует на серверах по всему миру, навыки работы с Bash становятся всё ценнее для IT-специалистов. Язык хорошо интегрируется с DevOps-инструментами: Docker, Kubernetes и CI/CD-пайплайнами.
Bash-скрипты позволяют решать задачи любого масштаба — от простых команд до сложной автоматизации и системного администрирования. Вы можете автоматизировать рутинные операции, писать скрипты обслуживания, выстраивать пайплайны развёртывания, управлять программными системами и обрабатывать данные.
Что такое Bash-функция?

Bash-функция — это набор команд, определённых внутри скрипта или введённых интерактивно в командной строке, в зависимости от задачи. После определения функцию можно вызывать любое количество раз — как в том же скрипте, так и в других, как обычную команду оболочки.
Bash-функции позволяют создавать переиспользуемые блоки кода для выполнения сложных операций, структурирования и упрощения скриптов. Вы можете передавать аргументы в функцию и использовать их внутри неё. Функции возвращают значения, которые можно применять в любом месте скрипта.
Мы рассмотрим несколько конкретных стилей реализации, в том числе simple_function для базовой логики, simple_inputs для обработки аргументов, а также более сложные конструкции, такие как fibonnaci_recursion.
Основы функций Bash важны для любого системного администратора или DevOps-инженера, работающего с автоматизацией. В следующих разделах каждый из этих типов рассматривается подробно.
Зачем использовать функции Bash?

Теперь, когда мы разобрались с определением функций Bash, рассмотрим их основные преимущества. Этот раздел поможет понять, где функции приносят наибольшую пользу.
Повторное использование
Написав функцию Bash один раз, вы получаете готовый инструмент. Один блок кода можно вызывать сколько угодно раз — внутри текущего скрипта или в других скриптах.
Это делает код эффективнее и экономит время: дублировать логику больше не нужно. Поддерживать код тоже проще — достаточно изменить функцию в одном месте.
Читаемость
Сложные скрипты бывает трудно разобрать. Функции Bash решают эту проблему, разбивая скрипт на небольшие, понятные части.
Каждая функция выполняет конкретную задачу и имеет говорящее имя, которое объясняет её назначение. Это упрощает понимание и поддержку кода — как для вас, так и для коллег.
Модульность
Функции структурируют код. Логику можно разбить на небольшие модули, и скрипт останется чистым и удобным в управлении.
Нужно добавить новую возможность — добавляйте, не трогая остальные части скрипта. Нужно убрать или изменить функциональность — остальной код не пострадает.
Параметры функций Bash
Функциям можно передавать аргументы, или параметры. Они позволяют функции адаптироваться и выполнять разные действия в зависимости от полученных входных данных.
Это открывает широкие возможности и делает функции универсальными. Вместо того чтобы писать похожий код несколько раз, вы пишете одну функцию, которая обрабатывает разные входные данные.
Как и где использовать функции Bash?

Теперь перейдём к практике и рассмотрим короткий пример создания функций Bash. Приведённый синтаксис работает в Unix-окружениях. Если вы работаете на Windows, вы можете установить Linux Bash на Windows 10 чтобы следовать примерам.
Создание функции Bash
Начните со следующей структуры команды:
function_name () {
# команды идут сюда
}
После создания функции её можно вызывать в любом месте кода. Рабочий пример:
greet () {
echo "Hello, $1!"
}
Вызовите эту функцию командой Привет мир чтобы получить вывод «Hello, World!». Символ $1 обозначает первый аргумент, переданный функции.
Вот ещё несколько практических примеров для использования в собственных скриптах:
# Создание резервной копии любого файла
backup_file () {
cp "$1" "$1.bak"
echo "Backup created: $1.bak"
}
# Check if a directory exists, create if it doesn't
ensure_dir () {
if [ ! -d "$1" ]; then
mkdir -p "$1"
echo "Created directory: $1"
fi
}
# Логирование сообщений с временными метками
log_message () {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
Эти пользовательские Bash-функции определяются один раз и вызываются в любом месте скрипта по мере необходимости.
Основы синтаксиса функций
Функции ведут себя как мини-скрипты внутри основного скрипта, но разделяют память оболочки с ним. При написании функций учитывайте три конкретных особенности их поведения.
Область видимости переменных (локальные и глобальные)
Переменные внутри функций по умолчанию являются глобальными. Если вы определяете my_var="test" внутри функции, это перезапишет существующую переменную my_var в вашем скрипте. Всегда используйте local чтобы ограничить область видимости переменных функцией и избежать побочных эффектов:
local my_var="value"
Позиционные параметры
Функции читают аргументы с помощью тех же $1, $2, и $@ переменных, что и скрипты. Они локальны для функции и сбрасываются при её завершении. Исходные аргументы скрипта недоступны внутри функции, если вы не передаёте их явно.
Возвращаемые значения
Функции Bash не возвращают данные так, как это делают функции Python или JavaScript. Команда return устанавливает только код завершения (0–255), обозначающий успех или ошибку. Чтобы вернуть фактические данные (строку или результат вычисления), выведите их через echo и захватите вывод при вызове функции:
result=$(my_function)
10 полезных примеров функций Bash
Теперь, когда вы разобрались с функциями Bash и способами их создания, вот десять практических примеров, которые можно добавить в свои скрипты. Каждая функция решает типичную задачу и демонстрирует правильную структуру, работу с аргументами и возвращаемыми значениями.
1. Функция резервного копирования файлов
Создаёт резервную копию любого файла с отметкой времени:
backup_file () {
local file="$1"
local backup="${file}.$(date +%Y%m%d_%H%M%S).bak"
if [ -f "$file" ]; then
cp "$file" "$backup"
echo "Backup created: $backup"
return 0
else
echo "Error: File not found"
return 1
fi
}
Использование: backup_file /etc/nginx/nginx.conf
2. Проверка директории
Проверяет, существует ли директория, и создаёт её при необходимости:
ensure_dir () {
local dir="$1"
if [ ! -d "$dir" ]; then
mkdir -p "$dir"
echo "Created: $dir"
fi
}
Использование: ensure_dir /var/log/myapp
3. Логгер с временными метками
Добавляет временные метки к записям лога для отладки:
log_message () {
local level="$1"
local message="$2"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message"
}
Использование: log_message "INFO" "Script started"
4. Монитор дискового пространства
Проверяет использование диска и предупреждает при превышении порогового значения:
check_disk_space () {
local threshold="${1:-80}"
local usage=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
if [ "$usage" -gt "$threshold" ]; then
echo "Warning: Disk usage at ${usage}%"
return 1
fi
return 0
}
Использование: check_disk_space 90
5. Валидатор ввода
Проверяет, что введённые пользователем данные не пусты:
validate_input () {
local input="$1"
local name="$2"
if [ -z "$input" ]; then
echo "Error: $name cannot be empty"
return 1
fi
return 0
}
Использование: validate_input "$username" "Username"
6. Проверка статуса сервиса
Проверяет, запущен ли сервис, и выводит его статус:
check_service () {
local service="$1"
if systemctl is-active --quiet "$service"; then
echo "$service is running"
return 0
else
echo "$service is not running"
return 1
fi
}
Использование: check_service nginx
7. Извлечение расширения файла
Извлекает расширение из имени файла:
get_extension () {
local filename="$1"
echo "${filename##*.}"
}
Использование: ext=$(get_extension "document.pdf")
8. Обрезка строк
Удаляет пробелы в начале и конце строки:
trim_string () {
local str="$1"
str="${str#"${str%%[![:space:]]*}"}"
str="${str%"${str##*[![:space:]]}"}"
echo "$str"
}
Использование: clean=$(trim_string " hello world ")
9. Безопасное архивирование файлов
Перемещает файл в директорию $HOME/.trash вместо безвозвратного удаления. К имени файла добавляется временная метка, чтобы избежать перезаписи предыдущих резервных копий.
safe_remove() {
local file="$1"
local trash="$HOME/.trash"
# Добавляем временную метку, чтобы не перезаписать существующие файлы
local new_name="$(basename "$file")_$(date +%s)"
mkdir -p "$trash"
if [ -e "$file" ]; then
mv "$file" "$trash/$new_name"
echo "Moved to archive: $file -> $trash/$new_name"
else
echo "Error: $file not found"
return 1
fi
}
Использование: safe_remove old_script.sh
10. Отчёт о состоянии
Демонстрирует механизм возврата значений в функциях Bash для обработки ошибок. Возвращаемое значение функции указывает на успех (0) или ошибку (ненулевое значение):
process_data () {
local file="$1"
if [ ! -f "$file" ]; then
return 1
fi
# Обрабатываем файл
cat "$file" | wc -l
return 0
}
# Проверка возвращаемого значения
process_data "data.txt"
if [ $? -eq 0 ]; then
echo "Processing complete"
else
echo "Processing failed"
fi
Параметр $? переменная содержит код завершения последней выполненной команды или функции.
| Функция | Назначение | Ключевая особенность |
| backup_file | Создание резервных копий файлов | Именование с меткой времени |
| ensure_dir | Управление директориями | Создаёт директорию, если она отсутствует |
| log_message | Логирование | Префикс с меткой времени |
| check_disk_space | Мониторинг системы | Оповещения при превышении порога |
| validate_input | Валидация входных данных | Проверка на пустую строку |
| check_service | Мониторинг сервисов | Интеграция с Systemd |
| get_extension | Разбор строк | Расширение параметров |
| trim_string | Очистка строк | Удаление пробелов |
| safe_remove | Безопасное удаление | Корзина |
| process_data | Обработка ошибок | Возвращаемые значения |
Запуск Bash-функций на VPS
Bash-функции раскрывают свой потенциал в среде выделенного сервера. Наш Linux VPS предоставляет полный root-доступ: настраивайте окружение оболочки, создавайте общесистемные библиотеки функций и автоматизируйте управление сервером без каких-либо ограничений.
На VPS можно хранить переиспользуемые функции в /etc/profile.d/ для всех пользователей, запускать скрипты на основе функций через cron-задачи и выстраивать пайплайны автоматизации для деплоя и обслуживания. Мы предлагаем серверы в 12 регионах по всему миру со скоростью сети до 40 Gbps и DDR5 оперативной памяти — это ускоряет выполнение скриптов и повышает эффективность обработки данных.
Такой уровень контроля делает VPS отличным выбором для тех, кто серьёзно занимается написанием shell-скриптов и системной автоматизацией.
Заключение
Bash-функции — основа модульных и переиспользуемых скриптов. Они позволяют группировать связанные команды и инкапсулировать сложную логику, делая код более читаемым и удобным в сопровождении. Если вы управляете облачной инфраструктурой, автоматизируете пайплайны деплоя или выполняете рутинные задачи системного администрирования, функции помогают держать скрипты в порядке и работать эффективнее.
В этой статье мы рассмотрели основы Bash-функций: как их объявлять и вызывать, десять практических примеров и типичные сценарии использования, которые помогут вам начать собственные проекты по автоматизации.
В сочетании с управляющими конструкциями, такими как Оператор if в Bash, функции дают вам строительные блоки для мощной автоматизации. Используя функции Bash в своих скриптах, вы можете писать более чистый и модульный код, который легче понимать и поддерживать.