Как назначать и использовать переменные окружения в Linux?

как назначать и использовать переменные окружения в linux?

Создание, использование и удаление переменных

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

Чтобы создать переменную используйте оператор присваивания. Он записывается как знак равно «=». Слева от оператора присваивания должно быть указано имя переменной, а справа – её значение. Имя может содержать только латинские буквы, числа и знак подчеркивания. При этом оно должно начинаться только с буквы или знака подчеркивания. Выражение записывается как «имя_переменной=значение». Между оператором присваивания, именем и значением не допускается наличие пробельных символов.

#создаем переменную и используем внутри строки
days_to_vacation=56
echo "Осталось $days_to_vacation дней до отпуска"
Осталось 56 дней до отпуска

Как видно из примера, приведенного выше, получение значения переменной происходит с помощью знака «$», после которого указывается её имя. Мы частично затронули данный механизм подстановки в предыдущем уроке.

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

#создаем две переменные для математических операций
divider=10
number=240

#производим математическую операцию и выводим результат
result=$[$number/$divider]
echo "Результат деления: $result"
Результат деления: 24

#одинарные кавычки блокируют математическую операцию
raw_result='$[$number/$divider]'
echo "Код операции: $raw_result"
Код операции: $[$number/$divider]

#используем значение переменной в параметре команды
host_file=/etc/hosts
cat $host_file
127.0.0.1 localhost
127.0.1.1 pc-name
...

Удаление происходит с помощью команды unset. Сразу после неё через пробел нужно указать имя переменной. Данная операция редко используется на практике, так как все переменные, заданные пользователем, удаляются автоматически после закрытия окна терминала.

Локальные и глобальные переменные

Командные интерпретаторы Linux следуют устоявшимся в языках программирования правилам и разграничивают переменные на два типа: локальные и глобальные. Есть масса отличий в принципах доступа к их значениям. Согласно профессиональной литературе, а также по устоявшемуся сленгу, локальные переменные принято называть «оболочковыми», а глобальные – «переменными окружения».

Локальная переменная существует в текущей области видимости. Вы можете использовать её значение как параметр команды, но запущенная программа не сможет получить к ней доступ напрямую. Глобальные переменные окружения отличаются от обычных тем, что любая пользовательская или системная программа может получить доступ к её значению. Тем самым глобальные переменные могут влиять на логику выполнения программ.

Для работы с переменными существует ряд функций. Некоторые из них позволяют осуществлять одни и те же операции. Изначально любая переменная создается как локальная, но её можно сделать глобальной с помощью команды export. Ознакомьтесь с примером, приведенным ниже.

var=10             #первый способ создания локальной переменной
declare var=10     #второй способ создания локальной переменной

declare -x var=10  #создание глобальной переменной
declare -x var     #переводит локальную переменную в статус глобальной
export var=10      #аналогично declare -x var=10
export var         #аналогично declare -x var

export             #просмотр списка глобальных переменных и команд их инициализации
printenv           #просмотр только имен и значений глобальных переменных
env                #действие аналогично printenv
set                #показывает локальные, глобальные переменные и определения функций

Заметка
Неважно является ли переменная локальной или глобальной, если её создание происходит вручную, она перестанет существовать после закрытия окна консоли. Отсюда следует вывод, если вы откроете два окна терминала и назначите в одном из них какую-либо переменную, то второй терминал ничего не узнает о её существовании.

Постоянные переменные окружения

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

Конфигурационные файлы переменных окружения:

Имя файла Роль
.bashrc Файл располагается в домашней директории каждого пользователя. Переменные, добавленные в него, будут загружены консолью, но только для конкретного пользователя.
.profile, .bash_profile или .bash_login Эти файлы будут проинициализированы в случае входа пользователя с удаленного компьютера по протоколу SSH. Один из них может присутствовать в зависимости от дистрибутива, но все они являются псевдонимами. Аналогично предыдущему конфигурационному файлу, действие распространяется только на конкретных пользователей.
/etc/environment Переменные окружения, заданные в этом файле, будут действовать для всех пользователей, в том числе тех, которые подключены с удаленного компьютера.
/etc/bash.bashrc Файл обрабатывается для всех пользователей системы, но подключенные с удаленного компьютера – игнорируются.
/etc/profile Задает переменные, действующие для всех пользователей, вошедших в систему через SSH.

Заметка
Синтаксис определения переменных для этих файлов аналогичен примерам из начала урока. Вы можете отредактировать содержимое конфигураций с помощью встроенного текстового редактора. При доступе к последним трем файлам, указанным в таблице, потребуются права администратора. В Ubuntu их можно получить с помощью команды sudo и последующего ввода пароля. Команда открытия /etc/environment может выглядеть следующим образом «sudo gedit /etc/environment».

Встроенные системные переменные

По умолчанию Linux добавляет некоторые системные переменные при запуске окна терминала. Весь список можно увидеть с помощью ввода команды printenv. Они являются глобальными и доступны внутри любой программы. Мы рассмотрим краткий список самых важных системных переменных.

Список системных переменных:

  • BASH — расположение исполняемого файла командной оболочки.
  • HOME — путь домашнего каталога текущего пользователя.
  • LOGNAME — логин текущего пользователя.
  • HOSTNAME — имя текущего компьютера.
  • OLDPWD — имя прошлой директории после перемещения.
  • PWD — имя текущей директории.
  • PATH — список директорий, просматриваемых командным интерпретатором на наличие затребованной программы. Если программа находится в такой директории, вы можете не указывать полный путь до исполняемого файла, а только её имя.

Последние публикации