SW/리눅스

Linux : Bash : if..else 문 사용법, 예제, 명령어

얇은생각 2021. 9. 14. 07:30
반응형

Bash if.. else에 대해 살펴보고 셸 스크립트에서 사용하는 방법을 보여 드리겠습니다.

의사 결정은 컴퓨터 프로그래밍의 가장 근본적인 개념 중 하나입니다. 다른 프로그래밍 언어와 유사합니다.

if, if.. else, if.. elif..else 등 Bash 문을 사용하여 특정 조건에 따라 코드를 실행할 수 있는 경우 중첩됩니다.

 

 

Linux : Bash : if..else 문 사용법, 예제, 명령어

 

 

if 문

조건이 서로 다른 형태를 가질 수 있는 경우 배시를 합니다. 가장 기본적인 if 문장은 다음과 같은 형식을 취합니다.

if TEST-COMMAND
then
  STATEMENTS
fi

 

 

if 문은 if 키워드로 시작하고 이어서 조건부 식과 키워드로 시작합니다. 문은 fi 키워드로 끝납니다.

TEST-Command가 True로 평가되면 문이 실행됩니다. TEST-Command가 False를 반환하면 아무 일도 일어나지 않고 문이 무시됩니다.

일반적으로 코드를 항상 들여쓰고 코드 블록을 빈 줄로 구분하는 것이 좋습니다. 대부분의 사람들은 4-스페이스 또는 2-스페이스 들여쓰기를 선택합니다. 들여쓰기와 빈 줄은 코드를 더 읽기 쉽고 체계화합니다.

지정된 숫자가 10보다 큰지 여부를 확인하는 다음 예제 스크립트를 살펴보겠습니다.

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "The variable is greater than 10."
fi

 

 

코드를 파일에 저장하고 명령줄에서 실행합니다.

bash test.sh

# The variable is greater than 10.

 

 

번호를 입력하라는 메시지가 스크립트에 표시됩니다. 예를 들어 15를 입력하면 15가 10보다 크므로 test 명령이 true로 평가되고 절 내부의 echo 명령이 실행됩니다.

 

 

 

if..else 문

if..else문은 다음 형식을 사용합니다.

if TEST-COMMAND
then
  STATEMENTS1
else
  STATEMENTS2
fi

 

 

TEST-Command가 True로 평가되면, 문장이 실행됩니다1. 그렇지 않으면 TEST-Command가 False를 반환하면 STATENTS2가 실행됩니다. 진술서에 다른 조항은 하나만 있을 수 있습니다.

이전 예제 스크립트에 다른 절을 추가하겠습니다.

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "The variable is greater than 10."
else
  echo "The variable is equal or less than 10."
fi

 

 

코드를 실행하고 숫자를 입력하면 스크립트에서는 숫자가 10보다 큰지 작은지/같은지에 따라 다른 메시지를 인쇄합니다.

 

 

 

if..elif..else 문

if TEST-COMMAND1
then
  STATEMENTS1
elif TEST-COMMAND2
then
  STATEMENTS2
else
  STATEMENTS3
fi

 

 

TEST-Command1이 True로 평가되는 경우, 문장이 실행됩니다. TEST-Command2가 True로 평가되는 경우, 문장이 실행됩니다. 어떤 테스트 명령도 True로 평가되지 않으면 STATENTS2가 실행됩니다.

문에 하나 이상의 생략 절이 있을 수 있습니다. 다른 절은 선택 사항입니다.

조건을 순차적으로 평가합니다. 조건이 True로 돌아오면 나머지 조건이 수행되지 않고 프로그램 제어가 if 명령문의 끝으로 이동합니다.

이전 스크립트에 elif 절을 추가하겠습니다.

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]]
then
  echo "The variable is equal to 10."
else
  echo "The variable is less than 10."
fi

 

 

 

중첩된 경우 문

Bash를 사용하면 if 문 내에 문을 중첩할 수 있습니다. if 전표는 다른 if 전표에 복수 전표를 넣을 수 있습니다.

다음 스크립트는 세 숫자를 입력하라는 메시지를 표시하고 세 숫자 중 가장 큰 숫자를 인쇄합니다.

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]]
then
  if [[ $VAR1 -ge $VAR3 ]]
  then
    echo "$VAR1 is the largest number."
  else
    echo "$VAR3 is the largest number."
  fi
else
  if [[ $VAR2 -ge $VAR3 ]]
  then
    echo "$VAR2 is the largest number."
  else
    echo "$VAR3 is the largest number."
  fi
fi

# Enter the first number: 4
# Enter the second number: 7
# Enter the third number: 2
# 7 is the largest number.

 

 

일반적으로 대/소문자가 중첩된 경우 대/소문자를 사용하는 것이 더 효율적입니다.

 

 

 

여러 조건

논리 OR 및 AND 연산자를 사용하면 IF 문에 여러 조건을 사용할 수 있습니다.

다음은 세 가지 숫자 중 가장 큰 숫자를 인쇄하는 또 다른 버전의 스크립트입니다. 이 버전에서는 중첩된 if 명령문 대신 논리적 AND(&&) 연산자를 사용합니다.

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
  echo "$VAR1 is the largest number."
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
  echo "$VAR2 is the largest number."
else
  echo "$VAR3 is the largest number."
fi

 

 

 

연산자 테스트

Bash에서 test 명령은 다음 구문 형식 중 하나를 사용합니다.

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

 

 

스크립트를 휴대할 수 있도록 하려면 모든 POSIX 셸에서 사용할 수 있는 이전 테스트[명령]를 사용하는 것을 선호합니다. 테스트 명령의 새로운 업그레이드 버전(이중 대괄호)은 Bash, Zsh 및 Ksh를 기본 셸로 사용하는 대부분의 최신 시스템에서 지원됩니다.

테스트 식을 부정하려면 논리적 NOT(!) 연산자를 사용합니다. 문자열을 비교할 때는 항상 작은따옴표 또는 큰따옴표를 사용하여 워드 분할 및 전역 문제를 피하십시오.

 

 

 

다음은 가장 일반적으로 사용되는 연산자

-n VAR - VAR의 길이가 0보다 크면 참입니다.

-z VAR - VAR이 비어 있으면 참입니다.

STRING1 = STRING2 - STRING1과 STRING2가 같을 경우 True입니다.

STRING1!= STRING2 - STRING1과 STRING2가 동일하지 않으면 True입니다.

INTEGER1 -eq INTEGER2 - INTEGER1과 INTEGER2가 같을 경우 True입니다.

INTEGER1 -gt INTEGER2 - INTEGER1이 INTEGER2보다 클 경우 True입니다.

INTEGER1 -lt INTEGER2 - INTEGER1이 INTEGER2보다 작을 경우 True입니다.

INTEGER1 -ge INTEGER2 - INTEGER1이 INTEGER2보다 크거나 같은 경우 True입니다.

INTEGER1 -le INTEGER2 - INTEGER1이 INTEGER2와 같거나 작은 경우 True입니다.

-h FILE - 파일이 존재하고 심볼릭 링크인 경우 True입니다.

-r 파일 - 파일이 존재하고 읽을 수 있는 경우 True입니다.

-w 파일 - 파일이 존재하고 쓰기 가능한 경우 True입니다.

-x FILE - 파일이 존재하고 실행 가능한 경우 True입니다.

-d FILE - 파일이 존재하고 디렉토리인 경우 True입니다.

-e FILE - 유형(노드, 디렉토리, 소켓 등)에 관계없이 파일이 존재하며 파일일 경우 True입니다.

-f FILE - 파일이 존재하며 디렉토리나 장치가 아닌 일반 파일인 경우 True입니다.

반응형