Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

Bash 스크립트에서 if... else 조건문 활용하기: 초보자를 위한 예제 가이드

Bash 스크립팅은 리눅스 환경에서 개발자가 반복적인 작업을 자동화하는 데 필수적인 도구입니다.

Bash 스크립트는 로컬 개발 작업(배포용 파일 업로드, 앱 컴파일, 이미지 일괄 리사이즈 등)뿐만 아니라 서버 측 작업(예약된 이메일 발송, 주기적인 데이터 수집, 기기 알림 전송 등)을 자동화하는 데에도 활용할 수 있습니다.

실제 작업을 하다 보면 어떤 작업이나 변수의 결과에 따라 다른 동작을 실행해야 하는 경우가 자주 발생합니다. 바로 이럴 때 if … else 문이 유용합니다. Bash 스크립트에서 이러한 의사 결정 과정을 '조건문(Conditional)'이라고 부릅니다.

이 튜토리얼에서는 Bash의 if… else 문의 상세한 사용법과 실제 예제를 소개합니다.

if 문 사용하기

기본적인 if 문은 주어진 조건이 참일 경우에만 포함된 동작을 실행하며, 구조는 다음과 같습니다:

if CONDITIONS; then
    ACTIONS
fi

전체 예제입니다:

#!/bin/bash
if [ 2 -lt 3 ]; then
    echo "2 is less than 3!"
fi

주목해야 할 사항은 다음과 같습니다:

  • 모든 Bash 스크립트는 #!/bin/bash 라인으로 시작해야 합니다
  • -lt 연산자는 첫 번째 값이 두 번째 값보다 작은지 검사합니다. 반대로 두 번째 값이 더 큰지 확인하려면 -gt를 사용합니다
  • 더 많은 논리 연산자 목록은 아래에서 계속 설명합니다.
  • echo 명령어를 사용하여 명령줄에 텍스트를 출력합니다
  • if 문은 항상 fi로 종료해야 합니다

else 문 사용하기

조건이 참일 때 특정 동작을 수행하고, 오직 그 조건이 거짓일 때만 다른 동작을 수행하고 싶다면 else 문을 사용하면 됩니다:

#!/bin/bash
echo -n "Enter number: "
read number
if [ $number -lt 3 ]; then
    echo "$number is less than 3!"
else
    echo "$number is not less than 3!"
fi

주목해야 할 사항은 다음과 같습니다:

  • 값 비교와 텍스트 출력에는 위와 동일한 요소들을 사용합니다
  • read 명령어를 사용하여 사용자 입력을 받습니다
  • 변수를 사용하여 값을 저장하고 나중에 활용합니다

elif(Else If) 문 사용하기

여러 개의 조건을 순차적으로 검사하고, 각 조건이 참일 때 서로 다른 동작을 수행하려면 elif(else if) 문을 사용합니다:

#!/bin/bash
echo -n "Enter number: "
read number
if [ $number -lt 3 ]; then
    echo "$number is less than 3!"
elif [ $number -eq 3]; then
    echo "$number is equal to 3!"
else
    echo "$number is not less than 3!"
fi

if 문에서 여러 조건 조합하기

여러 조건을 동시에 검사해야 할 경우, &&(AND) 연산자와 ||(OR) 연산자를 사용하여 동작 실행 여부를 판단할 수 있습니다:

#!/bin/bash
echo -n "Enter number: "
read number
if [[ $number -lt 3 ]] && [[ $number -lt 0 ]]; then
    echo "$number is less than three and is negative"
elif [[ $number -lt 3 ]] || [[ $number -gt 6 ]]; then
    echo "$number is not negative, but is less than 3 or greater than 6"
else
    echo "$number is greater than3 and less than 6"
fi

if 문 중첩하기

if 문 안에 또 다른 if 문을 중첩해서 넣을 수도 있습니다:

#!/bin/bash
echo -n "Enter number: "
read number
if [$number -gt 3]; then
    echo "$number is greater than 3"
    if [$number -gt 6]; then
        echo "$number is also greater than 6"
    else
        echo "$number is not also greater than 6"
    fi
fi

비교 연산자 정리

앞선 예제에서 -lt(미만), -gt(초과), =(같음) 연산자를 사용했습니다. 그 외에도 자주 사용되는 논리 연산자들이 있습니다:

숫자 비교

$number1 -eq $number2 : 두 변수가 같으면 true 반환
$number1 -gt $number2 : $number1이 $number2보다 크면 true 반환
$number1 -ge $number2 : $number1이 $number2보다 크거나 같으면 true 반환
$number1 -lt $number2 : $number1이 $number2보다 작으면 true 반환
$number1 -le $number2 : $number1이 $number2보다 작거나 같으면 true 반환

문자열 비교

$string1 = $string2 : $string1과 $string2가 같으면 true 반환
$string1 != $string2 : $string1과 $string2가 같지 않으면 true 반환

위에서 볼 수 있듯이, 비교 표현식의 결과를 반전시키려면 앞에 !(NOT) 연산자를 붙이면 됩니다. 예를 들어 *!= 는 NOT EQUALS(같지 않음)를 의미합니다.

문자열을 비교할 때는 공백이 Bash 스크립트에서 잘못 해석되지 않도록 항상 큰따옴표로 감싸야 합니다.

문자열을 담고 있는 변수 역시 잘못 해석되지 않도록 따옴표로 감싸는 것이 좋습니다:

#!/bin/bash
echo -n "Enter string: "
read string
if ["$string" = "hello there!"]
    echo "You said hello there!"
fi

파일 및 디렉터리 상태 확인하기

Bash의 if 문은 파일이나 디렉터리의 존재 여부와 속성을 확인하는 데에도 유용하게 사용됩니다:

-d $filepath : $filepath가 존재하고 디렉터리이면 true 반환
-e $filepath : 파일이든 디렉터리든 $filepath가 존재하면 true 반환
-f $filepath : $filepath가 존재하고 일반 파일이면 true 반환
-h $filepath : $filepath가 존재하고 심볼릭 링크이면 true 반환
-r $filepath : $filepath가 존재하고 읽기 가능하면 true 반환
-w $filepath : $filepath가 존재하고 쓰기 가능하면 true 반환
-x $filepath : $filepath가 존재하고 실행 가능하면 true 반환

마무리

직접 Bash 스크립트를 작성하면 엄청난 시간을 절약할 수 있으며, 기본 구성 요소만 익히면 생각보다 어렵지 않게 작성할 수 있습니다.

if… else 문을 활용하면 사용자 입력이나 파일 상태에 따라 스크립트의 동작 방식을 유연하게 제어할 수 있습니다.

더 많은 내용은 저희의 다른 Bash 관련 글들도 확인해 보세요!