Как использовать функции Bash в Linux

12 set 2022 3 min di lettura
Как использовать функции Bash в Linux
Indice dei contenuti

Введение

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

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

Объявление функции Bash

Синтаксис объявления функции bash очень прост. Они могут быть объявлены в двух разных форматах.

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

function_name () {
 commands
 }

Однорядная версия:

function_name () { commands; }

Второй формат начинается с зарезервированного function слова, за которым следует имя функции.

function function_name {
 commands
 }

Однорядная версия:

function function_name { commands; }

Уведомлять:

  • Список команд в фигурных скобках {} является телом функции. Фигурные скобки, окружающие тело функции, должны быть отделены от тела пробелами или новыми строками.
  • Определение функции не выполняет ее. Чтобы вызвать функцию bash, просто используйте имя функции. Команды в фигурных скобках выполняются каждый раз, когда функция вызывается в сценарии оболочки.
  • Определение функции должно быть вставлено перед любым вызовом функции.
  • При использовании однострочных "упакованных" функций точка с запятой ; должен следовать за последней командой функции.
  • Вы всегда должны стараться, чтобы имена ваших функций были описательными.

Чтобы лучше понять это, взгляните на следующий пример:

#!/bin/bash

 hello_world () {
 echo 'hello, world'
 }

 hello_world

Пройдемся по коду построчно:

  • В строке 3 мы определяем функцию, давая ей имя и открывая фигурную скобку {, которая отмечает начало тела функции.
  • Строка 4 — это тело функции. Тело функции может содержать несколько команд и объявлений переменных.
  • Строка 5, закрывающая фигурная скобка }, определяет конец функции hello_world.
  • В строке 7 мы выполняем функцию. Вы можете запускать функцию так часто, как это необходимо.

Если вы запустите скрипт, будет напечатан hello, world.

Переменные области видимости

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

Локальные переменные могут быть объявлены в теле функции с ключевым словом local и могут использоваться только внутри этой функции. У вас могут быть локальные переменные с одинаковыми именами в нескольких функциях.

Чтобы лучше проиллюстрировать, как область видимости переменных работает в Bash, рассмотрим пример:

#!/bin/bash

 var1='A'
 var2='B'

 my_function () {
 local var1='C'
 var2='D'
 echo "Inside function: var1: $var1, var2: $var2"
 }

 echo "Before executing function: var1: $var1, var2: $var2"

 my_function

 echo "After executing function: var1: $var1, var2: $var2"

Сценарий начинается с определения двух глобальных переменных var1 и var2. Затем функция, которая устанавливает локальную переменную var1 и изменяет глобальную переменную var2.

Если вы запустите скрипт, вы должны увидеть следующий вывод:

Before executing function: var1: A, var2: B
 Inside function: var1: C, var2: D
 After executing function: var1: A, var2: D

Из приведенного выше вывода мы можем сделать вывод, что:

  • Если вы установите локальную переменную в теле функции с тем же именем, что и у существующей глобальной переменной, она будет иметь приоритет над глобальной переменной.
  • Глобальные переменные могут быть изменены внутри функции.

Возвращаемые значения

В отличие от функций в «настоящих» языках программирования, функции Bash не позволяют возвращать значение при вызове. Когда функция bash завершается, ее возвращаемое значение — это состояние последнего оператора, выполненного в функции, значение 0 указывает на успех функции, а ненулевое десятичное число в диапазоне от 1 до 255 указывает на ошибку.

Статус возврата можно указать с помощью ключевого слова return и присвоить переменной $?. Оператор return завершает работу функции. Вы можете думать об этом как о статусе выхода функции.

#!/bin/bash

 my_function () {
 echo "some result"
 return 55
 }

 my_function
 echo $?
some result
 55

Чтобы фактически вернуть произвольное значение из функции, нам нужно использовать другие методы. Самый простой вариант — присвоить результат функции глобальной переменной:

#!/bin/bash

 my_function () {
 func_result="some result"
 }

 my_function
 echo $func_result
some result

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

#!/bin/bash

 my_function () {
 local func_result="some result"
 echo "$func_result"
 }

 func_result="$(my_function)"
 echo $func_result
some result

Вместо того, чтобы просто запустить функцию, которая выведет сообщение на стандартный вывод, мы назначаем вывод функции переменной func_result, используя подстановку команды $(). Позже эту переменную можно использовать по мере необходимости.

Передать аргументы функциям Bash

Чтобы передать любое количество аргументов функции bash, вставьте их сразу после имени функции, разделенных пробелом. Рекомендуется заключать аргументы дважды в кавычки, чтобы избежать ошибочного разбора аргумента с пробелами в нем.

  • Передаваемые параметры: $1, $2, $3... $n, соответствующие положению параметра после имени функции.
  • Переменная $0 зарезервирована для имени функции.
  • Переменная $# содержит количество позиционных параметров/аргументов, переданных в функцию.
  • Переменные $* и $@ содержат все позиционные параметры/аргументы, переданные в функцию.
  • При заключении в двойные кавычки "$*" расширяется до одной строки, разделенной пробелами (первый символ IFS) — "$1 $2 $n".
  • При заключении в двойные кавычки "$@" раскрывается в отдельные строки - "$1" "$2" "$n".
  • Если нет двойных кавычек, $* и $@ совпадают.

Вот пример:

#!/bin/bash

 greeting () {
 echo "Hello $1"
 }

 greeting "Joe"
Hello Joe

Вывод

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

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.