Bash if 문을 사용하여 여러 조건 처리하는 방법

ShellBeginner
지금 연습하기

소개

이 튜토리얼에서는 쉘 스크립팅 기술을 향상시키기 위해 Bash if 문을 여러 조건과 함께 사용하는 방법을 소개합니다. 논리 연산자를 효과적으로 결합하여 다양한 기준에 따라 스마트한 결정을 내리는 스크립트를 구축하는 방법을 배우게 됩니다. 이 랩을 마치면 일상적인 작업을 위한 다재다능한 자동화 도구를 만들 수 있게 됩니다.

Bash if 문의 기본 이해

기초부터 시작해 봅시다. Bash 에서 if 문은 조건이 참인지 거짓인지에 따라 스크립트가 수행할 작업을 결정하는 데 도움이 됩니다. 이는 Ubuntu 시스템에서 작업을 자동화해야 할 때 특히 유용합니다.

기본 디렉토리 /home/labex/project에서 터미널을 엽니다. 여기에 모든 스크립트를 작성합니다. 시작하려면 다음을 입력하여 basic_if.sh라는 간단한 스크립트 파일을 만듭니다.

touch basic_if.sh

파일이 존재하는지 확인하는 다음 코드를 추가합니다.

#!/bin/bash
if [[ -f "testfile.txt" ]]; then
  echo "The file exists."
else
  echo "The file does not exist."
fi

이 스크립트는 [[ -f "testfile.txt" ]]를 사용하여 현재 디렉토리에 testfile.txt가 있는지 테스트합니다. echo 명령은 결과에 따라 메시지를 표시합니다.

스크립트를 실행하려면 실행 가능하게 만듭니다.

chmod +x basic_if.sh

그런 다음 실행합니다.

./basic_if.sh

testfile.txt가 아직 존재하지 않으므로 "The file does not exist."가 표시됩니다. 다른 결과를 보기 위해 파일을 만들어 보겠습니다.

touch testfile.txt

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

./basic_if.sh
basic_if.sh

이제 "The file exists."가 출력되어야 합니다. 이 단계에서는 if, then, else, fi의 기본 구조를 소개합니다. 이중 대괄호 [[ ]]는 현대적인 Bash 기능으로, 단일 대괄호보다 조건 테스트를 더 안정적으로 만듭니다.

AND (&&) 를 사용하여 여러 조건 추가

이제 if 문이 한 번에 여러 조건을 확인하도록 하여 더 스마트하게 만들어 보겠습니다. && (AND) 연산자를 사용합니다. 이 연산자는 then 블록이 실행되려면 모든 조건이 참이어야 합니다.

basic_if.sh를 다시 열고 내용을 다음 업데이트된 스크립트로 바꿉니다.

#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]]; then
  echo "The file exists and is readable."
else
  echo "The file is either missing or not readable."
fi

이 스크립트는 두 가지를 확인합니다. testfile.txt가 존재하는지 (-f) 와 읽을 수 있는지 (-r) 입니다. 첫 번째 메시지가 표시되려면 둘 다 참이어야 합니다.

스크립트를 실행합니다.

./basic_if.sh

1 단계에서 testfile.txt를 만들었고 기본적으로 읽을 수 있기 때문에 (labex가 소유하고 있음) "The file exists and is readable."가 표시됩니다. &&가 어떻게 작동하는지 이해하기 위해 반대 시나리오를 테스트해 보겠습니다. 파일의 권한을 변경하여 읽을 수 없도록 만듭니다.

chmod u-r testfile.txt

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

./basic_if.sh

이제 두 번째 조건 (-r) 이 실패했기 때문에 "The file is either missing or not readable"가 출력됩니다. 다음 단계를 위해 읽기 권한을 복원합니다.

chmod u+r testfile.txt

&& 연산자는 모든 조건이 통과해야 함을 보장합니다. 여러 기준이 중요한 상황에 완벽합니다.

유연한 조건을 위한 OR (||) 사용

다음으로, 최소한 하나의 조건이 참이면 then 블록이 실행되도록 하는 || (OR) 연산자를 살펴보겠습니다. 이는 검사에서 유연성을 원할 때 유용합니다.

basic_if.sh를 다시 엽니다. 이 코드로 업데이트합니다.

#!/bin/bash
if [[ -f "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
  echo "At least one file exists."
else
  echo "Neither file exists."
fi

이 스크립트는 testfile.txt 또는 backup.txt가 존재하는지 확인합니다. testfile.txt가 이미 디렉토리에 있으므로 실행합니다.

./basic_if.sh

"At least one file exists."가 표시됩니다. 이제 || 로직을 테스트하기 위해 testfile.txt를 제거합니다.

rm testfile.txt

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

./basic_if.sh

파일이 없기 때문에 "Neither file exists"가 출력됩니다. OR 조건이 성공하는지 확인하기 위해 backup.txt를 만듭니다.

touch backup.txt
./basic_if.sh

이제 다시 "At least one file exists"라고 표시됩니다. || 연산자는 하나의 조건이라도 참이면 충분할 때 유용합니다.

AND 및 OR 연산자 결합

더 복잡한 로직을 위해 &&||를 결합해 보겠습니다. 파일이 존재하고 특정 기준을 충족하는지, 그리고 대체 조건이 있는지 확인합니다.

basic_if.sh를 다시 엽니다. 이 코드로 업데이트합니다.

#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
  echo "Either testfile.txt is readable or backup.txt exists."
else
  echo "No suitable file found."
fi

이 스크립트는 testfile.txt가 존재하고 읽을 수 있는지 그리고 backup.txt가 존재하는지 확인합니다. testfile.txt를 다시 만듭니다.

touch testfile.txt

스크립트를 실행합니다.

./basic_if.sh

testfile.txt가 두 조건을 모두 충족하므로 "Either testfile.txt is readable or backup.txt exists"가 출력됩니다. testfile.txt를 제거하고 backup.txt를 유지합니다.

rm testfile.txt
./basic_if.sh

backup.txt|| 조건을 충족하므로 동일한 메시지가 나타납니다. backup.txt도 제거합니다.

rm backup.txt
./basic_if.sh

이제 "No suitable file found."가 표시됩니다. 이 단계는 미묘한 결정을 위해 연산자를 혼합하는 방법을 보여줍니다.

실용적인 작업에 조건 적용

마지막으로, 실제 시나리오에서 배운 내용을 사용해 보겠습니다: 사용자 입력을 검증합니다. 숫자가 범위 내에 있는지 확인하는 스크립트를 작성합니다.

number_check.sh라는 새 스크립트를 만듭니다.

touch number_check.sh
chmod +x number_check.sh

다음 코드를 추가합니다.

#!/bin/bash
read -p "Enter a number between 1 and 10: " number
if [[ "$number" -ge 1 ]] && [[ "$number" -le 10 ]]; then
  echo "Valid number: $number"
else
  echo "Invalid number. Please enter a value between 1 and 10."
fi

이 스크립트는 숫자 입력을 요청한 다음 &&를 사용하여 1 에서 10 사이 (포함) 인지 확인합니다. 실행합니다.

./number_check.sh

5를 입력하고 Enter 키를 누릅니다. "Valid number: 5"가 표시됩니다. 다시 실행하고 15를 입력합니다. "Invalid number. Please enter a value between 1 and 10."으로 응답합니다. 이는 사용자 입력을 처리하여 스크립트가 유효한 데이터로만 진행되도록 하는 실용적인 방법입니다.

요약

이 랩에서는 &&|| 연산자를 사용하여 여러 조건을 가진 Bash if 문을 숙달했습니다. 파일 속성 확인부터 사용자 입력 검증까지, 복잡한 기준에 따라 결정을 내리는 스크립트를 구축했습니다. 이러한 기술을 통해 Ubuntu 시스템에서 다양한 요구 사항에 맞게 조정된 안정적인 자동화 도구를 만들 수 있습니다.