Экспорт переменных в Linux

LinuxBeginner
Практиковаться сейчас

Введение

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

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

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

Понимание базовых переменных в Linux

На этом этапе вы узнаете основы создания и использования переменных в среде оболочки (shell) Linux.

В Linux переменные используются для хранения данных, которые могут быть ссыланы и манипулированы командами и скриптами. Переменная - это просто имя, представляющее значение.

Начнем с создания простой переменной в вашей оболочке:

name="LinuxLearner"

Эта команда создает переменную с именем name и присваивает ей значение "LinuxLearner". Обратите внимание, что при присваивании значений переменным вокруг знака равенства не должно быть пробелов.

Чтобы отобразить значение переменной, используйте команду echo с именем переменной, предваряемым знаком доллара ($):

echo $name

Вы должны увидеть следующий вывод:

LinuxLearner

Вы также можете использовать переменные внутри строк:

echo "Hello, $name!"

Вывод:

Hello, LinuxLearner!

Теперь создайте еще одну переменную для хранения вашего любимого цвета:

color="blue"

И выведите сообщение, используя обе переменные:

echo "Hello $name, I see your favorite color is $color."

Вывод:

Hello LinuxLearner, I see your favorite color is blue.

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

Экспорт переменных как переменных окружения

На предыдущем этапе вы создали переменные оболочки (shell variables), которые доступны только в текущей сессии оболочки. На этом этапе вы узнаете, как использовать команду export для преобразования переменной оболочки в переменную окружения, которая будет доступна дочерним процессам.

Сначала разберемся в различиях:

  • Переменная оболочки (Shell Variable): доступна только в текущей оболочке.
  • Переменная окружения (Environment Variable): доступна текущей оболочке и всем ее дочерним процессам.

Для демонстрации этого создадим новую переменную оболочки:

greeting="Welcome to Linux"

Теперь создадим новый скрипт оболочки, который пытается получить доступ к этой переменной. Откройте текстовый редактор и создайте файл с именем test_var.sh в каталоге ~/project:

cd ~/project
nano test_var.sh

Добавьте в файл следующее содержимое:

#!/bin/bash
echo "The greeting is: $greeting"

Сохраните файл (нажмите Ctrl+O, затем Enter) и выйдите из nano (нажмите Ctrl+X).

Сделайте скрипт исполняемым:

chmod +x ~/project/test_var.sh

Теперь запустите скрипт:

~/project/test_var.sh

Вы увидите следующий вывод:

The greeting is:

Обратите внимание, что значение переменной не отображается, так как переменные оболочки не передаются дочерним процессам.

Чтобы сделать эту переменную доступной для скрипта, вам нужно экспортировать ее:

export greeting="Welcome to Linux"

Теперь запустите скрипт еще раз:

~/project/test_var.sh

На этот раз вы должны увидеть:

The greeting is: Welcome to Linux

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

Вы можете проверить все текущие переменные окружения с помощью команды env:

env

Это отобразит список всех переменных окружения в текущей сессии.

Вы также можете проверить определенную переменную окружения с помощью команды echo:

echo $greeting

Теперь создадим и экспортируем еще одну переменную окружения:

export USER_LEVEL="beginner"

Запустите следующую команду, чтобы убедиться, что она установлена:

echo $USER_LEVEL

Вывод:

beginner

Создание скриптов, использующих переменные окружения

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

Сначала создадим скрипт, который использует переменные окружения для настройки своего вывода. Создайте новый файл с именем greet.sh в каталоге ~/project:

cd ~/project
nano greet.sh

Добавьте в файл следующее содержимое:

#!/bin/bash
## This script demonstrates using environment variables

## Default values if environment variables are not set
DEFAULT_NAME="Guest"
DEFAULT_LANGUAGE="English"

## Use environment variables or default values
USER_NAME=${USER_NAME:-$DEFAULT_NAME}
LANGUAGE=${LANGUAGE:-$DEFAULT_LANGUAGE}

## Greet based on language
if [ "$LANGUAGE" = "English" ]; then
  echo "Hello, $USER_NAME! Welcome to the Linux learning environment."
elif [ "$LANGUAGE" = "Spanish" ]; then
  echo "Hola, $USER_NAME! Bienvenido al entorno de aprendizaje de Linux."
elif [ "$LANGUAGE" = "French" ]; then
  echo "Bonjour, $USER_NAME! Bienvenue dans l'environnement d'apprentissage Linux."
else
  echo "Hello, $USER_NAME! Welcome to the Linux learning environment."
fi

Сохраните файл (нажмите Ctrl+O, затем Enter) и выйдите из nano (нажмите Ctrl+X).

Сделайте скрипт исполняемым:

chmod +x ~/project/greet.sh

Теперь запустите скрипт без установки каких-либо переменных окружения:

~/project/greet.sh

Вывод:

Hello, Guest! Welcome to the Linux learning environment.

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

export USER_NAME="LinuxExplorer"
export LANGUAGE="Spanish"

Теперь запустите скрипт еще раз:

~/project/greet.sh

Вывод:

Hola, LinuxExplorer! Bienvenido al entorno de aprendizaje de Linux.

Обратите внимание, как вывод скрипта изменился в зависимости от установленных переменных окружения. Это демонстрирует, как переменные окружения могут быть использованы для настройки поведения приложения без изменения кода.

Попробуем с другим языком:

export LANGUAGE="French"
~/project/greet.sh

Вывод:

Bonjour, LinuxExplorer! Bienvenue dans l'environnement d'apprentissage Linux.

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

Расширенное использование и временные переменные окружения

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

Установка переменных окружения для одной команды

Иногда вы хотите установить переменную окружения только для одной команды. Это можно сделать, добавив перед командой присвоение переменной окружения:

LANGUAGE="Spanish" ~/project/greet.sh

Обратите внимание, что скрипт запускается с настройкой языка на испанский, но глобальная переменная окружения не изменилась:

echo $LANGUAGE

Вывод:

French

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

Переменные окружения в реальной ситуации

Создадим более практический пример - скрипт настройки гипотетического приложения. Создайте новый файл с именем app_config.sh:

cd ~/project
nano app_config.sh

Добавьте следующее содержимое:

#!/bin/bash
## Application configuration script

## Display the current configuration
echo "Current Application Configuration:"
echo "--------------------------------"
echo "App Name: ${APP_NAME:-Unknown}"
echo "App Version: ${APP_VERSION:-0.0.0}"
echo "Log Level: ${LOG_LEVEL:-INFO}"
echo "Database URL: ${DB_URL:-localhost:5432}"
echo "API Key: ${API_KEY:-not set}"
echo "--------------------------------"

## Check if required configurations are set
if [[ -z "$APP_NAME" ]]; then
  echo "WARNING: APP_NAME is not set. Some features may not work properly."
fi

if [[ -z "$API_KEY" ]]; then
  echo "WARNING: API_KEY is not set. API functionality will be limited."
fi

## Validate log level
valid_log_levels=("DEBUG" "INFO" "WARNING" "ERROR" "CRITICAL")
log_level=${LOG_LEVEL:-INFO}
valid=false

for level in "${valid_log_levels[@]}"; do
  if [[ "$level" == "$log_level" ]]; then
    valid=true
    break
  fi
done

if [[ "$valid" == false ]]; then
  echo "ERROR: Invalid LOG_LEVEL '$log_level'. Must be one of: ${valid_log_levels[*]}"
  exit 1
fi

echo "Configuration validation complete."

Сохраните файл (нажмите Ctrl+O, затем Enter) и выйдите из nano (нажмите Ctrl+X).

Сделайте скрипт исполняемым:

chmod +x ~/project/app_config.sh

Теперь запустите скрипт без установки каких-либо переменных окружения:

~/project/app_config.sh

Вы должны увидеть предупреждения о недостающих настройках.

Теперь установите все необходимые переменные окружения и запустите скрипт еще раз:

export APP_NAME="MyAwesomeApp"
export APP_VERSION="1.0.0"
export LOG_LEVEL="DEBUG"
export DB_URL="postgres://user:password@dbserver:5432/mydb"
export API_KEY="abc123xyz456"

~/project/app_config.sh

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

Попробуйте установить недопустимый уровень логирования:

export LOG_LEVEL="VERBOSE"
~/project/app_config.sh

Скрипт должен показать сообщение об ошибке о недопустимом уровне логирования.

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

Сделать переменные окружения постоянными

До сих пор мы устанавливали переменные окружения, которые действуют только в текущей сессии терминала. Как только вы закроете терминал или выйдете из системы, эти переменные будут потеряны. На этом этапе вы узнаете, как сделать переменные окружения постоянными между сессиями.

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

Существует несколько файлов, в которых вы можете установить переменные окружения, чтобы они были постоянными:

  1. ~/.bashrc или ~/.zshrc: Для переменных, специфичных для пользователя.
  2. /etc/environment: Для системных переменных.
  3. /etc/profile или файлы в /etc/profile.d/: Для системных переменных, загружаемых при входе в систему.

Добавим несколько переменных окружения в файл конфигурации оболочки пользователя. Поскольку в этой лабораторной среде используется ZSH, мы отредактируем файл ~/.zshrc:

nano ~/.zshrc

Прокрутите файл до конца и добавьте следующие строки:

## Custom environment variables
export EDITOR="nano"
export CUSTOM_PATH="$HOME/bin"
export GREETING="Hello from .zshrc!"

Сохраните файл (нажмите Ctrl+O, затем Enter) и выйдите из nano (нажмите Ctrl+X).

Чтобы применить эти изменения в текущей сессии, вам нужно выполнить файл:

source ~/.zshrc

Теперь проверьте, установлены ли переменные:

echo $EDITOR
echo $CUSTOM_PATH
echo $GREETING

Вы должны увидеть значения, которые вы установили в файле .zshrc.

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

Создание отдельного файла для переменных окружения

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

Создадим файл с именем .env в каталоге проекта:

cd ~/project
nano .env

Добавьте следующее содержимое:

## Project environment variables
export PROJECT_NAME="Linux Environment Lab"
export PROJECT_VERSION="1.0.0"
export DEBUG_MODE="true"

Сохраните файл (нажмите Ctrl+O, затем Enter) и выйдите из nano (нажмите Ctrl+X).

Чтобы загрузить эти переменные в текущую сессию, выполните файл:

source ~/project/.env

Теперь проверьте, установлены ли переменные:

echo $PROJECT_NAME
echo $PROJECT_VERSION
echo $DEBUG_MODE

Вы должны увидеть значения из файла .env.

Создание скрипта для загрузки переменных окружения

Наконец, создадим скрипт, который загружает переменные окружения из файла. Это распространенная практика в средах разработки:

cd ~/project
nano load_env.sh

Добавьте следующее содержимое:

#!/bin/bash
## Script to load environment variables from a .env file

ENV_FILE=".env"

if [[ -f "$ENV_FILE" ]]; then
  echo "Loading environment variables from $ENV_FILE"

  ## Read each line from the .env file
  while IFS= read -r line || [[ -n "$line" ]]; do
    ## Skip comments and empty lines
    if [[ $line =~ ^## ]] || [[ -z $line ]]; then
      continue
    fi

    ## Export the variable if it starts with "export "
    if [[ $line == export* ]]; then
      ## Remove the "export " prefix and export the variable
      eval "${line}"
      echo "Exported: ${line#export }"
    fi
  done < "$ENV_FILE"

  echo "Environment variables loaded successfully"
else
  echo "Error: $ENV_FILE file not found"
  exit 1
fi

Сохраните файл (нажмите Ctrl+O, затем Enter) и выйдите из nano (нажмите Ctrl+X).

Сделайте скрипт исполняемым:

chmod +x ~/project/load_env.sh

Теперь удалите переменные, которые мы ранее установили, и запустите скрипт, чтобы загрузить их снова:

unset PROJECT_NAME PROJECT_VERSION DEBUG_MODE
echo "PROJECT_NAME: $PROJECT_NAME"

## Now load the variables using the script
~/project/load_env.sh

## Check if the variables are now set
echo "PROJECT_NAME: $PROJECT_NAME"

Скрипт считывает файл .env и экспортирует каждую переменную, определенную с помощью ключевого слова export.

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

Резюме

В этой лабораторной работе вы изучили основные концепции работы с переменными окружения в Linux:

  1. Базовые переменные: Вы узнали, как создавать и использовать переменные оболочки в текущей сессии.

  2. Переменные окружения: Вы узнали, как использовать команду export для преобразования переменных оболочки в переменные окружения, которые могут быть доступны дочерним процессам.

  3. Использование переменных в скриптах: Вы создали скрипты, которые считывают и используют переменные окружения для настройки своего поведения без изменения кода.

  4. Продвинутое использование: Вы изучили продвинутые техники, такие как установка переменных для одной команды и валидация значений переменных в скриптах.

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

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

Освоив переменные окружения, вы получили важный навык, который пригодится вам в вашем Linux-путешествии, от личных проектов до системного администрирования на предприятии.