01 if 문 기본 사용법
0. python과 비교
# python
if a == b:
return 'a is equal to b'
else:
return 'a does not equal to b'
# shell
if [ a -eq b ];then
echo 'a is equal to b'
else
echo 'a does not equal to b'
fi
1. 기본 형식
- if 로 시작, fi로 끝맺힘
- if 다음 한칸 띄고 [ 넣고 한칸 띄고 값과 조건식을 넣고 한칸 띄고 ]
- [ ] 안에 값/조건식 앞뒤로 공백 없으면 스크립트 에러가 나므로 유의
if [ 값1 조건식 값2 ];then
수행문
fi
if [ 값1 조건식 값2 ];then
수행문
else
수행문
fi
if [ 값1 조건식 값2 ]
then
수행문
else
수행문
fi
- 예시
#!/bin/ksh
value=0
if [ ${value} -eq 0 ];then
echo value is 0
fi
- 결과는 value가 0이므로 "value is 0" 출력
2. 조건문 종류
| 비교 대상 | 종류 | 설명 | 예 |
| 문자열 |
[ -z ] | 문자열의 길이가 0이면 참 | [ -z $VALUE ] |
| [ -n ] | 문자열의 길이가 0이 아니면 참 | [ -n $VALUE ] | |
| == | 문자열이 같으면 참 | ||
| =~ | 정규 표현식을 비교할 때 사용하는 연산자, 같으면 참 | [[ "${1}" =~ ^[0-9]+$ ]] | |
| != | 문자열이 다르면 참 | ||
| < | 왼쪽의 문자열이 오른쪽의 문자열보다 정렬 시 선행되면 참 | ||
| > | 오른쪽의 문자열이 왼쪽의 문자열보다 정렬 시 선행되면 참 | ||
| [ -a ] | && 또는 and 와 동일, 조건식1과 조건식2 모두 참이면 참 | ||
| [ -o ] | || 또는 xor과 동일, 조건식1과 조건식2 중 하나라도 참이면 참 | ||
숫자 |
[ -eq ] | 값이 같으면 참 | |
| [ -ne ] | 값이 다르면 참 | ||
| [ -gt ] | 값1 > 값2 | ||
| [ -ge ] | 값1 >= 값2 | ||
| [ -lt ] | 값1 < 값2 | ||
| [ -le ] | 값1 <= 값2 | ||
파일 |
[ -d ] | 파일이 디렉토리면 참 directory | |
| [ -e ] | 파일이 있으면 참 exist | ||
| [ -f ] | 파일이 일반 파일 (regular file)이면 참 file | ||
| [ -g ] | 파일명이 set-group-id 설정이 되면 참 | ||
| [ -L ] | 파일이 심볼릭 링크면 참 symbolic Link | ||
| [ -r ] | 파일이 본인 권한으로 읽기 가능하면 참 readable | ||
| [ -s ] | 파일의 크기가 0보다 크면 참 size | ||
| [ -S ] | 파일이 소켓이면 참 socket | ||
| [ -u ] | 파일명이 set-user-id 설정이 되면 참 | ||
| [ -w ] | 파일이 본인 권한으로 쓰기 가능하면 참 writeable | ||
| [ -x ] | 파일이 본인 권한으로 실행 가능하면 참 executeable | ||
| [ 파일1 -nt 파일2 ] | 파일1이 파일2보다 최신파일이면 참 | ||
| [ 파일1 -ot 파일2 ] | 파일1이 파일2보다 이전파일이면 참 | ||
| [ 파일1 -ef 파일2 ] | 파일1이 파일2랑 같은 파일이면 |
3. 예시
#!/bin/ksh
value=0
if [ ${value} -eq 0 ];then
echo value is 0
fi
if [ ${value} -ne 1 ];then
echo value is not 1
fi
test=5
if [ ${test} -gt 2 -a ${test} -le 7 ];then
echo test greater than 2 and lower than 7
fi
1) [AND]
if [ 값1 조건식 값2 -a 값1 조건식 값2 ];then
수행문
fi
2) [OR]
if [ 값1 조건식 값2 -o 값1 조건식 값2 ];then
수행문
fi
02 Error
1. "integer expression expected"
if [ 1 -eq 1 ];then
echo 1
fi
# 1 출력
if [ "A" -eq "A" ];then
echo 1
fi
# integer expression expected 에러 발생
- 설명: 첫 번째 if 조건문은 잘 동작하나 두 번째 if 조건문은 "integer expression expected" 오류 발생함.
- 이유: 비교연산자 사용할 경우 오류가 나지 않지만 비교식을 사용하면 에러 발생.
- 해결: 문자열에 비교식을 사용하려면 대괄호 두 개로 감싸주면 됨
if [[ "A" -eq "A"]];then
echo 1
fi
# 1 출력
참조
'Shell' 카테고리의 다른 글
| Shell Script 함수 만들기 (0) | 2024.04.30 |
|---|---|
| Shell 변수 (variable) (0) | 2024.04.30 |
| Shell, Shell Script, .sh란 (0) | 2024.04.30 |
| case문 사용법 (shell script) (0) | 2024.04.30 |
| readonly (shell script 명령어) (0) | 2024.04.29 |