Embedded Linux

리눅스 shell : [ 3 ] 조건문과 반복문

작성자 임베디드코리아 작성일15-11-23 09:48 조회5,389회 댓글0건
( 1 ) if 문
          if문은 조건을 비교하여 참/거짓 여부를 구분하여 참일 경우 수행될 부분과 거짓일 경우 수행될 부분으로 나뉜다.
■ 기본 형식
 
            if [ 값1 조건식 값2 ]; then
            실행문
            elif [ 값1 조건식 값2 ]; then
          실행문
            else
              실행문
            fi
      - 조건과 일치하는 경우 then 뒤의 커맨드가 실행된다.
      - 조건과 다른 경우 차례로 elif [ 조건 ]에 적힌 내용을 확인한다.
      - 일치하는 조건이 없는 경우 else 다음의 커맨드가 실행된 후 종료된다.
      - else가 존재하지 않는 경우, 그대로 종료된다.

    Ex)
        A=1
        B=2
        C=3

        if [ $A == 1 ]; then
              echo $A
        elif [ $B == 2 ]; then
              echo $B
        else
              echo $C
        fi


    Ex)
          #!/bin/sh

          if [ "$1" -gt "$2" ]
          then
                echo "1번째 인수가 2번째 인수보다 크다"
          elif [ "$1" -eq "$2" ]
          then
                echo "1번째 인수와 2번째 인수가 동일하다"
        else
                echo "1번째 인수가 2번째 인수보다 작다"
        fi

    < <* 비교 연산자  *>>
    ==    :  값1과 값2가 같으면 참
    !=    :  값1과 값2가 다르면 참
    >     :    값1이 값2보다 크면 참
    >=    :    값1이 값2보다 크거나 같으면 참
    <     :    값1이 값2보다 작으면 참
    <=  :    값1이 값2보다 작거나 같으면 참
    &&  : 조건식1과 조건식2 모두 참이면 참
    ||   :  조건식1과 조건식2 중 둘 중 하나라도 참이면 참

    <<* 비교식 사용 *>>
 -z  :  값이 공백이면 참
-n  :  값이 공백이 아니면 참
-eq :  값1과 값2가 같으면
-ne :  값1과 값2가 다르면 참
-ge :  값1이 값2보다 크거나 같으면 참
-gt : 값1이 값2보다 크면 참
-le :  값1이 값2보다 작거나 같으면 참
-lt  :  값1이 값2보다 작으면 참
-a  : 조건식1과 조건식2 모두 참이면 참
-o  : 조건식1과 조건식2 중 둘 중 하나라도 참이면 참

      <<* 파일 확인 *>>
-f :  파일이 regular 파일이면 참
-d : 파일이 디렉토리면 참
-L : 파일이 심볼릭 링크면 참
-r : 파일의 본인 권한이 r이면 참
-w : 파일의 본인 권한이 w면 참
-x : 파일의 본인 권한이 x면 참
-s : 파일 크기가 0이 아니면 참
-S : 파일이 소켓이면 참
-nt : 파일1이 파일2보다 최신 파일이면 참
-ot : 파일1이 파일2보다 오래된 파일이면 참
-ef : 파일1과 파일2가 같은 파일이면 참

( 2 )  Switch 조건
        - 조건・값이 변수와 일치하는 경우 그 곳에 적힌 커맨드가 실행된다.

■ 기본 형식
      case [변수] in
        case1)
            [case1일 경우 수행할 작업]
                                ;;
                case2)
              [case2일 경우 수행할 작업]
                            ;;
                          ...
 
                *)
                [default로 수행할 작업]
                          ;;
                esac
        -------------------------------------------------------------------------------------
        Ex)
            #!/bin/bash

            case $1 in
                  # $1 == protoss인 경우
                protoss)
                    echo "select protoss"
                        # semicolon 2개로 각 case들을 구분한다.
                        ;;
              terran)
                  echo "select terran"
                      ;;
              zerg)
                  echo "select zerg"
                      ;;
            # default는 다음과 같이 *)로 표시해준다.
            *)
                  echo "random"
                        ;;
            # case를 역순으로 쓴 esac 로 case문을 닫아준다.
            esac

( 3 )  while 루프
      조건과 일치할 때 반복된다

  ■  기본 문법
        while [ 조건 ]
        do
            명령1
            명령2
        done
          * 한 줄 작성법 *
          while [ 조건 ]; do 명령1;명령2; done

        Ex)
              #!/bin/bash
              number=0
              while [ $number -le 2 ]
              do
                  echo "Number: ${number}"
                  ((number++))
              done

        Ex)  무한 루프
            #!/bin/bash
            number=0
            while :
            do
                if [ $number -gt 2 ]; then
                      break
                fi
                echo "Number: ${number}"
                ((number++))
        done

    Ex) 날짜를 이용한 루프
          #!/bin/bash
          startDate=`date +"%Y%m%d" -d "20190101"`
          endDate=`date +"%Y%m%d" -d "20190201"`

            while [ "$startDate" != "$endDate" ] ;
            do
                    echo $startDate

                    startDate=`date +"%Y%m%d" -d "$startDate + 1 day"`;
          done

(  4 )  until 루프
        while과 반대로, 조건과 일치할 때까지 반복된다

      ■ 기본 문법
          until [CONDITION]
          do
              [COMMANDS]
          done

        - 조건은 명령을 실행하기 전에 평가된다.
        - 조건이 false로 평가되면 명령이 실행된다. 그렇지 않으면 조건이 true로 평가되면 루프가 종료되고 프로그램 제어가 다음 명령으로 전달된다.

        Ex)
            #!/bin/sh
            a=0
            until [ ! $a -lt 5 ]
            do
                  echo $a
                  a=`expr $a + 1`
          done

      Ex)
          #!/bin/bash
          counter=0
          until [ $counter -gt 5 ]
          do
              echo Counter: $counter
              ((counter++))
          done

( 5 ) for 루프
        조건・값이 변수와 일치하는 경우 커맨드가 실행된다.
        주어진 배열에 데이터가 있는 동안 순차적으로 반복된다.
        반복중에에 if문과 continue, break문을 이용하여 while문의 처음으로 돌아가거나, 탈출하는 것이 가능하다.

        ■  기봅 문법
            for [ 배열_아이템 ] in [ 배열 ]
            do
                  명령1
                  ${배열_아이템}
            done

        Ex)
            #!/bin/bash
            for vTime in {1..100}
            do
                  echo ${vTime}
            done

        Ex)
            #!/bin/sh
            for var in 0 1 2 3 4  #범위의 작성법(Bash독자) => {0..4}
            do
                echo $var
            done

        Ex) seq를 이용하여 반복을 처리 할 수 있다.
            #!/bin/bash
            for i in $(seq 1 100)
            do
                echo ${i}
            done
 
      Ex) 포맷에 맞게 숫자를 반복할 수도 있습니다. 00에서 20까지의 형식으로 숫자를 반복하는 방법이다.
              < 방법 1 >
            #!/bin/bash
            for vTime in {00..20}
            do
                  echo ${vTime}
            done

            < 방법 2 >
              for vTime in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
              do
                    echo $vTime
              done