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
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 |