소개
이 랩에서는 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"
이 업데이트된 스크립트에서:
- 원래 문자열 변수
BALLOON_COLOR를 유지했습니다. declare -i구문을 사용하여 새로운 정수 변수BALLOON_SIZE를 추가했습니다.- 정수 변수를 사용하여 산술 연산을 수행하는 방법을 시연했습니다.
Ctrl+O 및 Enter로 파일을 저장한 다음 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[@]}"
이 업데이트된 스크립트에서:
- 기존 변수를 유지했습니다.
declare -a구문을 사용하여 배열 변수BALLOON_COLORS를 추가했습니다.- 배열 요소에 액세스하는 다양한 방법을 보여주었습니다.
${BALLOON_COLORS[*]}는 모든 요소를 표시합니다.${BALLOON_COLORS[0]}은 첫 번째 요소에 액세스합니다 (bash 의 배열은 0 부터 시작하는 인덱스를 사용합니다).${#BALLOON_COLORS[@]}는 배열의 요소 수를 제공합니다.
Ctrl+O 및 Enter로 파일을 저장한 다음 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}"
이 스크립트는 변수를 조작하는 여러 가지 방법을 보여줍니다.
${NAME^^}- 대문자로 변환${UPPER_NAME,,}- 소문자로 변환${#MESSAGE}- 문자열 길이 가져오기${MESSAGE:7:5}- 부분 문자열 추출 (위치 및 길이)${MESSAGE/world/Linux}- 문자열의 일부를 바꾸기${FILE_PATH##*/}- 시작 부분에서 가장 긴 일치 항목 제거 (파일 이름 추출)${FILE_PATH%/*}- 끝에서 가장 짧은 일치 항목 제거 (디렉토리 추출)${UNSET_VAR:-default value}- 변수가 설정되지 않은 경우 기본값 사용
Ctrl+O 및 Enter로 파일을 저장한 다음 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
이 스크립트는 다음을 보여줍니다.
- 일반적인 환경 변수 (
USER,HOME,PATH등) - 로컬 변수와 내보낸 변수의 차이점
- 서브 쉘에서의 변수 동작 (괄호는 서브 쉘을 생성합니다)
- 내보낸 변수가 자식 프로세스에 어떻게 상속되는지
Ctrl+O 및 Enter로 파일을 저장한 다음 Ctrl+X로 nano 를 종료합니다.
스크립트를 실행 가능하게 만듭니다.
chmod +x ~/project/environment.sh
이제 스크립트를 실행합니다.
./environment.sh
출력은 변수가 다른 컨텍스트에서 어떻게 동작하는지 보여줍니다.
- 환경 변수는 시스템에서 미리 설정됩니다.
- 로컬 변수는 현재 스크립트에서만 존재합니다.
- 내보낸 변수는 자식 프로세스로 전달됩니다.
- 서브 쉘에서 생성된 변수는 상위 쉘에서 사용할 수 없습니다.
자식 프로세스를 생성하거나 다른 스크립트를 소싱하는 복잡한 스크립트를 작성할 때는 변수 범위를 이해하는 것이 중요합니다. 이는 시스템의 다른 부분 간의 데이터 흐름을 관리하는 데 도움이 됩니다.
요약
이 랩에서는 Linux 쉘 스크립팅에서 변수 선언 및 조작의 기본 사항을 배웠습니다. 다음 내용을 살펴보았습니다.
- 기본 변수 선언 및 사용
- 정수 변수 및 산술 연산
- 데이터 컬렉션을 저장하기 위한 배열 변수
- 텍스트 처리를 위한 변수 조작 기술
- 환경 변수 및 변수 범위
이러한 기술은 쉘 스크립팅의 기초를 형성하며 Linux 환경에서 작업을 자동화하는 데 필수적입니다. 변수를 사용하면 실행 중에 데이터를 저장하고 처리하여 보다 동적이고 유연한 스크립트를 만들 수 있습니다.
이제 이러한 기술을 사용하여 다음을 수행할 수 있습니다.
- 스크립트에 구성 설정을 저장합니다.
- 사용자 입력 및 파일 내용을 처리합니다.
- 텍스트 데이터 및 파일 경로를 조작합니다.
- 서로 다른 스크립트 및 프로세스 간에 데이터를 공유합니다.
Linux 쉘 스크립팅 여정을 계속 진행하면서 변수 사용을 마스터하면 강력하고 효율적인 자동화 도구를 만들 수 있는 많은 가능성이 열린다는 것을 알게 될 것입니다.



