본문 바로가기
프로그래밍/Linux

[Linux] 쉘 스크립트(Shell script) 1편 - 기본, 변수와 환경변수, 조건문과 반복문

by HI_Ai 2023. 8. 31.
반응형

쉘 스크립트는 일련의 명령어를 포함하는 텍스트 파일로, 이 파일을 실행하면 내부의 명령어들이 순차적으로 실행됩니다. 리눅스나 UNIX 시스템에서 자동화된 작업을 수행하거나 반복적인 작업을 간소화하는 데 쉘 스크립트가 널리 사용됩니다. 쉘 스크립트의 매력은 그 간결함과 높은 활용도에 있습니다. 특히 시스템 관리자나 개발자는 리눅스 시스템에서 작업을 자동화하거나 빠르게 처리하기 위해 쉘 스크립트를 활용합니다.

쉘 스크립트의 구조


쉘 스크립트는 기본적으로 일련의 명령어를 포함하는 텍스트 파일입니다. 스크립트는 보통 .sh 확장자를 가지며, 쉘 명령어를 담고 있습니다. 스크립트의 첫 줄은 shebang (#!)으로 시작되는데, 이는 스크립트가 어떤 인터프리터를 사용해서 실행될지를 나타냅니다. 예를 들어, #!/bin/bash는 해당 스크립트가 Bash 쉘에서 실행될 것임을 나타냅니다.

첫 번째 쉘 스크립트를 만들어봅시다.

텍스트 에디터(nano, vi)를 열고, 다음 내용을 입력합니다:

#!/bin/bash
echo "안녕하세요!"

파일을 hello.sh라는 이름으로 저장합니다. 이후, "chmod +x hello.sh" 명령어로 스크립트에 실행 권한을 부여하고, ./hello.sh로 스크립트를 실행합니다.
출력된 메시지로, 스크립트가 올바르게 작동하는 것을 확인할 수 있습니다.

 

쉘 스크립트는 인자를 받아 처리할 수 있습니다. 이 인자들은 스크립트 내에서 $1, $2, $3 등으로 참조됩니다. $0은 스크립트 자체의 이름을 참조합니다.

 

예를 들어, ./test.sh 2 5로 스크립트를 실행하면:

#!/bin/bash

echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"

위의 스크립트를 ./test.sh 2 5로 실행하면, 결과는 다음과 같습니다:

Script name: ./test.sh
First argument: 2
Second argument: 5

또한 $#는 스크립트에 전달된 인자의 개수를 나타내고, $* 또는 $@는 모든 인자를 나타냅니다.

 


1. 변수와 환경변수

1.1 변수 (Local Variables)

변수는 데이터나 정보를 저장하는 메모리 공간에 이름을 붙인 것입니다. 쉘 스크립트에서 변수를 사용하면 명령어와 데이터 간에 쉽게 상호 작용할 수 있습니다.

변수를 생성하고 값을 할당하는 방법은 매우 간단합니다. 등호(=) 앞뒤로 공백 없이 작성합니다.
변수의 값을 참조하려면 $변수이름 형식을 사용하거나 ${변수이름} 형식을 사용합니다.

name="John Doe"
echo $name

 

1.2 환경 변수 (Environment Variables)

환경 변수는 사용자의 프로파일, 시스템 설정, 쉘 세션 등 전반적인 환경에서 사용되는 변수입니다. 대부분의 환경 변수는 대문자로 표기됩니다.

주요 환경 변수:
PATH: 실행 파일의 경로를 나타냅니다.
HOME: 현재 사용자의 홈 디렉토리를 나타냅니다.
USER: 현재 사용자의 이름을 나타냅니다.


환경 변수도 일반 변수와 마찬가지로 $변수이름 형식으로 접근할 수 있습니다.

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

환경 변수를 설정하려면 export 명령어를 사용합니다.

export NEW_VARIABLE="This is a new variable"
echo NEW_VARIABLE
This is a new variable


1.3 변수와 환경 변수의 차이

일반 변수는 선언한 쉘 스크립트나 세션에서만 사용됩니다. 그에 반해 환경 변수는 자식 프로세스들에게도 전달되며, 전체 시스템에서 참조할 수 있습니다. 일반 변수는 현재 쉘 세션에서만 저장됩니다. 환경 변수는 사용자의 프로파일 (예: ~/.bashrc 또는 ~/.profile)에 저장되어 쉘 시작 시 자동으로 로드될 수 있습니다. 환경 변수는 대부분 대문자로 표기됩니다. 일반 변수는 사용자가 정한 대로 작성됩니다.

 


2. 조건문과 반복문

쉘 스크립트에서 로직을 구성하는 가장 기본적인 구조 중 하나는 조건문과 반복문입니다. 사용자의 입력, 파일의 존재 여부, 프로세스의 상태 등 다양한 조건에 따라 다른 동작을 수행하게 할 수 있습니다.

 

2.1 if, elif, else 구문

if, elif, else는 쉘 스크립트에서 조건을 검사할 때 사용하는 기본적인 구문입니다.

if [ 조건 ]; then
    # 조건이 참일 경우 실행할 명령
elif [ 다른 조건 ]; then
    # 다른 조건이 참일 경우 실행할 명령
else
    # 위의 모든 조건이 거짓일 경우 실행할 명령

예시 :

number=10

if [ $number -eq 10 ]; then
    echo "Number is 10."
elif [ $number -lt 10 ]; then
    echo "Number is less than 10."
else
    echo "Number is greater than 10."
fi

 

2.2 for 루프

for 루프는 목록에 있는 각 항목에 대해 명령을 반복적으로 실행합니다.

for variable in item1 item2 ... itemN
do
    # 각 항목에 대해 실행할 명령
done

예시 :

for i in 1 2 3 4 5
do
   echo "Looping ... number $i"
done


2.3 while 루프

while 루프는 주어진 조건이 참인 동안 명령을 반복적으로 실행합니다.

while [ 조건 ]
do
    # 조건이 참인 동안 실행할 명령
done

예시 :

count=1
while [ $count -le 5 ]
do
   echo "Count is $count"
   count=$((count + 1))
done


2.4 case 문의 사용법

case 문은 변수의 값에 따라 다양한 동작을 수행하게 합니다.

case 변수 in
pattern1)
    # pattern1과 일치할 때 실행할 명령
    ;;
pattern2)
    # pattern2와 일치할 때 실행할 명령
    ;;
*)
    # 아무 패턴과도 일치하지 않을 때 실행할 명령
    ;;
esac

예시 :

word="b"

case $word in
    a)
        echo "A"
        ;;
    b)
        echo "B"
        ;;
    *)
        echo "Neither A nor B."
        ;;
esac

 

반응형