쉘 스크립트 if문 및 쉘에서 인자 처리
(1) if 문
if [ 조건식 ] ; then
실행문
fi
(2) if else 문
if [ 조건식 ] ; then
실행문
else
실행문
if
(3) if elif 문
if [ 조건식 ] ; then
실행문
elif [ 조건식 ] ; then
실행문
fi
(4) 조건식
a)수치(산술) 비교
[ $A -eq $B ] : A와B의 값이 같은경우
[ $A -ne $B ] : A와B의 값이 다른경우
[ $A -gt $B ] : A가B보다 큰경우
[ $A -lt $B ] : A가B보다 작은경우
[ $A -ge $B ] : A가B보다 크거나 같은 경우
[ $A -le $B ] : A가B보다 작거나 같은경우
*소주점이하의 숫자는 무시되므로 유의하여야한다
b)문자열 비교
[ "String1" = "String2" ] : 두 문자열이 같은경우 참
[ "String1 != "String2" ] : 두 문자열이 다른경우 참
[ -z "String" ] : 문자열의 길이가 0인경우 참
[ -n "String" ] : 문자열의 길이가 0이 아닌경우 참
c)파일비교
[ -b filename ] : filename이 블럭 디바이스이면 true
[ -c filename ] : filename이 문자 디바이스이면 true
[ -d filename ] : filename이 디렉토리이면 true
[ -e filename ] : filename이 존재하면 true
[ -f filename ] : filename이 directory가 아닌 file이면 true(크기 0인경우 포함)
[ -g filename ] : filename이 set-group-id 파일이면 true
[ -h filename ] : filename이 심볼릭 링크이면 true
[ -L filename ] : filename이 심볼릭 링크이면 true
[ -k filename ] : filename이 Stick bit가 셋팅되어 있으면 true
[ -p filename ] : True if file is a named pipe.
[ -r filename ] : filename이 현재 상용자가 읽을 수 있는 파일이면 true
[ -s filename ] : filename이 비어있는 않으면 true
[ -S filename ] : filename이 소켓 디바이스이면 true
[ -t FD ] : filename이 FD가 열려진 터미널이면 true
[ -u filename ] : filename이 set-user-id파일이면 true
[ -w filename ] : filename이 현재 사용자가 쓸 수 있는 파일이면 true
[ -x filename ] : filename이 현재 사용자가 실행할 수 있는 파일이면 true
[ -O filename ] : filename의 소유자가 현재 사용자이면 true
[ -G filename ] : filename의 그룹이 현재 사용자의 그룹과 같으면 true
[ filename1 -nt filename2 ] : filename1이 filename2보다 새로운 파일이면(최근파일이면) true
[ filename1 -ot filename2 ] : filename1이 filename2보다 오래된 파일이면 true
[ filename1 -ef filename2 ] : filename1이 filename2의 하드링크 파일이면 true
[ ! -option filename ] : option의 조건이 거짓이 되는경우 참
(5) 쉘에서 인자 처리
shell 내부에서 첫번째 인자는 $1, 두번째 인자는 $2, 세번째 인자는 $3, 네번째 인자는 $4 ... 으로 쉘 스크립트 내부에서 변수로 받아서 처리가 가능하다.
또한 인자의 개수는 $# 을 이용하여 현재 들어온 인자의 개수가 몇개인지 알 수 있다.
- $1~ $n - 넘겨진 인자들
- $* : 스크립트에 전달된 인자들을 모아놓은 문자열. 하나의 변수에 저장되며 IFS 환경변수의
첫번째 문자로 구분된다. (IFS : internal field separator)
- $@ : $*과 같다. 다만 구분자가 IFS변수의 영향을 받지 않는다.
- $0 : 실행된 쉘 스크립트 이름
- $# : 스크립트에 넘겨진 인자의 갯수
(6) AND 조건
[ "aa" = "bb" ] && [ "bb" = "cc' ]
(7) OR 조건
[ "aa" = "bb" ] II [ "bb" = "cc' ]
----------------------------------------------------------
#!/bin/sh
# sample.sh
argc=$#
argv0=$0
argv1=$1
argv2=$2
if [ 0 -eq $argc ]
then
echo "argc:$argc"
echo "argv0:$argv0"
fi
if [ 1 -eq $argc ]
then
echo "argc:$argc"
echo "argv0:$argv0"
echo "argv1:$argv1"
fi
if [ 2 -eq $argc ]
then
echo "argc:$argc"
echo "argv0:$argv0"
echo "argv1:$argv1"
echo "argv2:$argv2"
fi
--------------------------------
$ ./sample.sh
argc:0
argv0:./sample.sh
$ ./sample.sh 9
argc:1
argv0:./sample.sh
argv1:9
$ ./sample.sh 9 8
argc:2
argv0:./sample.sh
argv1:9
argv2:8
(8) linux 쉘 스크립트 for문 예시
#!/bin/bash MaxCnt=10 if [ 7 -eq $cnt ] ; then done echo "Finish!" |