본문 바로가기
Shell

if문 사용법 (shell script)

by yororing 2024. 4. 29.

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 ]
== 문자열이 같으면 참  
!= 문자열이 다르면 참  
< 왼쪽의 문자열이 오른쪽의 문자열보다 정렬 시 선행되면 참  
> 오른쪽의 문자열이 왼쪽의 문자열보다 정렬 시 선행되면 참  
  [ -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 출력

참조

  1. https://jink1982.tistory.com/48 
  2. https://blackinkgj.github.io/shell-program/
  3. https://www.joedog.org/articles-cheat-sheet/#google_vignette 
  4. https://lhc9763.tistory.com/9 
  5.  

'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