Переменные в Bash скриптах
Существование сценариев, состоящих из отдельных команд, считается нормальным явлением. Но иногда возникают ситуации, когда этого становится недостаточно. Например, часто необходимо использовать данные от команды к команде, чтобы обработать информацию. С этой задачей помогают справиться переменные в скриптах.
В этой статье будут рассмотрены переменные в Bash скриптах с точки зрения области видимости, а также некоторые особенности при работе с ними.
Переменные среды Bash
Командный интерпретатор Bash поддерживает переменные среды, которые отслеживают различную системную информацию:
- Имя системы;
- Имя пользователя, зарегистрированного в системе;
- Идентификатор пользователя (UID);
- Исходный (домашний) каталог пользователя по умолчанию и т.п.
Для ознакомления с полным списком локальных переменных среды используется команда set.
Значения этих переменных Bash можно использовать в сценариях, для чего необходимо указать имя переменной с предшествующим ей знаком доллара ($).
#!/bin/bash
echo «Информация о пользователе $USER:»
echo UID: $UID
echo Домашний каталог: $HOME
Пример работы скрипта:
Переменные окружения Bash $USER, $UID и $HOME использовались для отображения запрашиваемой информации о текущем зарегистрированном пользователе.
Обратите внимание: переменные среды в командах echo заменяются их текущими значениями при выполнении программы. Кроме того, переменные, заключённые в кавычках, и вне их интерпретируются правильно.
Однако в таком методе есть некоторый недостаток: при попытке отобразить какое-то денежное значение в долларовом эквиваленте необходимо добавить перед знаком доллара обратный слэш для его экранирования, чтобы интерпретатор не посчитал следующую за ним цифру именем переменной, принимающей параметр скрипта по указанному номеру.
#!/bin/bash
echo «Неправильная цена вещи: $15»
echo «Правильная цена вещи: \$15»
Результат работы скрипта:
В первой строке, где отображается неправильная цена, интерпретатор воспринял $ как знак начала переменной 1, которая считала первый параметр запущенной программы. Поскольку параметр ничего не содержал, то ничего и не было отображено вместо $1.
На заметку: частым случаем является использование фигурных скобок вокруг имени переменной после знака доллара (например $ ). Этот приём позволяет просто определить имя переменной, а на её функциональность это никак не влияет.
Пользовательские переменные Bash
В сценариях командного интерпретатора Bash можно не только использовать переменные среды, но также создавать и включать собственные. Задание переменных позволяет сохранять данные и использовать их во время работы скрипта, что делает его более интерактивным.
Пользовательские переменные Bash Linux могут быть названы любой текстовой строкой длиной до 20 символов, состоящей из букв, цифр и символа подчёркивания. В названии учитывается регистр букв, поэтому переменная Var1 не является переменной var1. Новички в области написания сценариев часто забывают об этой особенности, отчего и допускают трудно диагностируемые ошибки.
Присвоение значения переменной Bash выполняется с помощью знака равенства (=). Слева и справа от знака не должно быть разделяющих символов по типу пробела. Это правило также часто забывается неофитами. Вот пример присваивания значений переменным:
var1=50
var2=-120
var3=test
var4=»текстовая строка»
Ключевой особенностью интерпретатора Bash является автоматическое определение типа данных, используемого для представления значения переменных. После их определения сценарий сохраняет значения этих переменных на протяжении всего времени работы программы и уничтожает после её завершения.
На заметку: обращение к пользовательским переменным осуществляется так же, как и к системным, — с помощью знака доллара ($). Он не используется, когда переменной присваивается значение.
Выводы
Для обработки информации в сценариях командного интерпретатора используются переменные среды Bash и пользовательские переменные. Последние имеют жизнеспособность по умолчанию до тех пор, пока работает программа. При обращении к пользовательским переменным применяется знак доллара, а при записывании в них данных — нет.
Как установить и посмотреть переменные окружения Linux
В системах на базе Linux и Unix переменные среды представляют собой набор именованных динамических значений. Они хранятся в системе и используются приложениями, запущенными в оболочках. Проще говоря, переменная среды — это переменная с именем и связанным значением, доступная из ОС.
Переменные среды позволяют настраивать работу системы и поведение приложений в ней. Например, переменная среды может хранить информацию о текстовом редакторе или браузере по умолчанию, пути к исполняемым файлам или языковых параметрах системы и раскладки клавиатуры. В этом руководстве мы объясним, как смотреть и устанавливать переменные среды и оболочки.
Переменные среды и переменные оболочки
Обычно, переменные имеют такой формат:
Несколько основных правил для работы с переменными:
- Имена переменных чувствительны к регистру. Все переменные среды должны называться С ЗАГЛАВНОЙ БУКВЫ.
- Чтобы назначить несколько значений для одной переменной используйте знак «двоеточия» в качестве разделителя.
- Символ «=» не должны окружать пробелы.
Переменные можно классифицировать на две основные категории: переменные среды и переменные оболочки:
- Переменные среды — это такие переменные, которые доступны для всей системы и наследуются всеми дочерними процессами и оболочками.
- Переменные оболочки(shell) — переменные, которые применяются только к текущему экземпляру оболочки. Каждая оболочка, такая как zsh и bash, имеет свой собственный набор внутренних переменных.
Есть несколько доступных команд, которые позволяют вам устанавливать и просматривать переменные среды в Linux:
- env — Эта команда позволяет запускать другую программу в пользовательской среде без изменения текущей. Если использовать её без дополнительных аргументов, она выведет список текущих переменных среды.
- printenv — Команда выведет на экран все или часть переменных.
- set — Команда устанавливает или отменяет переменные оболочки. Если её использовать без аргумента, тогда она выведет список всех переменных, включая переменные окружения и оболочки, а также некоторые функции оболочки.
- unset — Удаляет переменные оболочки и среды.
- export — Устанавливает переменные среды.
Список переменных среды
Наиболее часто используемая команда для отображения переменных среды — printenv. Если имя переменной передается в качестве аргумента команды, то отображается только значение этой переменной. Если же аргумент не указан, printenv выводит список всех переменных.
Например, чтобы отобразить значение переменной среды HOME, вы должны выполнить:
Выходные данные выведут домашний путь текущего пользователя системы:
Вы также можете передавать команде printenv более одного аргумента:
Если вы запустите команду printenv или env без аргументов, тогда вы получите список всех переменных среды:
Ниже приведены несколько наиболее популярных имен переменных среды:
- USER — Текущий пользователь системы.
- HOME — Домашняя директория пользователя.
- EDITOR — Редактор по умолчанию. Это редактор, который будет использоваться при вводе edit в терминале.
- SHELL — Путь к оболочке текущего пользователя, такой как bash или zsh.
- LOGNAME — Имя текущего пользователя
- PATH — Список каталогов, которые нужно обойти при выполнении команд. Когда вы запускаете команду, система будет искать в этих каталогах исполняемый файл и использовать первый найденный.
- LANG — Настройки языка.
- TERM — Текущий терминал.
- MAIL — Местоположение, где хранится почта текущего пользователя.
Команды printenv и env выводят только переменные окружения. Если вы хотите получить список всех переменных, включая окружение, оболочку и переменные, а также функции оболочки, вы можете использовать команду set без аргументов:
Команда отобразит большой список всех переменных, поэтому правильнее будет направить вывод в команду less.
Конечно, можно использовать echo для вывода переменной оболочки. Например, чтобы вывести значение переменной BASH_VERSION выполните:
Установка переменных среды
Чтобы лучше показать разницу между переменными оболочки и среды, попробуем начать с установки переменных оболочки, а затем перейдем к переменным среды.
Создадим новую переменную оболочки с именем MY_VAR и значением Abuzov, для этого введём:
Вы можете проверить, что переменная установлена, используя echo $MY_VAR. Для фильтрации вывода команды set с помощью grep set | grep MY_VAR:
Используйте команду printenv, чтобы проверить, является ли эта переменная переменной среды:
Вывод окажется пустым — это говорит о том, что переменная не является переменной окружения. Также можно напечатать переменную в под-оболочке, и вы получите пустой вывод.
Команда export используется для установки переменных окружения. Чтобы создать переменную, просто экспортируйте переменную оболочки как переменную среды:
Теперь выполнение команды printenv MY_VAR выведет на экран значение Abuzov. Дополнительно, можно устанавливать переменные среды командой в одну строку:
Переменные среды, созданные таким образом, доступны только в текущем сеансе. Если вы откроете новую оболочку или выйдете из системы, все переменные будут потеряны.
Постоянные переменные среды
Для создания постоянных переменных окружения, нужно определить эти переменные в файлах конфигурации bash. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:
- /etc/environment — Используйте этот файл для настройки общих системных переменных. Переменные в этом файле устанавливаются в следующем формате
- /etc/profile — Переменные, заданные в этом файле, загружаются при каждом входе в оболочку bash. Чтобы объявить переменные окружения в этом файле вам нужно использовать команду экспорта:
- Конфигурационные файлы для отдельных пользовательских оболочек. Например, если вы используете Bash, вы можете объявить переменные в
Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте команду source:
В этом руководстве мы показали, как устанавливать и перечислять переменные окружения и оболочки.