Bash-функции: Создавайте мощные скрипты как профессионал

Bash-функции: Создавайте мощные скрипты как профессионал

Ваши Bash-скрипты превращаются в беспорядочный набор команд, которые сложно поддерживать? Есть способ кардинально улучшить их структуру, читаемость и мощность.

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

Вы узнаете, как создавать собственные функции, которые делают код чище и логичнее. Мы разберем всё: от простейшего «Hello World» до продвинутых техник.

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

Откроете для себя команду `local`, которая создает переменные, не засоряя глобальное пространство вашего скрипта. Увидите, как работает рекурсия, и когда её стоит применять с осторожностью.

Самое практичное — вы научитесь создавать личные библиотеки функций. Один раз напишите полезный код, а затем подключайте его в любом скрипте одной командой `source`. Это сэкономит вам часы рутинной работы.

Мы не будем ограничиваться теорией. Вас ждут готовые примеры кода, которые вы сможете сразу применить в своих проектах. Превратите свои скрипты из хаотичных последовательностей команд в элегантные и многоразовые программы.

Готовы вывести свои навыки автоматизации на новый уровень? Всё, что нужно знать о функциях Bash, ждет вас в полной статье.


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

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


Содержание статьи

Написание функций Bash

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

Синтаксис создания функции очень прост:

имя_функции() { список_команд }

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

Простая функция

Давайте напишем небольшую функцию, которая будет выводить строку на экран:

vi function.sh

#!/bin/bash #... printstr(){ echo "hello world" } printstr

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

chmod u+x function.sh ./function.sh
Bash-функции: Создавайте мощные скрипты как профессионал

Все работает, теперь усложним задачу, попробуем передать функции аргументы.

Аргументы функции

Аргументы функции нужно передавать при вызове, а читаются они точно так же, как и аргументы скрипта. Синтаксис вызова функции с параметрами bash такой:

имя_функции аргумент1 аргумент2 ... аргументN

Как видите, все достаточно просто. Параметры разделяются пробелом. Теперь улучшим нашу функцию, чтобы она выводила заданную нами строку:

vi function.sh

#!/bin/bash #... printstr(){ echo $1 } #... printstr "Hello world"

Можно сделать, чтобы параметров было несколько:

#!/bin/bash #... printstr(){ echo $1 echo $2 echo $3 echo $5 } #... printstr "arg1" "arg2" "arg3" "arg4" "arg5"

./function.sh
Bash-функции: Создавайте мощные скрипты как профессионал

Есть и другой способ извлекать аргументы, как в Си, с помощью стека. Мы извлекаем первый аргумент, затем сдвигаем указатель стека аргументов на единицу и снова извлекаем первый аргумент. И так далее:

#!/bin/bash #... printstr(){ echo $1 shift echo $1 shift echo $1 shift echo $1 } #.. printstr "arg1" "arg2" "arg3" "arg4"

Bash-функции: Создавайте мощные скрипты как профессионал

Возврат результата функции

Вы можете не только использовать функции с параметрами bash, но и получить от нее результат работы. Для этого используется команда return. Она завершает функцию и возвращает числовое значение кода возврата. Он может быть от 0 до 255:

#!/bin/bash #... printstr(){ return 134; } #... printstr echo $?

Bash-функции: Создавайте мощные скрипты как профессионал

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

#!/bin/bash #... printstr(){ echo "test" } #... VAR=$(printstr) echo $VAR

Bash-функции: Создавайте мощные скрипты как профессионал

Экспорт функций

Вы можете сделать функцию доступной вне скрипта с помощью команды declare:

#!/bin/bash #... printstr(){ echo "hello world" } declare -x -f printstr

Затем запустите скрипт с помощью команды source:

source function.sh printstr
Bash-функции: Создавайте мощные скрипты как профессионал

Рекурсия

Вы можете вызвать функцию из нее же самой, чтобы сделать рекурсию:

#!/bin/bash #... printstr(){ echo "hello world" printstr } printstr

Bash-функции: Создавайте мощные скрипты как профессионал

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

Локальные переменные в функции

Если вы объявите обычную переменную в функции, то она будет доступной во всем скрипте, это удобно для возврата значения функции, но иногда может понадобиться сделать локальную переменную. Для этого существует команда local:

#!/bin/bash #... printstr(){ local VAR=$1 echo ${VAR} } printstr "Hello World"

Bash-функции: Создавайте мощные скрипты как профессионал

Библиотеки функций

Мы можем взять некоторые функции bash и объединить их в одну библиотеку, чтобы иметь возможность одной командой импортировать эти функции. Это делается похожим образом на экспорт функций. Сначала создадим файл библиотеки:

vi lib.sh

#!/bin/bash #... test1(){ echo "Hello World from 1"; } test2(){ echo "Hello World from 2"; } test3(){ echo "Hello World from 3"; }

Теперь создадим скрипт, который будет использовать наши функции. Импортировать библиотеку можно с помощью команды source или просто указав имя скрипта:

vi function.sh

#!/bin/bash source lib.sh test1 test2 test3

Выводы

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

Оставить комментарий


Кликните на изображение чтобы обновить код, если он неразборчив