Bash If 문을 사용하는 방법(예제 4개 포함)

게시 됨: 2023-05-08
백그라운드에 지구본 패턴과 바이너리 워터마크가 있는 터미널 창을 보여주는 Linux 노트북
fatmawati achmad zaenuri/Shutterstock
if then fi 구조로 조건식을 작성하려면 Linux Bash if 문을 사용하십시오. 추가 조건식에 elif 키워드를 추가하거나 이전 조건절이 실행되지 않은 경우 실행되는 포괄적인 코드 섹션을 정의하는 else 키워드를 추가합니다.

사소하지 않은 모든 Bash 스크립트는 결정을 내려야 합니다. Bash if 문을 사용하면 Linux 스크립트에서 질문을 하고 대답에 따라 다른 코드 섹션을 실행할 수 있습니다. 작동 방식은 다음과 같습니다.

조건부 실행이란 무엇입니까?

가장 사소한 Bash 스크립트를 제외하고는 일반적으로 결정의 결과에 따라 실행 흐름이 스크립트를 통해 다른 경로를 거쳐야 합니다. 이를 조건부 실행이라고 합니다.

수행할 실행 분기를 결정하는 한 가지 방법은 if ​​문을 사용하는 것입니다. if 문이 if then 문 또는 if then else 문이라고 부르는 것을 들을 수 있습니다. 그것들은 같은 것에 대한 다른 이름입니다.

9 Linux Bash 스크립트의 for 루프 예
관련 9 Linux Bash 스크립트의 for 루프 예

if 문은 어떤 것이 참이면 이것을 하라고 말합니다. 그러나 어떤 것이 거짓이라면 대신 그렇게 하십시오. "어떤 것"은 변수의 값, 파일의 존재 또는 두 문자열이 일치하는지 여부와 같은 많은 것들이 될 수 있습니다.

의미 있는 스크립트에는 조건부 실행이 필수적입니다. 이것이 없으면 스크립트에서 수행할 수 있는 작업이 매우 제한됩니다. 의미 있는 결정을 내릴 수 없다면 실제 문제를 해결하고 실행 가능한 솔루션을 생성할 수 없습니다.

if 문은 아마도 조건부 실행을 얻기 위해 가장 자주 사용되는 수단일 것입니다. Bash 스크립팅에서 사용하는 방법은 다음과 같습니다.

관련: Linux Bash 스크립트에 파일이 있는지 확인하는 방법

간단한 If 문 예제

이것은 가장 간단한 if 문의 표준 형식입니다.

 if [ 이 조건이 참인 경우 ]
그 다음에
  실행-이-문
파이

텍스트 내의 조건이 true로 확인되면 then 절의 스크립트 줄이 실행됩니다. 다른 사람이 작성한 스크립트를 살펴보면 다음과 같이 작성된 if 문을 볼 수 있습니다.

 if [ 이 조건이 참인 경우 ]; 그 다음에
  실행-이-문
파이

몇 가지 참고 사항:

  • if 문은 fi 로 마무리됩니다.
  • 조건부 테스트의 첫 번째 대괄호 ” [ 와 두 번째 대괄호 ” ]앞에 공백이 있어야 합니다.
  • then 키워드를 조건부 테스트와 같은 줄에 넣으려면 세미콜론 ” 을 사용해야 합니다 ; "시험 후.

조건 테스트가 거짓으로 판명되면 일부 코드를 실행하도록 선택적 else 절을 ​​추가할 수 있습니다. else 절에는 then 키워드가 필요하지 않습니다.

 if [ 이 조건이 참인 경우 ]
그 다음에
  실행-이-문
또 다른
  이 문을 대신 실행하십시오.
파이

이 스크립트는 else 절을 ​​사용하는 if 문의 간단한 예를 보여줍니다. 조건 테스트는 고객의 나이가 21세 이상인지 확인합니다. 나이가 21세 이상인 경우 고객은 구내에 입장할 수 있으며 then 절이 실행됩니다. 충분히 오래되지 않은 경우 else 절이 실행되고 허용되지 않습니다.

 #!/빈/배시

고객_나이=25

if [ $customer_age -ge 21 ]
그 다음에
  echo "들어오세요."
또 다른
  echo "들어오실 수 없습니다."
파이

위의 스크립트를 편집기에 복사하고 "if-age.sh"라는 파일로 저장한 다음 chmod 명령을 사용하여 실행 가능하게 만듭니다. 우리가 논의하는 각 스크립트에 대해 그렇게 해야 합니다.

 chmod +x if-age.sh 

chmod를 사용하여 스크립트를 실행 가능하게 만들기

스크립트를 실행해 봅시다.

 ./if-age.sh 

age 변수가 25로 설정된 if-age.sh 스크립트 실행

이제 파일을 편집하고 21세 미만의 연령을 사용합니다.

 고객_나이=18

스크립트를 변경하고 변경 사항을 저장합니다. 지금 실행하면 조건이 false를 반환하고 else 절이 실행됩니다.

 ./if-age.sh 

age 변수를 18로 설정하여 if-age.sh 스크립트 실행

elif 절

elif 절은 추가 조건 테스트를 추가합니다. 원하는 만큼 elif 절을 가질 수 있습니다. 그 중 하나가 사실로 밝혀질 때까지 차례로 평가됩니다. elif 조건 테스트 중 어느 것도 true로 판명되지 않으면 else 절(있는 경우)이 실행됩니다.

이 스크립트는 숫자를 묻고 홀수인지 짝수인지 알려줍니다. 0은 짝수이므로 아무것도 테스트할 필요가 없습니다.

다른 모든 숫자는 2로 나눈 모듈로를 찾아 테스트합니다. 우리의 경우 모듈로는 2로 나눈 결과의 분수 부분입니다. 소수 부분이 없으면 숫자는 정확히 2로 나누어집니다. 따라서 짝수입니다.

 #!/빈/배시

echo -n "숫자를 입력하세요: "

번호 읽기

if [ $번호 -eq 0 ]
그 다음에
  echo "0을 입력하셨습니다. 0은 짝수입니다."
elif [ $(($숫자 % 2)) -eq 0 ]
그 다음에
  echo "$number를 입력하셨습니다. 짝수입니다."
또 다른
  echo "$number를 입력하셨습니다. 홀수입니다."
파이

이 스크립트를 실행하려면 편집기에 복사하고 "if-even.sh"로 저장한 다음 chmod를 사용하여 실행 가능하게 만드십시오.

스크립트를 몇 번 실행하고 출력을 확인해 봅시다.

 ./if-even.sh 

다양한 입력으로 if-even.sh 스크립트 실행

모두 잘 작동합니다.

다양한 형태의 조건부 테스트

조건부 테스트에 사용된 대괄호 ” [] ”는 test 프로그램을 호출하는 속기 방법입니다. 그 때문에 test 지원하는 모든 비교 및 ​​테스트를 if 문에서 사용할 수 있습니다.

다음은 그 중 일부에 불과합니다.

  • ! expression : 표현식이 false이면 True입니다.
  • -n 문자열 : 문자열의 길이가 0보다 크면 참입니다.
  • -z 문자열 : 문자열의 길이가 0이면 참입니다. 즉, 빈 문자열입니다.
  • string1 = string2 : string1이 string2와 같으면 True입니다.
  • string1 != string2 : string1이 string2와 같지 않으면 참입니다.
  • integer1 -eq integer2 : integer1이 숫자로 integer2와 같으면 참
  • 정수1 -qt 정수2 : 정수1이 숫자로 정수2보다 크면 참
  • 정수1 -lt 정수2 : 정수1이 숫자로 정수2보다 작으면 참
  • -d 디렉토리 : 디렉토리가 존재하면 참.
  • -e file : 파일이 존재하면 참.
  • -s file : 크기가 0보다 큰 파일이 있으면 참입니다.
  • -r file : 파일이 존재하고 읽기 권한이 설정되어 있으면 참입니다.
  • -w file : 파일이 존재하고 쓰기 권한이 설정되어 있으면 True입니다.
  • -x file : 파일이 존재하고 실행 권한이 설정되어 있으면 True입니다.

테이블에서 "파일" 및 "디렉토리"는 상대 또는 절대 디렉토리 경로를 포함할 수 있습니다.

등호 " = "와 등호 테스트 -eq 는 동일 하지 않습니다 . 등호는 문자 단위 텍스트 비교를 수행합니다. 동등성 테스트는 수치 비교를 수행합니다.

명령줄에서 test 프로그램을 사용하여 이를 확인할 수 있습니다.

 테스트 "이 문자열" = "이 문자열"
 테스트 "이 문자열" = "저 문자열"
 테스트 1 = 001
 테스트 1 -eq 001

각각의 경우에 echo 명령을 사용하여 마지막 명령의 반환 코드를 인쇄합니다. 0은 참을 의미하고 1은 거짓을 의미합니다.

명령줄에서 테스트 프로그램을 사용하여 다양한 비교 테스트

등호 ” = ”를 사용하면 1과 001을 비교하는 잘못된 응답이 제공됩니다. 두 문자열이 서로 다른 두 문자열이기 때문에 맞습니다. 수치적 으로 동일한 값(1)이므로 -eq 연산자는 참 응답을 반환합니다.

조건부 테스트에서 와일드카드 일치를 사용하려면 이중 괄호 ” [[ ]] ” 구문을 사용하십시오.

 #!/빈/배시

if [[ $USER == *ve ]]
그 다음에
  에코 "안녕하세요 $USER"
또 다른
  echo "$USER는 've'로 끝나지 않습니다"
파이

이 스크립트는 현재 사용자의 계정 이름을 확인합니다. " ve "로 끝나면 사용자 이름을 인쇄합니다. ” ve “로 끝나지 않으면 스크립트에서 그렇게 말하고 끝납니다.

 ./if-wild.sh 

if 문의 조건부 테스트에서 와일드카드 검색을 보여주는 if-wild.sh 스크립트 실행

관련: Bash의 조건부 테스트: if, then, else, elif

중첩된 If 문

if 문 안에 다른 if 문을 넣을 수 있습니다.

이는 완벽하게 허용되지만 if 문을 중첩하면 코드를 읽기가 쉽지 않고 유지 관리하기가 더 어려워집니다. 2~3개 수준 이상의 if 문을 중첩하는 경우 스크립트의 논리를 재구성해야 할 수 있습니다.

다음은 1에서 7까지의 숫자로 날짜를 가져오는 스크립트입니다. 하나는 월요일이고 일곱은 일요일입니다.

가게의 영업시간을 알려줍니다. 평일이나 토요일이면 가게가 열려 있다고 알려줍니다. 일요일이면 가게가 문을 닫는다고 보고한다.

상점이 열려 있으면 중첩된 if 문이 두 번째 테스트를 수행합니다. 요일이 수요일이면 아침에만 영업한다고 알려줍니다.

 #!/빈/배시

# 날짜를 숫자 1..7로 가져오기
일=$(날짜 +"%u")

if [ $day -le 6 ]
그 다음에
  ## 가게가 열려있습니다
  if [ $day -eq 3 ]
  그 다음에
    # 수요일은 반나절
    echo "수요일은 오전에만 영업합니다."
  또 다른
    # 정규 주중 및 토요일
   echo "하루종일 영업합니다."
  파이
또 다른
  # 일요일은 영업하지 않습니다
  echo "일요일이라 휴무입니다."
파이

이 스크립트를 편집기에 복사하고 "if-shop.sh"라는 파일로 저장한 다음 chmod 명령을 사용하여 실행 가능하게 만듭니다.

스크립트를 한 번 실행한 다음 컴퓨터의 시계를 수요일로 변경하고 스크립트를 다시 실행했습니다. 그런 다음 요일을 일요일로 변경하고 다시 한 번 실행했습니다.

 ./if-shop.sh
 ./if-shop.sh
 ./if-shop.sh 

컴퓨터 시계를 평일, 수요일, 일요일로 설정하여 if-shop.sh 스크립트 실행

관련: Linux에서 Double Bracket 조건부 테스트를 사용하는 방법

경우의 경우

조건부 실행은 프로그래밍과 스크립팅에 힘을 실어주며 겸손한 if 문은 코드 내에서 실행 경로를 전환하는 가장 일반적으로 사용되는 방법일 수 있습니다. 그러나 그것이 항상 답이라는 것을 의미하지는 않습니다.

좋은 코드를 작성한다는 것은 어떤 옵션이 있고 특정 요구 사항을 해결하기 위해 어떤 옵션을 사용하는 것이 가장 좋은지 아는 것을 의미합니다. if 문은 훌륭하지만 가방에 있는 유일한 도구로 두지 마십시오. 특히 일부 시나리오에서 해결책이 될 수 있는 case 문을 확인하십시오.

관련: Bash 스크립트에서 Case 문을 사용하는 방법