리눅스 변수 선언

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 셸 스크립팅에서 변수에 대해 배우게 됩니다. 변수는 스크립트에서 데이터를 저장하고 조작하는 데 필수적입니다. 변수를 사용하면 스크립트 실행 중에 정보를 임시로 저장하고 코드 전체에서 해당 정보를 재사용할 수 있습니다.

변수를 선언하고 사용하는 방법을 이해하는 것은 Linux 셸 스크립트를 작성하는 데 기본적인 기술입니다. 이 지식은 작업을 자동화하고, 구성을 관리하며, 다양한 애플리케이션을 위한 보다 동적인 스크립트를 만드는 데 도움이 될 것입니다.

이 랩을 마치면, bash 스크립트에서 간단한 변수, 정수 변수, 그리고 배열을 만드는 방법을 이해하게 될 것입니다. 이는 더 발전된 셸 스크립팅 기술의 기본 구성 요소입니다.

기본 변수 선언

이 단계에서는 bash 스크립트에서 기본 변수를 선언하고 사용하는 방법을 배우게 됩니다. Linux 셸 스크립트의 변수를 사용하면 데이터를 임시로 저장하고 스크립트에서 나중에 참조할 수 있습니다.

먼저, 프로젝트를 위한 디렉토리를 만들고 해당 디렉토리로 이동해 보겠습니다.

mkdir -p ~/project
cd ~/project

이제 nano 텍스트 편집기를 사용하여 variables.sh라는 스크립트를 만듭니다.

nano ~/project/variables.sh

편집기 내에서 다음 내용을 입력합니다.

#!/bin/bash

## Declaring a basic variable
BALLOON_COLOR="red"

## Displaying the variable value
echo "The balloon color is: $BALLOON_COLOR"

이 스크립트에서는 BALLOON_COLOR라는 변수를 선언하고 값 "red"를 할당했습니다. 그런 다음 echo 명령은 이 변수의 값을 표시합니다.

nano 에서 파일을 저장하려면 Ctrl+O를 누른 다음 Enter를 눌러 확인합니다. nano 를 종료하려면 Ctrl+X를 누릅니다.

이제 스크립트를 실행 가능하게 만듭니다.

chmod +x ~/project/variables.sh

이 명령은 파일에 실행 권한을 부여하여 프로그램을 실행할 수 있도록 합니다.

마지막으로, 스크립트를 실행합니다.

./variables.sh

다음 출력을 볼 수 있습니다.

The balloon color is: red

이는 변수가 성공적으로 선언되었고 변수 이름 앞에 $ 기호를 사용하여 해당 값에 액세스할 수 있음을 보여줍니다.

정수 변수 선언

이 단계에서는 bash 스크립트에서 정수 변수를 선언하고 사용하는 방법을 배우게 됩니다. -i 플래그는 bash 에게 변수를 정수로 처리하도록 지시하며, 이는 숫자 연산에 유용할 수 있습니다.

variables.sh 스크립트를 다시 열어 편집합니다.

nano ~/project/variables.sh

정수 변수를 포함하도록 스크립트를 수정합니다.

#!/bin/bash

## Declaring a basic string variable
BALLOON_COLOR="red"

## Declaring an integer variable
declare -i BALLOON_SIZE=10

## Displaying both variables
echo "The balloon color is: $BALLOON_COLOR"
echo "The balloon size is: $BALLOON_SIZE inches"

## Performing arithmetic with the integer variable
declare -i DOUBLE_SIZE=BALLOON_SIZE*2
echo "Double the size would be: $DOUBLE_SIZE inches"

이 업데이트된 스크립트에서:

  1. 원래 문자열 변수 BALLOON_COLOR를 유지했습니다.
  2. declare -i 구문을 사용하여 새로운 정수 변수 BALLOON_SIZE를 추가했습니다.
  3. 정수 변수를 사용하여 산술 연산을 수행하는 방법을 시연했습니다.

Ctrl+OEnter로 파일을 저장한 다음 Ctrl+X로 nano 를 종료합니다.

이제 스크립트를 다시 실행합니다.

./variables.sh

다음 출력을 볼 수 있습니다.

The balloon color is: red
The balloon size is: 10 inches
Double the size would be: 20 inches

-i 선언을 통해 bash 는 변수를 정수로 처리해야 함을 인식하여 산술 연산을 가능하게 합니다. 이는 스크립트에서 카운터, 계산 및 숫자 처리에 특히 유용합니다.

배열 변수 사용

이 단계에서는 배열 변수를 선언하고 사용하는 방법을 배우게 됩니다. 배열을 사용하면 단일 변수 이름 아래에 여러 값을 저장할 수 있으며, 이는 관련 데이터의 컬렉션을 처리할 때 유용합니다.

스크립트를 다시 편집해 보겠습니다.

nano ~/project/variables.sh

배열 변수를 포함하도록 스크립트를 업데이트합니다.

#!/bin/bash

## Declaring a basic string variable
BALLOON_COLOR="red"

## Declaring an integer variable
declare -i BALLOON_SIZE=10

## Declaring an array variable
declare -a BALLOON_COLORS=("red" "green" "blue" "purple" "yellow")

## Displaying individual variables
echo "The balloon color is: $BALLOON_COLOR"
echo "The balloon size is: $BALLOON_SIZE inches"

## Displaying all array elements
echo "Available balloon colors are: ${BALLOON_COLORS[*]}"

## Displaying specific array elements
echo "The first color is: ${BALLOON_COLORS[0]}"
echo "The third color is: ${BALLOON_COLORS[2]}"

## Count of array elements
echo "Number of available colors: ${#BALLOON_COLORS[@]}"

이 업데이트된 스크립트에서:

  1. 기존 변수를 유지했습니다.
  2. declare -a 구문을 사용하여 배열 변수 BALLOON_COLORS를 추가했습니다.
  3. 배열 요소에 액세스하는 다양한 방법을 보여주었습니다.
    • ${BALLOON_COLORS[*]}는 모든 요소를 표시합니다.
    • ${BALLOON_COLORS[0]}은 첫 번째 요소에 액세스합니다 (bash 의 배열은 0 부터 시작하는 인덱스를 사용합니다).
    • ${#BALLOON_COLORS[@]}는 배열의 요소 수를 제공합니다.

Ctrl+OEnter로 파일을 저장한 다음 Ctrl+X로 nano 를 종료합니다.

이제 스크립트를 다시 실행합니다.

./variables.sh

다음 출력을 볼 수 있습니다.

The balloon color is: red
The balloon size is: 10 inches
Available balloon colors are: red green blue purple yellow
The first color is: red
The third color is: blue
Number of available colors: 5

배열은 관련 데이터의 컬렉션을 관리해야 할 때 강력합니다. 여러 값을 구성하고 개별적으로 또는 그룹으로 액세스할 수 있습니다. 이는 파일 이름, 사용자 정보 또는 구성 옵션과 같은 항목 목록을 관리하는 데 특히 유용합니다.

변수 조작 및 확장

이 단계에서는 다양한 방식으로 변수를 조작하고 확장하는 방법을 배우게 됩니다. 이러한 기술을 사용하면 새로운 변수를 생성하지 않고도 변수 값을 수정할 수 있으며, 이는 텍스트 처리 및 데이터 변환에 유용합니다.

스크립트를 다시 편집해 보겠습니다.

nano ~/project/variables.sh

변수 조작을 시연하도록 스크립트를 업데이트합니다.

#!/bin/bash

## Declaring basic variables
NAME="linux"
MESSAGE="Hello, world!"
FILE_PATH="/home/user/documents/report.txt"

echo "Original values:"
echo "NAME = $NAME"
echo "MESSAGE = $MESSAGE"
echo "FILE_PATH = $FILE_PATH"

echo -e "\nVariable manipulation examples:"

## Convert to uppercase
echo "NAME in uppercase: ${NAME^^}"

## Convert to lowercase
UPPER_NAME="LINUX"
echo "UPPER_NAME in lowercase: ${UPPER_NAME,,}"

## Get string length
echo "Length of MESSAGE: ${#MESSAGE}"

## Extract substring (starting at position 7, 5 characters)
echo "Substring of MESSAGE: ${MESSAGE:7:5}"

## Replace part of string
echo "Replace 'world' with 'Linux': ${MESSAGE/world/Linux}"

## Extract filename from path
echo "Filename from path: ${FILE_PATH##*/}"

## Extract directory from path
echo "Directory from path: ${FILE_PATH%/*}"

## Default value if variable is unset
UNSET_VAR=""
echo "Default value example: ${UNSET_VAR:-default value}"

이 스크립트는 변수를 조작하는 여러 가지 방법을 보여줍니다.

  1. ${NAME^^} - 대문자로 변환
  2. ${UPPER_NAME,,} - 소문자로 변환
  3. ${#MESSAGE} - 문자열 길이 가져오기
  4. ${MESSAGE:7:5} - 부분 문자열 추출 (위치 및 길이)
  5. ${MESSAGE/world/Linux} - 문자열의 일부를 바꾸기
  6. ${FILE_PATH##*/} - 시작 부분에서 가장 긴 일치 항목 제거 (파일 이름 추출)
  7. ${FILE_PATH%/*} - 끝에서 가장 짧은 일치 항목 제거 (디렉토리 추출)
  8. ${UNSET_VAR:-default value} - 변수가 설정되지 않은 경우 기본값 사용

Ctrl+OEnter로 파일을 저장한 다음 Ctrl+X로 nano 를 종료합니다.

이제 스크립트를 실행합니다.

./variables.sh

다음과 유사한 출력을 볼 수 있습니다.

Original values:
NAME = linux
MESSAGE = Hello, world!
FILE_PATH = /home/user/documents/report.txt

Variable manipulation examples:
NAME in uppercase: LINUX
UPPER_NAME in lowercase: linux
Length of MESSAGE: 13
Substring of MESSAGE: world
Replace 'world' with 'Linux': Hello, Linux!
Filename from path: report.txt
Directory from path: /home/user/documents
Default value example: default value

이러한 변수 조작 기술은 텍스트 데이터를 처리하고, 문자열에서 정보를 추출하며, 스크립트에서 기본값을 처리하는 데 매우 유용합니다.

환경 변수 및 변수 범위

이 마지막 단계에서는 환경 변수, 변수 범위 및 다른 프로세스에서 사용할 수 있도록 변수를 내보내는 방법에 대해 배우게 됩니다.

environment.sh라는 새 스크립트를 만듭니다.

nano ~/project/environment.sh

다음 내용을 추가합니다.

#!/bin/bash

## Displaying some common environment variables
echo "USER: $USER"
echo "HOME: $HOME"
echo "PATH: $PATH"
echo "PWD: $PWD"
echo "SHELL: $SHELL"

## Creating a local variable
LOCAL_VAR="This is a local variable"
echo "LOCAL_VAR: $LOCAL_VAR"

## Exporting a variable to make it available to child processes
export EXPORTED_VAR="This variable is exported"
echo "EXPORTED_VAR: $EXPORTED_VAR"

## Demonstrate how variables work in subshells
echo -e "\nVariable behavior in subshell:"
(
  echo "Inside subshell:"
  echo "  LOCAL_VAR: $LOCAL_VAR"
  echo "  EXPORTED_VAR: $EXPORTED_VAR"
  echo "  Creating subshell-only variable"
  SUBSHELL_VAR="This variable only exists in the subshell"
  echo "  SUBSHELL_VAR: $SUBSHELL_VAR"
)

echo -e "\nAfter subshell:"
echo "LOCAL_VAR: $LOCAL_VAR"
echo "EXPORTED_VAR: $EXPORTED_VAR"
echo "SUBSHELL_VAR: $SUBSHELL_VAR" ## This will be empty

## Creating a script to test export behavior
echo -e "\nCreating child script to test variable export..."
cat > ~/project/child_script.sh << 'EOF'
#!/bin/bash
echo "In child script:"
echo "EXPORTED_VAR: $EXPORTED_VAR"
echo "LOCAL_VAR: $LOCAL_VAR"
EOF

chmod +x ~/project/child_script.sh

## Run the child script
echo -e "\nRunning child script:"
./child_script.sh

이 스크립트는 다음을 보여줍니다.

  1. 일반적인 환경 변수 (USER, HOME, PATH 등)
  2. 로컬 변수와 내보낸 변수의 차이점
  3. 서브 쉘에서의 변수 동작 (괄호는 서브 쉘을 생성합니다)
  4. 내보낸 변수가 자식 프로세스에 어떻게 상속되는지

Ctrl+OEnter로 파일을 저장한 다음 Ctrl+X로 nano 를 종료합니다.

스크립트를 실행 가능하게 만듭니다.

chmod +x ~/project/environment.sh

이제 스크립트를 실행합니다.

./environment.sh

출력은 변수가 다른 컨텍스트에서 어떻게 동작하는지 보여줍니다.

  • 환경 변수는 시스템에서 미리 설정됩니다.
  • 로컬 변수는 현재 스크립트에서만 존재합니다.
  • 내보낸 변수는 자식 프로세스로 전달됩니다.
  • 서브 쉘에서 생성된 변수는 상위 쉘에서 사용할 수 없습니다.

자식 프로세스를 생성하거나 다른 스크립트를 소싱하는 복잡한 스크립트를 작성할 때는 변수 범위를 이해하는 것이 중요합니다. 이는 시스템의 다른 부분 간의 데이터 흐름을 관리하는 데 도움이 됩니다.

요약

이 랩에서는 Linux 쉘 스크립팅에서 변수 선언 및 조작의 기본 사항을 배웠습니다. 다음 내용을 살펴보았습니다.

  • 기본 변수 선언 및 사용
  • 정수 변수 및 산술 연산
  • 데이터 컬렉션을 저장하기 위한 배열 변수
  • 텍스트 처리를 위한 변수 조작 기술
  • 환경 변수 및 변수 범위

이러한 기술은 쉘 스크립팅의 기초를 형성하며 Linux 환경에서 작업을 자동화하는 데 필수적입니다. 변수를 사용하면 실행 중에 데이터를 저장하고 처리하여 보다 동적이고 유연한 스크립트를 만들 수 있습니다.

이제 이러한 기술을 사용하여 다음을 수행할 수 있습니다.

  • 스크립트에 구성 설정을 저장합니다.
  • 사용자 입력 및 파일 내용을 처리합니다.
  • 텍스트 데이터 및 파일 경로를 조작합니다.
  • 서로 다른 스크립트 및 프로세스 간에 데이터를 공유합니다.

Linux 쉘 스크립팅 여정을 계속 진행하면서 변수 사용을 마스터하면 강력하고 효율적인 자동화 도구를 만들 수 있는 많은 가능성이 열린다는 것을 알게 될 것입니다.