출처
설명
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
# [목적 명령어]