셸 스크립팅 · 6 min read · Nov 13, 2025

셸 스크립팅 3부: 셸 스크립트의 결정 제어 구조

안녕하세요! 우리는 이미 이 튜토리얼의 이전 부분(1부 및 2부)에서 입력 수락, 산술 연산을 통한 데이터 처리 및 출력 생성 및 표시와 같은 셸 스크립팅의 기본을 다루었습니다. 이번 부분에서는 프로그래밍 언어의 더 고급 주제인 프로그램에서의 결정 내리기를 더 깊이 다룰 것입니다. 하지만 이번에는 bash 셸을 사용하여 진행하겠습니다. 시작해봅시다!

소개

오늘날 대부분의 프로그래밍 언어는 우리가 설정한 조건에 따라 결정을 내릴 수 있습니다. 조건은 Boolean 값인 true 또는 false로 평가되는 표현식입니다. 모든 프로그래머는 자신의 프로그램에 넣는 결정과 논리에 따라 프로그램을 스마트하게 만들 수 있습니다. bash 셸은 if 및 switch (case) 결정 문을 지원합니다.

If 문

If는 프로그래머가 지정한 조건에 따라 프로그램에서 결정을 내릴 수 있게 해주는 문입니다. 조건이 충족되면 프로그램은 특정 코드 라인을 실행하고, 그렇지 않으면 프로그래머가 지정한 다른 작업을 실행합니다. 다음은 bash 셸에서 지원되는 if 문 구문입니다.

일반 구문

단일 결정:

if   
 then  
     ### 코드 시리즈가 여기에 들어갑니다  
 fi

이중 결정:

if   
 then  
     ### 조건이 충족되면 코드 시리즈  
 else  
     ### 조건이 충족되지 않으면 코드 시리즈  
 fi

다중 if 조건:

if   
 then  
     ### condition1에 대한 코드 시리즈  
 elif   
 then  
     ### condition2에 대한 코드 시리즈  
 else  
     ### 조건이 충족되지 않으면 코드 시리즈  
 fi

단일 괄호 구문

if [ condition ]  
 then  
     ### 코드 시리즈가 여기에 들어갑니다  
 fi

이중 괄호 구문

if ((condition))  
 then  
     ### 코드 시리즈가 여기에 들어갑니다  
 fi

단일 괄호 구문은 bash 셸에서 지원되는 가장 오래된 구문입니다. 이는 Linux의 모든 조건문과 함께 사용됩니다. 한편, 이중 괄호 구문은 프로그래머에게 친숙한 구문을 제공하기 위해 숫자 기반 조건문에 사용됩니다. 모든 유형의 if 문은 작업을 실행하기 위해 지정된 조건이 필요합니다.

Linux의 조건문

조건문은 결정 제어 문과 함께 사용됩니다. bash 셸에서 사용할 수 있는 다양한 유형의 조건문이 있으며, 가장 일반적인 것은 파일 기반, 문자열 기반 및 산술 기반 조건입니다.

파일 기반 조건

파일 기반 조건은 단항 표현식이며 파일의 상태를 검사하는 데 자주 사용됩니다. 다음 목록은 bash 셸에서 가장 일반적으로 사용되는 파일 기반 조건을 보여줍니다.

연산자설명
-a file파일이 존재하면 true를 반환
-b file파일이 존재하고 블록 특수 파일이면 true를 반환
-c file파일이 존재하고 문자 특수 파일이면 true를 반환
-d file파일이 존재하고 디렉토리이면 true를 반환
-e file파일이 존재하면 true를 반환
-r file파일이 존재하고 읽을 수 있으면 true를 반환
-s file파일이 존재하고 크기가 0보다 크면 true를 반환
-w file파일이 존재하고 쓸 수 있으면 true를 반환
-x file파일이 존재하고 실행 가능하면 true를 반환
-N file파일이 존재하고 마지막으로 읽은 이후 수정되었으면 true를 반환

파일 기반 결정 만들기

bash 스크립트에서 파일 기반 결정을 구성하는 방법을 설명하는 예제를 살펴보겠습니다. 이 예제에서는 홈 디렉토리에 파일이 존재하는지 여부를 결정하는 스크립트를 생성합니다.

#!/bin/bash  
   
cd   
 ls  
 if [ -e sample.sh ]   
 then   
     echo "파일이 존재합니다!"   
 else   
     echo "파일이 존재하지 않습니다"   
 fi

파일 기반 결정 만들기

이 예제에서는 cd 명령을 사용하여 현재 활성 디렉토리에 관계없이 셸이 홈 디렉토리로 돌아가도록 했습니다. 또한 ls 명령은 디렉토리의 파일 목록을 표시하여 파일이 실제로 존재하는지 확인하는 데 사용됩니다. 보시다시피, 스크립트는 sample.sh가 홈 디렉토리에 있기 때문에 “파일이 존재합니다!”라는 텍스트를 출력합니다.

참고: 셸 컴파일러는 특히 공백과 관련하여 구문에 대해 매우 엄격합니다. if와 여는 괄호 사이, 괄호와 조건 사이에 공백이 있어야 합니다.

이제 사용자에게 스크립트 이름을 입력하도록 허용하고 주어진 파일의 권한을 결정하여 코드를 더 동적으로 개선해 보겠습니다.

#!/bin/bash  
   
cd  
 ls -l   
 read -p "파일 이름을 입력하세요: " filename  
 if [ -e $filename ]   
 then   
     echo "파일이 존재합니다!"   
     if [ -r $filename ]  
     then   
          status="읽기 가능 "   
     fi   
     if [ -w $filename ]   
     then   
          status=$status"쓰기 가능 "   
     fi   
     if [ -x $filename ]   
     then   
          status=$status"실행 가능"   
     fi   
      echo "파일 권한: "$status   
 else   
     echo "파일이 존재하지 않습니다"   
 fi

동적 파일 기반 결정 만들기

문자열 기반 조건

사용자 입력 문자열에 따라 결정을 내리는 것도 bash 셸에서 가능합니다. 문자열 기반 조건은 지정된 조건이 충족되면 true를 반환하고 그렇지 않으면 false를 반환하는 이진 표현을 반환합니다. 다음은 일반적으로 사용되는 문자열 기반 조건 연산자입니다.

연산자설명
==문자열이 같으면 true를 반환
!=문자열이 다르면 true를 반환
-n테스트할 문자열이 null이 아니면 true를 반환
-z테스트할 문자열이 null이면 true를 반환

문자열 기반 조건문을 사용하는 샘플 스크립트를 만들어 보겠습니다. 이 스크립트는 사용자가 두 개의 문자열을 입력하고 문자열 중 하나가 null인지, 두 문자열이 같거나 다르다는 것을 평가합니다.

#!/bin/bash   
   
read -p "첫 번째 문자열: " str1   
 read -p "두 번째 문자열: " str2   
 if [ -z "$str1" ]   
 then   
     echo "첫 번째 문자열은 null입니다"   
 elif [ -z "$str2" ]   
 then   
     echo "두 번째 문자열은 null입니다"   
 else   
     if [ $str1 == $str2 ]   
     then   
          echo "문자열이 같습니다"   
     else   
         echo "문자열이 다릅니다"   
     fi   
 fi

문자열 기반 조건문

산술 기반 조건

셸은 산술 기반 조건을 선언하는 여러 가지 방법을 제공합니다. 첫 번째는 구식 단일 괄호 구문과 함께 사용할 수 있는 기억 장치를 사용하는 것이고, 다른 하나는 이중 괄호와 함께 사용할 수 있는 수학 친화적인 기호를 사용하는 것입니다.

다음은 셸에서 사용할 수 있는 산술 기반 조건문을 위한 기억 장치 목록입니다.

연산자사용법/설명
-eq같음
-ge크거나 같음
-gt
-le작거나 같음
-lt작음
-ne같지 않음

사용자로부터 정수를 입력받고 해당 정수가 0인지, 음수인지, 홀수인지 또는 짝수인지를 결정하는 스크립트를 만들어 보겠습니다.

#!/bin/bash   
   
read -p "정수를 입력하세요: " int1   
 if [ $int1 -eq 0 ]   
 then   
     echo "제로"   
 elif [ $int1 -lt 0 ]   
 then   
     echo "음수"   
 else   
     if [ $((int1%2)) -eq 0 ]   
     then   
         echo "짝수"   
     else   
         echo "홀수"   
     fi   
 fi

산술 기반 조건문

이중 괄호 구문에 대한 산술 연산자:

연산자사용법/설명
==같음
>=크거나 같음
>
<=작거나 같음
<작음
!=같지 않음

이제 이전 스크립트를 재구성하고 이중 괄호 구문을 사용해 보겠습니다:

#!/bin/bash  
  
read -p "정수를 입력하세요: " int1   
 if (( $int1 == 0 ))   
 then   
     echo "제로"   
 elif (( $int1 < 0 ))   
 then   
     echo "음수"   
 else   
     if (( $((int1%2)) == 0 ))   
     then   
         echo "짝수"   
     else   
         echo "홀수"   
     fi   
 fi

산술 기반 연산자

Switch 문

switch 문은 셸 스크립팅에서 또 다른 종류의 조건문입니다. 이는 프로그래머가 if 조건문에 비해 변수를 여러 값과 비교할 수 있게 해줍니다. switch 문 구문은 다음과 같습니다:

 case  in  
 )  
     ##pattern1에 대한 코드 시리즈  
     ;;  
 )  
     ##pattern2에 대한 코드 시리즈  
     ;;  
 )  
     ##patternN에 대한 코드 시리즈  
     ;;  
 *)   
     ##기본 문  
 esac  
 

패턴은 변수의 가능한 값입니다. 각 패턴은 패턴의 break 문 역할을 하는 이중 세미콜론으로 구분됩니다. switch 문은 esac 문으로 닫힙니다.

#!/bin/bash   
 clear   
 read -p "정수1: " int1   
 read -p "정수2: " int2   
 echo "======================"   
 printf "메뉴: 
[a] 덧셈
[b] 뺄셈
[c] 곱셈
[d] 나눗셈
"   
 echo "======================"   
 read -p "당신의 선택: " choice   
 res=0   
 case $choice in   
 a)   
     res=$((int1+int2))   
 ;;   
 b)   
     res=$((int1-int2))   
 ;;   
 c)   
     res=$((int1*int2))   
 ;;   
 d)   
     res=$((int1/int2))   
 ;;   
 *)   
     echo "잘못된 입력"   
 esac   
 echo "결과는: " $res

리눅스의 switch 문

결론

bash 셸은 프로그래머에게 유용한 도구를 많이 제공합니다. 오늘날 대부분의 프로그래밍 언어와 마찬가지로 조건 결정을 내릴 수 있어 셸 스크립트를 더 상호작용적이고 스마트하게 만듭니다. 다음 시리즈에서는 반복 제어 구조를 다룰 예정입니다. 다음 시간까지.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.