본문 바로가기

임베디드

쉘 스크립트 if문 및 쉘에서 인자 처리

쉘 스크립트 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
for cnt in 1 2 3 4 5 6 7 8 9 $MaxCnt
do
    echo " == $cnt =="

    if [ 7 -eq $cnt ] ; then
       echo "*****"
       break
    else
       echo "-----"
    fi

done

echo "Finish!"

 

 

'임베디드' 카테고리의 다른 글

awk 명령어  (0) 2015.06.26
grep명령어  (0) 2015.06.26
리눅스 명령어#1  (0) 2015.06.08
source명령어  (0) 2015.04.19
Git 기본명령어  (0) 2015.04.17