Главная >> Инструкции >> Переменные в Bash скриптах

Переменные в Bash скриптах

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

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


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

Переменные среды Bash

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

  • Имя системы;
  • Имя пользователя, зарегистрированного в системе;
  • Идентификатор пользователя (UID);
  • Исходный (домашний) каталог пользователя по умолчанию и т.п.

Для ознакомления с полным списком локальных переменных среды используется команда set.

set

Результат:

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

#!/bin/bash
echo "Информация о пользователе $USER:"
echo UID: $UID
echo Домашний каталог: $HOME

Пример работы скрипта:

Переменные окружения Bash $USER, $UID и $HOME использовались для отображения запрашиваемой информации о текущем зарегистрированном пользователе.

Обратите внимание: переменные среды в командах echo заменяются их текущими значениями при выполнении программы. Кроме того, переменные, заключённые  в кавычках, и вне их интерпретируются правильно.

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

#!/bin/bash
echo "Неправильная цена вещи: $15"
echo "Правильная цена вещи: \$15"

Результат работы скрипта:

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

На заметку: частым случаем является использование фигурных скобок вокруг имени переменной после знака доллара (например ${variable}). Этот приём позволяет просто определить имя переменной, а на её функциональность это никак не влияет.

Пользовательские переменные Bash

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

Пользовательские переменные Bash Linux могут быть названы любой текстовой строкой длиной до 20 символов, состоящей из букв, цифр и символа подчёркивания. В названии учитывается регистр букв, поэтому переменная Var1 не является переменной var1. Новички в области написания сценариев часто забывают об этой особенности, отчего и допускают трудно диагностируемые ошибки.

Присвоение значения переменной Bash выполняется с помощью знака равенства (=). Слева и справа от знака не должно быть разделяющих символов по типу пробела. Это правило также часто забывается неофитами. Вот пример присваивания значений переменным:

var1=50
var2=-120
var3=test
var4="текстовая строка"

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

На заметку: обращение к пользовательским переменным осуществляется так же, как и к системным, — с помощью знака доллара ($). Он не используется, когда переменной присваивается значение.

Выводы

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

4 комментария к “Переменные в Bash скриптах”

  1. Cпасибо за статью, но есть замечание:

    Для ознакомления с полным списком локальных переменных среды используется команда set.

    может все таки env?

    Ответить
  2. Здравствуйте, уважаемый автор.
    Если Вы ещё в теме, можете мне ответить?
    При запуске скрипт запрашивает 2 переменные: read M N
    Из скрипта узнаю количество аргументов: $#
    Пишет ответ: 0

    Если тот же, read M N, вставить в функции и спросить сколько аргументов в скрипте, даёт нормальный ответ.

    Подскажите пожалуйста, в чём вообще разница есть или где можно узнать?

    Ответить
  3. #!/bin/bash
    mkdir -p "/opt/backup/машинка"
    backup_file="/etc/frr/frr.conf /etc/network/interfaces"
    where="/opt/backup/машинка"
    day="date +%F-%T"
    cp $backup_file $where
    echo "yes"

    Ответить

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