소개
이 실습에서는 리눅스 환경에서 셸 변수를 다루는 방법을 배웁니다. 셸 변수는 셸 스크립트 내에서 데이터를 저장하고 조작하는 데 필수적인 요소입니다. 변수에는 숫자, 문자, 문자열 등 다양한 유형의 값을 담을 수 있습니다. 이 과정은 변수의 생성, 참조 및 활용 방법을 안내하여 셸 스크립팅의 탄탄한 기초를 다질 수 있도록 도와줍니다.
셸 변수 생성하기
셸 변수는 = 기호를 사용하여 값을 할당함으로써 생성됩니다. 먼저 몇 가지 변수를 정의하는 간단한 셸 스크립트를 만들어 보겠습니다.
WebIDE(VS Code) 에서 터미널을 엽니다.
/home/labex/project디렉토리에variables.sh라는 새 파일을 생성합니다.touch /home/labex/project/variables.shWebIDE 에서
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.shWebIDE 에서
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.shWebIDE 에서
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) 하는 방법을 보여줍니다.
요약
이 실습을 통해 리눅스에서 셸 변수를 다루는 핵심적인 방법들을 익혔습니다. 변수를 생성하고 참조하는 방법부터, 명령의 출력을 변수에 할당하는 명령 치환, 변수를 이용한 산술 연산, 그리고 시스템 전반에서 사용되는 환경 변수 활용법까지 살펴보았습니다. 이러한 기술은 셸 스크립팅의 근간이 되며, 리눅스 시스템을 다루는 데 있어 매우 귀중한 자산이 될 것입니다.
이번 실습의 주요 학습 내용은 다음과 같습니다.
- 셸 변수 생성 및 참조 방법
- 상황에 따른 특수 변수 참조 구문 활용
- 명령 실행 결과를 캡처하기 위한 명령 치환 사용
- 셸 변수를 이용한 산술 연산 수행
- 환경 변수의 개념 및 관리 방법
리눅스와 셸 스크립팅을 계속 학습하면서, 변수는 데이터를 저장하고 조작하는 강력한 도구임을 기억하세요. 여러분의 스크립트에서 변수를 적극적으로 활용하여 코드를 더 유연하고 재사용 가능하게 만들어 보시기 바랍니다.



