Скидка 50% на все тарифы, ограниченное время. От $2.48/mo
11 мин. на чтение
Серверы и ОС

Bash-функции: синтаксис, примеры и сценарии применения

Келли Ватсон By Келли Ватсон 11 мин. чтения Обновлено 14 дек. 2025
Абстрактная 3D-иллюстрация светящихся голубых блоков кода, собирающихся в модульную структуру, иллюстрирующая концепцию Bash-функций

Функции Bash группируют связанные команды под одним именем. При вызове этого имени выполняется весь блок. Вы можете передавать аргументы для настройки поведения и возвращать значения для передачи результатов. Это делает код чистым и простым в поддержке.

Linux занимает доминирующее положение в серверных окружениях по всему миру, поэтому умение работать с функциями Bash сегодня важнее, чем когда-либо. Функции превращают запутанные скрипты в чистую, многократно используемую автоматизацию.

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

Коротко о главном

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

Что такое Bash-скрипты?

3D-иллюстрация цифрового свитка с светящимся Bash-кодом, пишущим себя сам — образ автоматизации с помощью Bash.

Bash-скрипт — это программа на языке Bash, предназначенная для автоматизации задач в командной оболочке. Bash используется как оболочка по умолчанию в Linux и остаётся стандартным инструментом в среде macOS. Скрипт можно запустить прямо в терминале или как отдельный исполняемый файл.

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

Bash-скрипты позволяют решать задачи любого масштаба — от простых команд до сложной автоматизации и системного администрирования. Вы можете автоматизировать рутинные операции, писать скрипты обслуживания, выстраивать пайплайны развёртывания, управлять программными системами и обрабатывать данные.

Что такое Bash-функция?

Футуристическая цифровая иллюстрация: хаотичные данные командной строки упорядочиваются через светящийся процессинговый шлюз — метафора работы Bash-функции, свободное пространство слева.

Bash-функция — это набор команд, определённых внутри скрипта или введённых интерактивно в командной строке, в зависимости от задачи. После определения функцию можно вызывать любое количество раз — как в том же скрипте, так и в других, как обычную команду оболочки.

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

Мы рассмотрим несколько конкретных стилей реализации, в том числе simple_function для базовой логики, simple_inputs для обработки аргументов, а также более сложные конструкции, такие как fibonnaci_recursion.

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

Зачем использовать функции Bash?

Светящаяся синяя шестерёнка с символами оптимизации, управляющая кодовой машиной — иллюстрация эффективности и скорости, которые дают функции Bash.

Теперь, когда мы разобрались с определением функций 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 в своих скриптах, вы можете писать более чистый и модульный код, который легче понимать и поддерживать.

Часто задаваемые вопросы

Могут ли функции Bash иметь локальные переменные?

Да. В функциях Bash можно объявлять локальные переменные с помощью ключевого слова local. Это ограничивает область видимости переменной телом функции и предотвращает конфликты с одноимёнными переменными за её пределами.

Могут ли функции Bash быть рекурсивными?

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

Можно ли использовать функции Bash в других скриптах?

Да, функции Bash можно использовать совместно между скриптами с помощью команды source (или её сокращённой формы .). Подключив файл с определениями функций, вы сделаете их доступными в вызывающем скрипте. Для дочерних процессов используйте export -f function_name, чтобы функция была доступна в их окружении.

Можно ли использовать функции Bash в конвейерах?

Да, но для внешних команд потребуются дополнительные шаги. Внутри скрипта данные можно передавать в функцию напрямую через конвейер (например, cat file | my_function). Однако такие команды, как xargs или find -exec, запускаются в новом окружении. Чтобы использовать в них функцию, её нужно экспортировать (export -f my_func), а затем явно вызвать Bash (например, xargs bash -c 'my_func "$@"').

Что такое функция в shell-скрипте?

Функция в shell-скрипте — это именованный блок кода, выполняющий конкретную задачу и доступный для вызова из любого места скрипта. Функции повышают модульность кода, упрощают его повторное использование и облегчают сопровождение. В контексте Bash-скриптинга функции инкапсулированы внутри общего скрипта.

Поделиться

Другие статьи блога

Читать дальше.

Лучшие self-hosted приложения для запуска с Cosmos Cloud — обложка с панелями приложений вокруг дашборда Cosmos.
Серверы и ОС

Лучшие self-hosted приложения для Cosmos Cloud: файлы, медиа, пароли, автоматизация и не только!

Maybe вы уже настроили Cosmos Cloud и хотите понять, какие приложения с ним хорошо сочетаются, или ещё не определились с Cosmos и просто хотите оценить, насколько он вписывается в ваш рабочий процесс

Ник СильверНик Сильвер 16 мин. чтения
Portainer vs Cosmos Cloud для управления приложениями Docker: обложка с диаграммой гибридной настройки и блоками neon ops и доступа.
Серверы и ОС

Portainer vs Cosmos Cloud: что лучше подходит для управления приложениями Docker

Если вы уже знакомы с Docker и хотите найти удобный способ запустить растущий стек приложений, вот короткий ответ на вопрос Portainer vs Cosmos Cloud. Portainer — более сильный выбор для прямого

Ник СильверНик Сильвер 14 мин. чтения
Cosmos Cloud vs CasaOS vs Umbrel: графика со сравнением трёх вариантов самостоятельного хостинга внутри абстрактной облачной сети.
Серверы и ОС

Cosmos Cloud vs CasaOS vs Umbrel: какая платформа для самостоятельного хостинга подойдёт вам?

Если коротко: CasaOS по-прежнему проще всего для старта, Umbrel выглядит наиболее аккуратно и продуманно, а Cosmos Cloud имеет смысл, когда нужен более жёсткий контроль над доме

Ник СильверНик Сильвер 11 мин. чтения

Готовы к деплою? От $2.48/мес.

Независимый облачный провайдер с 2008 года. AMD EPYC, NVMe, 40 Gbps. Возврат средств в течение 14 дней.