소개
이 실습에서는 리눅스 환경에서 셸 변수를 다루는 방법을 배웁니다. 셸 변수는 셸 스크립트 내에서 데이터를 저장하고 조작하는 데 필수적인 요소입니다. 변수에는 숫자, 문자, 문자열 등 다양한 유형의 값을 담을 수 있습니다. 이 과정은 변수의 생성, 참조 및 활용 방법을 안내하여 셸 스크립팅의 탄탄한 기초를 다질 수 있도록 도와줍니다.
이 실습에서는 리눅스 환경에서 셸 변수를 다루는 방법을 배웁니다. 셸 변수는 셸 스크립트 내에서 데이터를 저장하고 조작하는 데 필수적인 요소입니다. 변수에는 숫자, 문자, 문자열 등 다양한 유형의 값을 담을 수 있습니다. 이 과정은 변수의 생성, 참조 및 활용 방법을 안내하여 셸 스크립팅의 탄탄한 기초를 다질 수 있도록 도와줍니다.
셸 변수는 = 기호를 사용하여 값을 할당함으로써 생성됩니다. 먼저 몇 가지 변수를 정의하는 간단한 셸 스크립트를 만들어 보겠습니다.
WebIDE(VS Code) 에서 터미널을 엽니다.
/home/labex/project 디렉토리에 variables.sh라는 새 파일을 생성합니다.
touch /home/labex/project/variables.sh
WebIDE 에서 variables.sh 파일을 열고 다음 내용을 입력합니다.
#!/bin/bash
PRICE_PER_APPLE=5
MyFirstLetters=ABC
greeting='Hello world!'
echo "Price per apple: $PRICE_PER_APPLE"
echo "My first letters: $MyFirstLetters"
echo "Greeting: $greeting"
이 스크립트에서는 세 개의 변수를 생성했습니다.
PRICE_PER_APPLE: 정수형 변수MyFirstLetters: 문자열 변수greeting: 여러 개의 공백을 포함한 문자열 변수파일을 저장합니다.
스크립트에 실행 권한을 부여합니다.
chmod +x /home/labex/project/variables.sh
스크립트를 실행합니다.
./variables.sh
다음과 같은 결과가 출력되어야 합니다.
Price per apple: 5
My first letters: ABC
Greeting: Hello world!
greeting 변수를 정의할 때 작은따옴표를 사용했기 때문에, 출력 시 변수 내의 추가 공백이 그대로 유지되는 것을 확인할 수 있습니다.
셸 변수를 참조할 때 특수한 구문을 사용해야 하는 몇 가지 상황이 있습니다. 이러한 사례들을 살펴보겠습니다.
WebIDE 에서 variables.sh 파일을 엽니다.
파일의 내용을 다음과 같이 수정합니다.
#!/bin/bash
PRICE_PER_APPLE=5
MyFirstLetters=ABC
greeting='Hello world!'
## 특수 문자 이스케이프 처리
echo "The price of an Apple today is: \$HK $PRICE_PER_APPLE"
## 모호성 제거
echo "The first 10 letters in the alphabet are: ${MyFirstLetters}DEFGHIJ"
## 공백 보존 확인
echo $greeting
echo "$greeting"
파일을 저장합니다.
스크립트를 실행합니다.
./variables.sh
다음과 같은 결과가 출력되어야 합니다.
The price of an Apple today is: $HK 5
The first 10 letters in the alphabet are: ABCDEFGHIJ
Hello world!
Hello world!
다음의 차이점에 주목하세요.
$ 기호를 문자 그대로 출력하기 위해 백슬래시로 이스케이프 처리했습니다.{}를 사용했습니다.명령 치환 (Command Substitution) 을 사용하면 실행한 명령의 결과값을 변수에 할당할 수 있습니다. 이는 명령을 $() 또는 백틱 (``) 으로 감싸서 수행합니다.
WebIDE 에서 variables.sh 파일을 엽니다.
파일 끝에 다음 내용을 추가합니다.
## 명령 치환 활용
CURRENT_DATE=$(date +"%Y-%m-%d")
echo "Today's date is: $CURRENT_DATE"
FILES_IN_DIR=$(ls)
echo "Files in the current directory:"
echo "$FILES_IN_DIR"
UPTIME=$(uptime -p)
echo "System uptime: $UPTIME"
파일을 저장합니다.
스크립트를 실행합니다.
./variables.sh
다음과 유사한 결과가 출력됩니다 (실제 값은 시스템 상태에 따라 다를 수 있습니다).
Today's date is: 2023-08-16
Files in the current directory:
variables.sh
System uptime: up 2 hours, 15 minutes
이 예시의 동작 원리는 다음과 같습니다.
$(date +"%Y-%m-%d")는 date 명령을 실행하고 그 결과를 캡처합니다.$(ls)는 ls 명령을 실행하고 그 결과를 캡처합니다.$(uptime -p)는 -p 옵션과 함께 uptime 명령을 실행하고 그 결과를 캡처합니다.셸 변수는 산술 연산에도 사용할 수 있습니다. Bash 는 산술 연산을 수행하기 위해 $((expression)) 구문을 제공합니다.
/home/labex/project 디렉토리에 arithmetic.sh라는 새 파일을 생성합니다.
touch /home/labex/project/arithmetic.sh
WebIDE 에서 arithmetic.sh 파일을 열고 다음 내용을 입력합니다.
#!/bin/bash
X=10
Y=5
## 덧셈
SUM=$((X + Y))
echo "Sum of $X and $Y is: $SUM"
## 뺄셈
DIFF=$((X - Y))
echo "Difference between $X and $Y is: $DIFF"
## 곱셈
PRODUCT=$((X * Y))
echo "Product of $X and $Y is: $PRODUCT"
## 나눗셈
QUOTIENT=$((X / Y))
echo "Quotient of $X divided by $Y is: $QUOTIENT"
## 나머지 연산
REMAINDER=$((X % Y))
echo "Remainder of $X divided by $Y is: $REMAINDER"
## 값 증가
X=$((X + 1))
echo "After incrementing, X is now: $X"
## 값 감소
Y=$((Y - 1))
echo "After decrementing, Y is now: $Y"
파일을 저장합니다.
스크립트에 실행 권한을 부여합니다.
chmod +x /home/labex/project/arithmetic.sh
스크립트를 실행합니다.
./arithmetic.sh
다음과 같은 결과가 출력되어야 합니다.
Sum of 10 and 5 is: 15
Difference between 10 and 5 is: 5
Product of 10 and 5 is: 50
Quotient of 10 divided by 5 is: 2
Remainder of 10 divided by 5 is: 0
After incrementing, X is now: 11
After decrementing, Y is now: 4
이 스크립트는 셸 변수를 활용한 다양한 산술 연산 방법을 보여줍니다.
환경 변수는 현재 셸 세션에서 실행되는 모든 프로세스가 접근할 수 있는 특수한 유형의 변수입니다. 자주 사용되는 환경 변수를 살펴보고 직접 만들어 보겠습니다.
/home/labex/project 디렉토리에 environment.sh라는 새 파일을 생성합니다.
touch /home/labex/project/environment.sh
WebIDE 에서 environment.sh 파일을 열고 다음 내용을 입력합니다.
#!/bin/bash
## 일반적인 환경 변수 출력
echo "Home directory: $HOME"
echo "Current user: $LOGNAME"
echo "Shell being used: $SHELL"
echo "Current PATH: $PATH"
## 새로운 환경 변수 생성
export MY_VARIABLE="Hello from my variable"
## 새 변수 출력
echo "My new variable: $MY_VARIABLE"
## 변수 범위를 확인하기 위해 자식 프로세스 생성
bash -c 'echo "MY_VARIABLE in child process: $MY_VARIABLE"'
## 환경 변수 제거
unset MY_VARIABLE
## 변수가 제거되었는지 확인
echo "MY_VARIABLE after unsetting: $MY_VARIABLE"
파일을 저장합니다.
스크립트에 실행 권한을 부여합니다.
chmod +x /home/labex/project/environment.sh
스크립트를 실행합니다.
./environment.sh
다음과 유사한 결과가 출력됩니다 (실제 값은 시스템 설정에 따라 다를 수 있습니다).
Home directory: /home/labex
Current user: labex
Shell being used: /bin/zsh
Current PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
My new variable: Hello from my variable
MY_VARIABLE in child process: Hello from my variable
MY_VARIABLE after unsetting:
이 스크립트는 기존 환경 변수에 접근하는 방법, 새로운 환경 변수를 생성 (export) 하고 제거 (unset) 하는 방법을 보여줍니다.
이 실습을 통해 리눅스에서 셸 변수를 다루는 핵심적인 방법들을 익혔습니다. 변수를 생성하고 참조하는 방법부터, 명령의 출력을 변수에 할당하는 명령 치환, 변수를 이용한 산술 연산, 그리고 시스템 전반에서 사용되는 환경 변수 활용법까지 살펴보았습니다. 이러한 기술은 셸 스크립팅의 근간이 되며, 리눅스 시스템을 다루는 데 있어 매우 귀중한 자산이 될 것입니다.
이번 실습의 주요 학습 내용은 다음과 같습니다.
리눅스와 셸 스크립팅을 계속 학습하면서, 변수는 데이터를 저장하고 조작하는 강력한 도구임을 기억하세요. 여러분의 스크립트에서 변수를 적극적으로 활용하여 코드를 더 유연하고 재사용 가능하게 만들어 보시기 바랍니다.