셸 변수 활용하기

ShellBeginner
지금 연습하기

소개

이 실습에서는 리눅스 환경에서 셸 변수를 다루는 방법을 배웁니다. 셸 변수는 셸 스크립트 내에서 데이터를 저장하고 조작하는 데 필수적인 요소입니다. 변수에는 숫자, 문자, 문자열 등 다양한 유형의 값을 담을 수 있습니다. 이 과정은 변수의 생성, 참조 및 활용 방법을 안내하여 셸 스크립팅의 탄탄한 기초를 다질 수 있도록 도와줍니다.

이 과정은 단계별 안내를 통해 학습과 실습을 돕는 가이드형 실습입니다. 각 단계를 주의 깊게 따라가며 직접 경험을 쌓아보세요. 통계에 따르면 이 실습은 초급 수준이며, 81%의 수료율과 학습자들로부터 99%의 긍정적인 평가를 받았습니다.

셸 변수 생성하기

셸 변수는 = 기호를 사용하여 값을 할당함으로써 생성됩니다. 먼저 몇 가지 변수를 정의하는 간단한 셸 스크립트를 만들어 보겠습니다.

  1. WebIDE(VS Code) 에서 터미널을 엽니다.

  2. /home/labex/project 디렉토리에 variables.sh라는 새 파일을 생성합니다.

    touch /home/labex/project/variables.sh
  3. 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: 여러 개의 공백을 포함한 문자열 변수
  4. 파일을 저장합니다.

  5. 스크립트에 실행 권한을 부여합니다.

    chmod +x /home/labex/project/variables.sh
  6. 스크립트를 실행합니다.

    ./variables.sh

    다음과 같은 결과가 출력되어야 합니다.

    Price per apple: 5
    My first letters: ABC
    Greeting: Hello        world!

    greeting 변수를 정의할 때 작은따옴표를 사용했기 때문에, 출력 시 변수 내의 추가 공백이 그대로 유지되는 것을 확인할 수 있습니다.

셸 변수 참조하기

셸 변수를 참조할 때 특수한 구문을 사용해야 하는 몇 가지 상황이 있습니다. 이러한 사례들을 살펴보겠습니다.

  1. WebIDE 에서 variables.sh 파일을 엽니다.

  2. 파일의 내용을 다음과 같이 수정합니다.

    #!/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"
  3. 파일을 저장합니다.

  4. 스크립트를 실행합니다.

    ./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) 을 사용하면 실행한 명령의 결과값을 변수에 할당할 수 있습니다. 이는 명령을 $() 또는 백틱 (``) 으로 감싸서 수행합니다.

  1. WebIDE 에서 variables.sh 파일을 엽니다.

  2. 파일 끝에 다음 내용을 추가합니다.

    ## 명령 치환 활용
    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"
  3. 파일을 저장합니다.

  4. 스크립트를 실행합니다.

    ./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)) 구문을 제공합니다.

  1. /home/labex/project 디렉토리에 arithmetic.sh라는 새 파일을 생성합니다.

    touch /home/labex/project/arithmetic.sh
  2. 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"
  3. 파일을 저장합니다.

  4. 스크립트에 실행 권한을 부여합니다.

    chmod +x /home/labex/project/arithmetic.sh
  5. 스크립트를 실행합니다.

    ./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

    이 스크립트는 셸 변수를 활용한 다양한 산술 연산 방법을 보여줍니다.

환경 변수 사용하기

환경 변수는 현재 셸 세션에서 실행되는 모든 프로세스가 접근할 수 있는 특수한 유형의 변수입니다. 자주 사용되는 환경 변수를 살펴보고 직접 만들어 보겠습니다.

  1. /home/labex/project 디렉토리에 environment.sh라는 새 파일을 생성합니다.

    touch /home/labex/project/environment.sh
  2. 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"
  3. 파일을 저장합니다.

  4. 스크립트에 실행 권한을 부여합니다.

    chmod +x /home/labex/project/environment.sh
  5. 스크립트를 실행합니다.

    ./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) 하는 방법을 보여줍니다.

요약

이 실습을 통해 리눅스에서 셸 변수를 다루는 핵심적인 방법들을 익혔습니다. 변수를 생성하고 참조하는 방법부터, 명령의 출력을 변수에 할당하는 명령 치환, 변수를 이용한 산술 연산, 그리고 시스템 전반에서 사용되는 환경 변수 활용법까지 살펴보았습니다. 이러한 기술은 셸 스크립팅의 근간이 되며, 리눅스 시스템을 다루는 데 있어 매우 귀중한 자산이 될 것입니다.

이번 실습의 주요 학습 내용은 다음과 같습니다.

  • 셸 변수 생성 및 참조 방법
  • 상황에 따른 특수 변수 참조 구문 활용
  • 명령 실행 결과를 캡처하기 위한 명령 치환 사용
  • 셸 변수를 이용한 산술 연산 수행
  • 환경 변수의 개념 및 관리 방법

리눅스와 셸 스크립팅을 계속 학습하면서, 변수는 데이터를 저장하고 조작하는 강력한 도구임을 기억하세요. 여러분의 스크립트에서 변수를 적극적으로 활용하여 코드를 더 유연하고 재사용 가능하게 만들어 보시기 바랍니다.