Linux 변수 내보내기

LinuxBeginner
지금 연습하기

소개

환경 변수는 Linux 운영 체제에서 중요한 역할을 합니다. 이는 시스템에서 실행 중인 프로세스에 영향을 미치는 동적 값입니다. 이 랩에서는 Linux 에서 export 명령을 사용하여 환경 변수를 생성하고 관리하는 방법을 살펴봅니다.

환경 변수는 구성 정보를 저장하고, 프로세스 간 통신을 하며, 시스템 전체 설정을 정의하는 등 다양한 시나리오에서 사용됩니다. 환경 변수를 사용하는 방법을 이해하는 것은 모든 Linux 사용자 또는 시스템 관리자에게 필수적인 기술입니다.

이 랩에서는 변수를 설정하고, 자식 프로세스에서 사용할 수 있도록 내보내며, bash 스크립트에서 사용하는 기본 사항을 안내합니다. 이러한 변수를 사용하여 더 동적이고 구성 가능한 애플리케이션을 만드는 방법을 배우게 됩니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 72%입니다.학습자들로부터 89%의 긍정적인 리뷰율을 받았습니다.

Linux 기본 변수 이해

이 단계에서는 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.

이러한 변수는 "셸 변수" 또는 "로컬 변수"라고 합니다. 현재 셸 세션에서만 사용할 수 있습니다. 다음 단계에서는 export 명령을 사용하여 다른 프로세스에서 변수를 사용할 수 있도록 하는 방법을 배웁니다.

변수를 환경 변수로 내보내기

이전 단계에서는 현재 셸 세션에서만 사용할 수 있는 셸 변수를 생성했습니다. 이 단계에서는 export 명령을 사용하여 셸 변수를 자식 프로세스에서 사용할 수 있는 환경 변수로 변환하는 방법을 배웁니다.

먼저 차이점을 이해해 보겠습니다.

  • 셸 변수 (Shell Variable): 현재 셸에서만 사용 가능
  • 환경 변수 (Environment Variable): 현재 셸 및 모든 자식 프로세스에서 사용 가능

이를 시연하기 위해 새 셸 변수를 생성해 보겠습니다.

greeting="Welcome to Linux"

이제 이 변수에 액세스하려는 새 셸 스크립트를 생성해 보겠습니다. 텍스트 편집기를 열고 ~/project 디렉토리에 test_var.sh라는 파일을 만듭니다.

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

환경 변수를 사용하는 스크립트 생성

이 단계에서는 구성을 위해 환경 변수를 활용하는 스크립트를 생성하고 실행하는 방법을 배웁니다. 이는 코드를 변경하지 않고도 애플리케이션을 더 유연하고 구성 가능하게 만들기 위해 소프트웨어 개발에서 흔히 사용되는 방법입니다.

먼저 환경 변수를 사용하여 출력을 사용자 정의하는 스크립트를 만들어 보겠습니다. ~/project 디렉토리에 greet.sh라는 새 파일을 만듭니다.

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. 기본 변수 (Basic Variables): 현재 세션에서 셸 변수를 생성하고 사용하는 방법을 배웠습니다.

  2. 환경 변수 (Environment Variables): export 명령을 사용하여 셸 변수를 자식 프로세스에서 액세스할 수 있는 환경 변수로 변환하는 방법을 배웠습니다.

  3. 스크립트에서 변수 사용 (Using Variables in Scripts): 코드를 변경하지 않고 환경 변수를 읽고 사용하여 동작을 사용자 정의하는 스크립트를 만들었습니다.

  4. 고급 사용법 (Advanced Usage): 단일 명령에 대한 변수 설정 및 스크립트에서 변수 값 유효성 검사와 같은 고급 기술을 탐구했습니다.

  5. 영구 변수 (Persistent Variables): 환경 변수를 구성 파일에 추가하고 이를 로드하는 유틸리티 스크립트를 생성하여 환경 변수를 영구적으로 만드는 방법을 배웠습니다.

환경 변수는 Linux 에서 애플리케이션을 구성하고, 프로세스 간에 데이터를 공유하고, 환경을 사용자 정의할 수 있는 강력한 기능입니다. 소프트웨어 개발, 시스템 관리 및 애플리케이션 배포에 널리 사용됩니다.

환경 변수를 마스터함으로써 개인 프로젝트에서 엔터프라이즈급 시스템 관리에 이르기까지 Linux 여정에서 도움이 될 중요한 기술을 습득했습니다.