Bash if.. else에 대해 살펴보고 셸 스크립트에서 사용하는 방법을 보여 드리겠습니다.
의사 결정은 컴퓨터 프로그래밍의 가장 근본적인 개념 중 하나입니다. 다른 프로그래밍 언어와 유사합니다.
if, if.. else, if.. elif..else 등 Bash 문을 사용하여 특정 조건에 따라 코드를 실행할 수 있는 경우 중첩됩니다.
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입니다.
'SW > 리눅스' 카테고리의 다른 글
Linux : Reboot (Restart) : 재부팅, 재시작 명령어, 예제, 사용 방법 (0) | 2021.09.16 |
---|---|
Linux : Apache 명령어, 예제, 사용 방법 (0) | 2021.09.15 |
Linux : Bash : Array 다루는 방법, 예제, 명령어 (0) | 2021.09.13 |
Raspberry Pi : Plex Media Server 설치 방법, 예제, 명령어 (1) | 2021.09.12 |
Linux : Cent OS 부팅 USB 만드는 방법, 예제, 명령어 (0) | 2021.09.11 |