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 |