Что такое функция Bash в Linux и как ее использовать?
Предположим, вы работаете над сложным сценарием bash для автоматизации ряда задач в вашей системе Linux. Вы замечаете, что по мере роста появляются определенные части скрипта, в которых одни и те же блоки кода повторяются несколько раз. Для этого вы можете обернуть повторяющуюся часть внутри блока, известного как «функция», и использовать его повторно, делая общий код более упорядоченным и организованным. В этой статье мы обсудим, что такое функция в bash и как ее использовать для автоматизации задач Linux.
Что такое функции Bash в Linux?
Функции Bash — это многократно используемые блоки кода в сценарии bash, которые можно сгруппировать и назвать, чтобы избежать повторного написания одного и того же кода. Как и в других языках программирования, вы можете использовать функции в своих bash-скриптах. Функции помогают организовать весь сценарий в более мелкие модули, делая код более читабельным, легким для отладки и пригодным для повторного использования. Другими словами, функции подобны сценарию внутри сценария.
Как определить функции в Bash?
Теперь, когда у вас есть базовое представление о том, что такое функции bash, давайте посмотрим, как их определить, чтобы сделать наш рабочий процесс в Linux намного проще. Основной синтаксис для определения функций bash:
}
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Вы даже можете использовать однострочную версию приведенного выше синтаксиса:
Некоторые моменты, которые следует помнить об определении функций bash, включают:
- Каждый оператор и команда, написанные внутри {}, называются телом функции. В качестве имени функции вы можете использовать что угодно, кроме ключевого слова, которое представляет собой определенные слова, зарезервированные для разных команд.
- В отличие от обычного bash-скрипта, функции не выполняются до тех пор, пока вы их не вызовете. Чтобы выполнить функцию, вам нужно использовать имя функции.
- При использовании однострочной версии каждая написанная вами команда должна быть разделена точкой с запятой ‘;’.
- Все переменные, объявленные внутри функции, доступны только внутри тела функции.
Давайте посмотрим на базовый пример, основанный на приведенном выше синтаксисе. Начните с создания нового файла в текстовых редакторах Linux и напишите в нем этот код:
#!/bin/bash hello_world () { echo ‘привет, мир’ } hello_world
Рекомендуется сохранять файл с тем же именем, что и имя функции. Чтобы вызвать файл, просто напишите имя функции в командной строке и нажмите Enter.
./Привет, мир
Как передавать аргументы функциям Bash
Иногда вам может понадобиться работать с некоторыми пользовательскими значениями или работать со значениями пользовательского ввода с помощью созданных вами функций. Чтобы передать аргументы функции bash, просто укажите их после имени функции после вызова функции в качестве переменных оболочки Linux. Что касается использования аргументов внутри функции, поместите их с помощью $
#!/bin/bash приветствие () { echo “Hello $1” } приветствие “Бибом”
Для вызова используйте следующую команду:
./приветствие.ш
Как вернуть значение из функций Bash
В отличие от других языков программирования, в bash вы не можете возвращать значения из функции. Вы можете отправить статус возврата из функции bash вызывающей стороне только с любым числом в диапазоне от 0 до 255, где 0 означает успех, а любое другое число — системную ошибку/сбой Linux. Например, скопируйте этот код в редакторе nano в Linux.
#!/bin/bash приветствие () { echo “Привет $1” return 10 } приветствие “Бибом” echo Возвращаемое значение $?
Когда вы вызываете приведенный выше сценарий, вы получите аналогичный результат вместе со значением 10, указывающим на сбой или ошибку.
Область видимости переменных в функциях Bash
Область действия переменной означает части кода, в которых переменные могут использоваться в bash. Область действия можно разделить на две основные части: глобальную и локальную. С глобальной областью видимости переменную можно использовать везде, в том числе непосредственно в приглашении оболочки. Локальная область означает, что переменная не может использоваться вне блока, в котором она объявлена.
Каждая переменная, которую вы объявляете внутри функции bash с помощью ключевого слова «local», будет подпадать под локальную область видимости тела функции и не может использоваться вне тела функции. Точно так же доступ к глобальным переменным можно получить из любого места скрипта bash без каких-либо ограничений. Следующий пример прояснит ситуацию:
#!/bin/bash global_var=”Я глобальный” function display_global() { echo “Внутренняя функция: $global_var” local local_var=”Я локальный” echo “Внутренняя функция: $local_var” } display_global echo “Внешняя функция: $ global_var” echo “Внешняя функция: $local_var”
После выполнения приведенного выше скрипта вы увидите следующий вывод:
Лучшие практики использования функций в Bash
Функции Bash — это мощные инструменты, которые могут улучшить структуру, удобство сопровождения и возможность повторного использования сценариев bash в Linux. Следуйте этим рекомендациям, чтобы использовать функции в bash, которые могут значительно улучшить наш рабочий процесс:
- Делайте функции короткими и сфокусированными. Старайтесь, чтобы функции, которые вы пишете, были короткими, лаконичными и сфокусированными на выполнении одной задачи. Это улучшит общую читабельность и удобство сопровождения сценария bash.
- Используйте описательные имена: используйте короткое, но описательное имя, которое отражает назначение функции в качестве имени функции. Четкие и осмысленные имена делают код более понятным, позволяя вам, а также другим разработчикам поддерживать и развивать код.
- Добавляйте комментарии: не только для сценариев bash, но и для всех различных типов языков программирования, с которыми вы работаете, используйте комментарии, описывающие, какая часть кода что делает.
- Повторное использование функций. По возможности повторно используйте функции, чтобы избежать повторного написания одного и того же кода.
- Избегайте конфликтов имен функций: избегайте использования функций с теми же именами, что и у встроенных команд и других инструментов командной строки.