2.while 루프

출처

설명

while문을 이용한 루프문 처리 방법을 알아보겠습니다.

문법

while 문의 기본 문법은 다음과 같습니다. 조건이 참일동안 명령1과 명령2가 순차적으로 반복됩니다. 명령을 처리 하는 중간에 if문과 continue, break문을 이용하여 while문의 처음으로 돌아가거나, 탈출하는 것이 가능합니다.

while [ 조건 ]
do
   명령1
   명령2
done

while문을 한줄로 작성하는 방법은 다음과 같습니다.

while [ 조건 ]; do 명령1;명령2; done

사용예제

기본 루프 처리

기본적인 루프문 처리는 다음과 같습니다. number가 2보다 작을 동안(le) 반복됩니다.

#!/bin/bash

number=0

while [ $number -le 2 ]
do
  echo "Number: ${number}"
  ((number++))
done

무한 루프

무한 루프는 다음과 같이 while :로 표현합니다. if문을 이용하여 2보다 커지면 while 문을 탈출합니다.

#!/bin/bash

number=0

while :
do
  if [ $number -gt 2 ]; then
    break
  fi

  echo "Number: ${number}"
  ((number++))
done

날짜를 이용한 루프

시작일자(2019.01.01)부터 종료일자 전일(2019.01.31)까지 일자를 출력하는 방법은 다음과 같습니다.

#!/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

종료일자(2019.02.01)까지 출력하기 위해서는 종료일자에 1을 더하여 whilte문 종료조건을 늘려주면 됩니다.

#!/bin/bash

startDate=`date +"%Y%m%d" -d "20190101"`
endDate=`date +"%Y%m%d" -d "20190201"`
endDate=`date +"%Y%m%d" -d "${endDate} + 1 day"`

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

    echo $startDate

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

특정 파일 생성을 대기

스크립트를 이용해서 작업할 때 특정 파일이 생성되는 것을 대기했다가 작업을 처리해야 하는 경우가 있습니다. 이럴 때는 while문과 sleep 명령을 이용해서 파일이 생기는 것을 대기했다가 작업을 처리하면 됩니다.

#!/bin/bash

vFileLocation="s3://bucket-name/sample.file"

# vFileLocation을 2분에 한번씩 체크해서 파일이 생기면 종료 
while :
do
    vCount=`aws s3 ls ${vFileLocation} | wc -l`
    if [[ "${vCount}" == "1" ]]; then
        echo "file check done."
        break
    fi

    echo "file waiting..."
    sleep 2m
done


# [목적 명령어]

links

social