Linux/쉘스크립트

쉘 조건문 - if문

쿠카이든 2023. 2. 1. 10:32
728x90
쉘 조건문

 

if 문
  • 배쉬의 if문의 특이한 점은 fi 와 대괄호[ ] 이다.
  • 여타 언어와 달리 중괄호를 안쓰기 떄문에 fi로 if문의 끝을 알려주어야 하며,
  • 주의해야할 점은 if문 뒤에 나오는 대괄호 [ ] 와 조건식 사이에는 반드시 공백이 존재해야 한다.

if [ 값1 조건식 값2 ]
then
    수행1
else
    수행2
fi

 
 
# 가독성 좋기 위해 then을 if [] 와 붙여쓰려면 반드시 세미콜론 ; 을 써야한다.

if [ 값1 조건식 값2 ]; then
    수행1
else
    수행2
fi



 

비교 연산

문자1 = 문자2             # 문자1 과 문자2가 일치 (sql같이 = 하나만 써도 일치로 인식)
문자1 == 문자2            # 문자1 과 문자2가 일치
문자1 != 문자2            # 문자1 과 문자2가 일치하지 않음
-z 문자                   # 문자가 null 이면 참
-n 문자                   # 문자가 null 이 아니면 참
문자 == 패턴              # 문자열이 패턴과 일치
문자 != 패턴              # 문자열이 패턴과 일치하지 않음


값1 -eq 값2             # 값이 같음(equal)
값1 -ne 값2             # 값이 같지 않음(not equal)
값1 -lt 값2             # 값1이 값2보다 작음(less than)
값1 -le 값2             # 값1이 값2보다 작거나 같음(less or equal)
값1 -gt 값2             # 값1이 값2보다 큼(greater than)
값1 -ge 값2             # 값1이 값2보다 크거나 같음(greater or equal)

 

if [ ${a} -eq ${b} ]; then
    echo "a와 b는 같다."
fi
 
if [ ${a} -ne ${b} ]; then
    echo "a와 b는 같지 않다."
fi
 
if [ ${a} -gt ${b} ]; then
    echo "a가 b보다 크다."
fi
 
if [ ${a} -ge ${b} ]; then
    echo "a가 b보다 크거나 같다."
fi
 
if [ ${a} -lt ${b} ]; then
    echo "a가 b보다 작다."
fi
 
if [ ${a} -le ${b} ]; then
    echo "a가 b보다 작거나 같다."
fi
 
# 한줄로 작성
if [ ${num1} -lt ${num2} ]; then echo "yes"; fi
Copy
BASH
num1=35
num2=48
 
# 이중 소괄호를 쓰면 조건문을 문자 대신 기호로 표현 가능하다. 단, 소괄호 안에 따옴표 쓰면 안된다.
if (( ${num1} < ${num2} )); then
    echo "yes"
fi
 
if (( ($num1 * $num2) - $num2 > 200 )); then
echo ">200"
else
echo "<200"
fi

 
이중 괄호 (( expression ))

expression 에는 수식이나 비교 표현식이 들어갈 수 있다.

 !         논리 부정
~        비트 부정
**        지수화
<<      비트 왼쪽 쉬프트
>>      비트 오른쪽 쉬프트
&        비트 단위AND
|          비트 단위 OR
&&      논리 AND
||         논리 OR
num++   후위증가
num--     후위감소++
num       전위증가
--num     전위감
파일 검사

 

if [ -d ${변수} ]; then     # ${변수}의 디렉토리가 존재하면 참
if [ ! -d ${변수} ]; then   # ${변수}의 디렉토리가 존재하지 않으면 참
 
 
if [ -e ${변수} ]; then     # ${변수}라는 파일이 존재하면 참
if [ ! -e ${변수} ]; then   # ${변수}라는 파일이 존재하지 않으면 참
 
 
if [ -r ${변수} ]; then     # 파일을 읽을 수 있으면 참
if [ -w ${변수} ]; then     # 파일을 쓸 수 있으면 참
if [ -x ${변수} ]; then     # 파일을 실행할 수 있으면 참
 
 
if [ -s ${변수} ]; then     # 파일의 크기가 0보다 크면 참
if [ -L ${변수} ]; then     # 파일이 symbolic link이면 참
if [ -S ${변수} ]; then     # 파일 타입이 소켓이면 참
if [ -f ${변수} ]; then     # 파일이 정규 파일이면 참
if [ -c ${변수} ]; then     # 파일이 문자 장치이면 참
 
 
if [ ${변수1} -nt ${변수2}]; then # 변수1의 파일이 변수2의 파일보다 최신 파일이면 참
if [ ${변수1} -ot ${변수2}]; then # 변수1의 파일이 변수2의 파일보다 최신이 아니면 참
if [ ${변수1} -ef ${변수2}]; then # 변수1의 파일과 변수2의 파일이 동일하면 참
논리 연산

 

조건1 -a 조건2         # AND
조건1 -o 조건2         # OR
조건1 && 조건2         # 양쪽 다 성립
조건1 || 조건2         # 한쪽 또는 양쪽다 성립
!조건                  # 조건이 성립하지 않음
true                   # 조건이 언제나 성립
false                  # 조건이 언제나 성립하지 않음
Copy
BASH
if [ -f ${file1} -a -f ${file2} ]; then
    echo 'file1과 file2는 모두 파일입니다.'
else
    echo 'file1과 file2가 모두 파일인 것은 아닙니다.'
fi
 
 
if [ -f ${a} -a -d ${b} ]; then
    echo "a는 파일이고 b는 디렉토리"
fi
Copy
BASH
VALUE=10
 
if [ ${VALUE} -gt 5 -a ${VALUE} -lt 15 ] ; then
echo "VALUE is greater than 5 and less than 15!"
fi
 
# 둘이 같은 문장이다.
if [ ${VALUE} -gt 5 ] && [ ${VALUE} -lt 15 ] ; then
echo "VALUE is greater than 5 and less than 15!"
fi
 
# 대괄호 두개를 써서 표현할 수 도 있다.
if [[ ${VALUE} -gt 5 && ${VALUE} -lt 15 ]] ; then
echo "VALUE is greater than 5 and less than 15!"
fi
Copy
BASH
# AND 
if [ ${string1} == ${string2} ] && [ ${string3} == ${string4} ] ;
then
 
# OR 
if [ ${string1} == ${string2} ] || [ ${string3} == ${string4} ];
then 
 
# 다중 조건 
if [[ ${string1} == ${string2} || ${string3} == ${string4} ]] && [ ${string5} == ${string6} ];
then
Copy
Tip

이중 대괄호
[[ "1.8.3" == 1.7.* ]]

&&, ||, = ~ * (정규식 매칭) 과 같은 확장 expression test 기능을 대괄호 내에 사용할 수 있게 한다.
그냥 대괄호의 개선버젼 정도로 생각하면 된다.

 

if elif else 문
BASH
#!/bin/bash
 
num1="10"
num2="10"
 
if [ ${num1} -lt ${num2} ]; then # "-lt", A가 B보다 작으면 True
    echo "yes"
elif [ ${num1} -eq ${num2} ]; then # "-eq", A와 B가 서로 같으면 True
    echo "bbb"
else
    echo "no"
fi
 
 
# 이중 소괄호를 쓰면 논리연산자 기호 사용 가능
if (( ${num1} < ${num2} )); then
    echo "yes"
elif (( ${num1} == ${num2} )); then
    echo "bbb"
else
    echo "no"
fi
 
 
# 한줄 작성
if [ ${num1} -lt ${num2} ]; then echo "yes"; elif [ ${num1} -eq ${num2} ]; then echo "bbb";  else echo "no"; fi
Copy
SHELL
$ ./script.sh
bbb
bbb
bbb
bbb


출처 : https://inpa.tistory.com/entry/LINUX-%EC%89%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%95%B5%EC%8B%AC-%EB%AC%B8%EB%B2%95-%EC%B4%9D%EC%A0%95%EB%A6%AC

 

[LINUX] 📚 BASH 쉘 프로그래밍 문법 마스터 💯 총정리 (+ 연습예제)

Shell Script 란 Shell Script는 Shell이나 command line 인터프리터에서 구동되도록 작성된 스크립트다. 윈도우에서는 batch(배치파일, .bat) 을 한번쯤은 본적이 있을 것이다. bat 파일을 실행하면 프로그램이

inpa.tistory.com

 

728x90

'Linux > 쉘스크립트' 카테고리의 다른 글

(shell script) 문자열 패턴 비교  (0) 2023.02.05
쉘 배열문이란?  (0) 2023.02.03
let 연산자와 $(( )) 연산자 예제  (0) 2023.01.31
expr 연산자 예제  (0) 2023.01.30
(shell script)매개 변수  (0) 2023.01.29