쉘 조건문 활용하기

LinuxBeginner
지금 연습하기

소개

이 실습에서는 쉘 프로그래밍에서 논리적 의사결정을 내리는 데 필수적인 조건문 사용법을 배웁니다. if-else 문의 기본 문법부터 숫자와 문자열을 비교하여 조건을 평가하는 방법까지 폭넓게 다룹니다. 실습을 마치면 다양한 상황에 맞춰 스스로 판단하고 동작하는 쉘 스크립트를 작성할 수 있는 능력을 갖추게 될 것입니다.

이 과정은 학습과 연습을 돕기 위해 단계별 지침을 제공하는 가이드형 실습입니다. 각 단계를 주의 깊게 따라가며 직접 실습해 보시기 바랍니다. 통계에 따르면 이 실습은 초급 수준이며, 97%의 높은 수료율과 학습자들로부터 100%의 긍정적인 평가를 기록하고 있습니다.

첫 번째 If 문 만들기

먼저 NAME이라는 변수의 값이 "John"인지 확인하는 간단한 if 문을 만들어 보겠습니다.

우선 WebIDE 에서 터미널을 엽니다. 기본적으로 /home/labex/project 디렉토리에 위치해 있을 것입니다. 현재 위치가 확실하지 않다면 pwd 명령어로 확인할 수 있습니다.

다음 명령어를 입력하여 if.sh라는 새 파일을 생성합니다.

touch if.sh

이 명령어는 현재 디렉토리에 if.sh라는 이름의 빈 파일을 만듭니다.

이제 WebIDE 왼쪽의 파일 탐색기에서 if.sh 파일을 클릭하여 엽니다.

파일에 다음 내용을 입력합니다.

#!/bin/bash

NAME="John"
if [ "$NAME" = "John" ]; then
  echo "The name is John"
fi

스크립트의 구성을 살펴보겠습니다.

  1. #!/bin/bash: "쉬뱅 (shebang)" 라인이라고 부릅니다. 시스템에 이 스크립트를 실행할 때 어떤 인터프리터를 사용할지 알려줍니다. 여기서는 Bash 를 사용합니다.
  2. NAME="John": NAME이라는 변수를 만들고 "John"이라는 값을 할당합니다.
  3. if [ "$NAME" = "John" ]; then: if 문의 시작입니다. NAME의 값이 "John"과 같은지 확인합니다.
    • 대괄호 [ ]는 사실 Bash 에서 test 명령어와 동일한 역할을 하는 명령어입니다.
    • 변수 값이 비어 있거나 공백이 포함된 경우를 대비해 "$NAME"과 같이 따옴표로 감싸는 것이 좋습니다.
    • 세미콜론과 then은 Bash if 문 문법의 일부입니다.
  4. echo "The name is John": 조건이 참 (true) 일 때 실행될 내용입니다.
  5. fi: if 문의 끝을 알립니다. "if"를 거꾸로 쓴 것입니다!

내용을 입력한 후 파일을 저장합니다.

이제 스크립트를 실행 가능하게 만들어야 합니다. 유닉스 계열 시스템에서는 보안상의 이유로 파일이 생성될 때 기본적으로 실행 권한이 부여되지 않습니다. chmod 명령어로 이를 변경할 수 있습니다.

chmod +x if.sh

이 명령어는 파일에 실행 권한을 추가합니다. +x는 "실행 (execute) 권한 추가"를 의미합니다.

이제 스크립트를 실행해 봅니다.

./if.sh

./는 현재 디렉토리에서 해당 스크립트를 찾으라는 의미입니다.

화면에 The name is John이라는 결과가 출력되어야 합니다.

만약 출력이 보이지 않는다면, 파일 내용이 정확히 저장되었는지, 그리고 실행 권한을 제대로 부여했는지 다시 확인해 보세요.

Else 절 추가하기

이번에는 if 문을 확장하여 else 절을 포함해 보겠습니다. else 절을 사용하면 조건이 거짓 (false) 일 때 수행할 동작을 지정할 수 있습니다.

WebIDE 에서 if.sh 파일을 다시 열고 다음과 같이 수정합니다.

#!/bin/bash

NAME="Alice"
if [ "$NAME" = "John" ]; then
  echo "The name is John"
else
  echo "The name is not John"
fi

변경된 부분은 다음과 같습니다.

  1. NAME 변수의 값을 "Alice"로 바꿨습니다. 조건이 거짓일 때 어떤 일이 일어나는지 확인하기 위해서입니다.
  2. else 절을 추가했습니다. if 문의 조건이 만족되지 않을 때 실행될 코드를 정의합니다.
  3. else 다음에 NAME이 "John"이 아닐 경우 실행될 echo 명령어를 추가했습니다.

else 절은 선택 사항이지만, 조건이 맞지 않을 때 아무것도 하지 않는 대신 특정 동작을 수행하고 싶을 때 매우 유용합니다.

수정한 내용을 저장합니다.

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

./if.sh

이번에는 The name is not John이라는 결과가 출력될 것입니다.

NAME이 "Alice"이므로 [ "$NAME" = "John" ] 조건이 거짓이 되고, 이에 따라 else 블록의 코드가 실행된 것입니다.

NAME 변수를 다시 "John"으로 바꿔서 실행해 보세요. 어떤 결과가 나오나요? 두 가지 경우 모두 의도한 대로 동작하는지 확인하는 좋은 방법입니다.

Elif 소개

때로는 여러 개의 조건을 순차적으로 확인해야 할 때가 있습니다. 이럴 때 elif (else if 의 줄임말) 절이 유용합니다. 여러 이름을 처리할 수 있도록 스크립트를 수정해 보겠습니다.

if.sh 파일을 다음 내용으로 업데이트합니다.

#!/bin/bash

NAME="George"
if [ "$NAME" = "John" ]; then
  echo "John Lennon"
elif [ "$NAME" = "Paul" ]; then
  echo "Paul McCartney"
elif [ "$NAME" = "George" ]; then
  echo "George Harrison"
elif [ "$NAME" = "Ringo" ]; then
  echo "Ringo Starr"
else
  echo "Unknown member"
fi

스크립트의 동작 방식은 다음과 같습니다.

  1. NAME="George"로 시작합니다. 우리가 확인할 대상입니다.
  2. 첫 번째 if 문에서 이름이 "John"인지 확인합니다.
  3. "John"이 아니라면 첫 번째 elif로 넘어가서 "Paul"인지 확인합니다.
  4. "Paul"도 아니라면 다음 elif에서 "George"인지 확인합니다.
  5. "George"도 아니라면 "Ringo"인지 확인합니다.
  6. 나열된 어떤 조건도 참이 아니라면 마지막 else 절로 넘어가 "Unknown member"를 출력합니다.

elif 절을 사용하면 여러 조건을 차례대로 검사할 수 있으며, 필요한 만큼 얼마든지 추가할 수 있습니다. 조건은 위에서 아래로 순서대로 평가되며, 가장 먼저 참이 되는 조건의 코드 블록만 실행됩니다.

파일을 저장합니다.

스크립트를 실행합니다.

./if.sh

George Harrison이라는 결과가 출력되어야 합니다.

NAME 변수의 값을 "John", "Paul", "Ringo" 또는 아예 다른 값으로 바꿔가며 실행해 보세요. NAME 값에 따라 출력이 어떻게 변하는지 관찰해 보시기 바랍니다.

숫자 비교하기

쉘 스크립트에서는 숫자 비교도 가능합니다. 숫자 비교를 실습하기 위해 새 스크립트를 만들어 보겠습니다.

numeric.sh라는 새 파일을 생성합니다.

touch numeric.sh

WebIDE 에서 numeric.sh를 열고 다음 내용을 입력합니다.

#!/bin/bash

NUMBER=10

if [ $NUMBER -lt 5 ]; then
  echo "The number is less than 5"
elif [ $NUMBER -eq 10 ]; then
  echo "The number is exactly 10"
elif [ $NUMBER -gt 15 ]; then
  echo "The number is greater than 15"
else
  echo "The number is between 5 and 15, but not 10"
fi

이 스크립트에서는 다음과 같은 숫자 비교 연산자를 사용합니다.

  • -lt: 미만 (less than)
  • -eq: 같음 (equal to)
  • -gt: 초과 (greater than)

그 외에도 다음과 같은 연산자들을 사용할 수 있습니다.

  • -le: 이하 (less than or equal to)
  • -ge: 이상 (greater than or equal to)
  • -ne: 같지 않음 (not equal to)

Bash 에서 <> 기호는 숫자 비교가 아닌 입출력 리다이렉션에 사용되기 때문에, 숫자 비교 시에는 반드시 이러한 전용 연산자를 사용해야 한다는 점에 유의하세요.

이제 스크립트에 실행 권한을 주고 실행해 봅니다.

chmod +x numeric.sh
./numeric.sh

The number is exactly 10이라는 결과가 출력될 것입니다.

NUMBER 변수의 값을 다양하게 바꿔보며 테스트해 보세요. 설정한 값에 따라 출력이 어떻게 달라지는지 확인해 보시기 바랍니다.

예를 들어 NUMBER를 20 으로 바꾸면 "The number is greater than 15"가 출력되고, 7 로 바꾸면 "The number is between 5 and 15, but not 10"이 출력될 것입니다.

문자열 비교와 논리 연산자

마지막으로 문자열 비교와 논리 연산자에 대해 알아보겠습니다. string_logic.sh라는 파일을 새로 만듭니다.

touch string_logic.sh

WebIDE 에서 string_logic.sh를 열고 다음 내용을 입력합니다.

#!/bin/bash

STRING1="hello"
STRING2="world"
NUMBER1=5
NUMBER2=10

if [ "$STRING1" = "hello" ] && [ "$STRING2" = "world" ]; then
  echo "Both strings match"
fi

if [ $NUMBER1 -lt 10 ] || [ $NUMBER2 -gt 5 ]; then
  echo "At least one of the number conditions is true"
fi

if [[ "$STRING1" != "$STRING2" ]]; then
  echo "The strings are different"
fi

if [[ -z "$STRING3" ]]; then
  echo "STRING3 is empty or not set"
fi

이 스크립트는 몇 가지 새로운 개념을 보여줍니다.

  1. 문자열 일치 비교 (=): 두 문자열이 정확히 같은지 확인합니다.
  2. 논리 AND (&&): 두 조건을 결합합니다. 두 조건이 모두 참이어야 전체 결과가 참이 됩니다.
  3. 논리 OR (||): 두 조건을 결합하지만, 둘 중 하나만 참이어도 전체 결과가 참이 됩니다.
  4. 문자열 불일치 비교 (!=): 두 문자열이 서로 다른지 확인합니다.
  5. 문자열 비어 있음 확인 (-z): 문자열의 길이가 0(비어 있음) 이면 참입니다.

또한 일부 if 문에서 이중 대괄호 [[ ]]를 사용한 것을 볼 수 있습니다. 이는 단일 대괄호의 확장 버전으로, Bash 스크립트에서 권장되는 방식입니다. 더 복잡한 표현식을 지원하며 단어 분할 (word splitting) 이나 경로 확장 (pathname expansion) 과 관련된 예기치 않은 오류를 방지해 줍니다.

스크립트를 실행 가능하게 만들고 실행합니다.

chmod +x string_logic.sh
./string_logic.sh

스크립트의 모든 조건이 참이므로 네 개의 echo 문이 모두 출력되어야 합니다.

Both strings match
At least one of the number conditions is true
The strings are different
STRING3 is empty or not set

STRING1을 "hello"가 아닌 다른 값으로 바꾸는 등 값을 변경해 보면서 출력이 어떻게 바뀌는지 확인해 보세요.

요약

이 실습을 통해 쉘 프로그래밍에서 조건문을 사용하는 방법을 배웠습니다. if-else 문, elif 절, 숫자 비교, 문자열 비교, 그리고 논리 연산자를 직접 활용해 보았습니다. 이러한 도구들을 사용하면 상황에 따라 유연하게 대처하는 복잡한 쉘 스크립트를 작성할 수 있습니다.

핵심 요약:

  • 쉘 스크립트 if-else 문의 기본 구조 이해
  • 여러 조건을 처리하기 위한 elif 사용법
  • 숫자 비교 연산자 활용 (-lt, -gt, -eq 등)
  • 문자열 비교 및 논리 연산자 활용
  • chmod 를 이용한 스크립트 실행 권한 부여의 중요성

쉘 스크립팅에 능숙해지는 비결은 꾸준한 연습입니다. 배운 개념들을 다양하게 조합하여 자신만의 스크립트를 만들어 보세요. 실력이 쌓일수록 이러한 조건문들이 정교하고 유용한 스크립트를 만드는 데 얼마나 필수적인지 실감하게 될 것입니다.