tr - Transform, Replace and Remove specific characters from strings | #10 Practical Bash
Оглавление:
- Декларация функции Bash
- Область переменных
- Возвращаемые значения
- Передача аргументов в функции Bash
- Вывод
Функция Bash - это, по сути, набор команд, которые можно вызывать множество раз. Цель функции - помочь вам сделать ваши bash-скрипты более читабельными и избежать повторного написания одного и того же кода.
По сравнению с большинством языков программирования, функции Bash несколько ограничены. В этом руководстве мы рассмотрим основы функций Bash и покажем, как их использовать в сценариях оболочки.
Декларация функции Bash
Синтаксис объявления функции bash очень прост. Они могут быть объявлены в двух разных форматах:
-
Первый формат начинается с имени функции, за которым следуют скобки. Это предпочтительный и более используемый формат.
function_name () { commands }Однострочная версия:
function_name () { commands; }Второй формат начинается с зарезервированного слова
functionза которым следует имя функции.function function_name { commands }Однострочная версия:
function function_name { commands; }
Несколько моментов, которые следует отметить:
- Список команд между фигурными скобками
{}является телом функции. Фигурные скобки, которые окружают тело функции, должны быть отделены от тела пробелами или символами новой строки. Определение функции не выполняет ее. Чтобы вызвать функцию bash, просто используйте имя функции. Команды между фигурными скобками выполняются всякий раз, когда функция вызывается в сценарии оболочки. Определение функции должно быть помещено перед любыми вызовами функции. При использовании «сжатых» функций из одной строки точка с запятой;Вы должны следовать последней команде в функции. Вы всегда должны стараться, чтобы имена ваших функций были описательными.
Чтобы лучше это понять, взглянем на следующий пример:
~ / Hello_world.sh
#!/bin/bash hello_world () { echo 'hello, world' } hello_world
Давайте проанализируем код построчно:
- В строке
3мы определяем функцию, присваивая ей имя и открывая фигурную скобку{которая обозначает начало тела функции. Строка4- это тело функции. Тело функции может содержать несколько команд и объявлений переменных. Строка5, закрывающая фигурная скобка}, определяет конец функцииhello_worldстроке7мы выполняем функцию. Вы можете выполнять функцию столько раз, сколько вам нужно.
Если вы запустите скрипт, он напечатает
hello, world
.
Область переменных
Глобальные переменные - это переменные, к которым можно получить доступ из любого места в скрипте независимо от области видимости. В Bash все переменные по умолчанию определены как глобальные, даже если они объявлены внутри функции.
Локальные переменные могут быть объявлены в теле функции с ключевым словом
local
и могут использоваться только внутри этой функции. Вы можете иметь локальные переменные с одинаковыми именами в разных функциях.
Чтобы лучше проиллюстрировать, как работает область видимости переменных в Bash, давайте рассмотрим пример:
~ / Variables_scope.sh
#!/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
Чтобы на самом деле вернуть произвольное значение из функции, нам нужно использовать другие методы. Самый простой вариант - присвоить результат функции глобальной переменной:
~ / Return_values.sh
#!/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
переменной
func_result
с помощью
func_result
команды
$()
. Переменная может позже использоваться по мере необходимости.
Передача аргументов в функции Bash
Чтобы передать любое количество аргументов функции bash, просто поместите их сразу после имени функции, разделив их пробелом. Хорошей практикой является двойная кавычка аргументов, чтобы избежать неправильного разбора аргумента с пробелами в нем.
- Передаваемые параметры:
$1,$2,$3…$n, соответствуют позиции параметра после имени функции. Переменная$0зарезервирована для имени функции. Переменная$#содержит количество позиционных параметров / аргументов, переданных в Переменные$*и$@содержат все позиционные параметры / аргументы, переданные функции.- При двойных кавычках
"$*"раскрывается в одну строку, разделенную пробелом (первый символ IFS) -"$1 $2 $n"При двойных кавычках"$@"раскрывается в отдельные строки -"$1" "$2" "$n". Если двойные кавычки не указаны,$*и$@одинаковы.
- При двойных кавычках
Вот пример:
~ / Passing_arguments.sh
#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"
Вывод
Функция Bash - это блок многократно используемого кода, предназначенный для выполнения определенной операции. После определения функция может быть вызвана несколько раз в скрипте.
Вы также можете прочитать о том, как использовать функцию Bash для создания запоминающейся команды быстрого доступа для более длинной команды.
терминал bashБаш за петлю
В скриптах Bash есть 3 базовых конструкции цикла: для цикла, цикла и и до цикла. В этом уроке мы рассмотрим основы циклов for в Bash, а также операторы break и continue для изменения потока цикла.
Баш Эредок
При написании сценариев оболочки вы можете оказаться в ситуации, когда вам нужно передать многострочный блок текста или кода интерактивной команде. В Bash и других оболочках, таких как Zsh, документ Here (Heredoc) представляет собой тип перенаправления, который позволяет передавать несколько строк ввода в команду.
Баш Шебанг
Последовательность символов (!) Называется shebang и используется, чтобы сообщить операционной системе, какой интерпретатор использовать для анализа остальной части файла.







