Глобальные переменные linux bash

Функции Bash

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

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

Определение функций Bash

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

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

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 $? 

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

#!/bin/bash my_function ()  func_result="some result" > my_function echo $func_result 

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

#!/bin/bash my_function ()  local func_result="some result" echo "$func_result" > func_result="$(my_function)" echo $func_result 

Вместо того чтобы просто выполнять функцию, которая выводит сообщение на стандартный вывод, мы назначаем вывод func_result переменной func_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" 

    Выводы

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

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

    Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

    Источник

    Bash-скрипты: функции и разработка библиотек

    Занимаясь разработкой bash-скриптов, вы рано или поздно столкнётесь с тем, что вам периодически приходится использовать одни и те же фрагменты кода. Постоянно набирать их вручную скучно, а копирование и вставка — не наш метод. Как быть? Хорошо бы найти средство, которое позволяет один раз написать блок кода и, когда он понадобится снова, просто сослаться на него в скрипте.

    Оболочка bash предоставляет такую возможность, позволяя создавать функции. Функции bash — это именованные блоки кода, которые можно повторно использовать в скриптах.

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

    Функцию можно объявить так:

    Функцию можно вызвать без аргументов и с аргументами.

    Использование функций

    Напишем скрипт, содержащий объявление функции и использующий её:

    Здесь создана функция с именем myfunc . Для вызова функции достаточно указать её имя.

    Результаты вызова функции

    Функцию можно вызывать столько раз, сколько нужно. Обратите внимание на то, что попытавшись использовать функцию до её объявления, вы столкнётесь с ошибкой. Напишем демонстрирующий это скрипт:

    Как и ожидается, ничего хорошего после его запуска не произошло.

    Попытка воспользоваться функцией до её объявления

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

    Как видно, новая функция преспокойно затёрла старую.

    Использование команды return

    Команда return позволяет задавать возвращаемый функцией целочисленный код завершения. Есть два способа работы с тем, что является результатом вызова функции. Вот первый:

    Команда echo вывела сумму введённого числа и числа 10.

    Вывод значения, возвращаемого функцией

    Функция myfunc добавляет 10 к числу, которое содержится в переменной $ value , значение которой задаёт пользователь во время работы сценария. Затем она возвращает результат, используя команду return . То, что возвратила функция, выводится командой echo с использованием переменной $ ? .
    Если вы выполните любую другую команду до извлечения из переменной $ ? значения, возвращённого функцией, это значение будет утеряно. Дело в том, что данная переменная хранит код возврата последней выполненной команды.

    Учтите, что максимальное число, которое может вернуть команда return — 255. Если функция должна возвращать большее число или строку, понадобится другой подход.

    Запись вывода функции в переменную

    Ещё один способ возврата результатов работы функции заключается в записи данных, выводимых функцией, в переменную. Такой подход позволяет обойти ограничения команды return и возвращать из функции любые данные. Рассмотрим пример:

    Источник

    Читайте также:  Linux working with usb
Оцените статью
Adblock
detector