ETC 코딩/ETC

Do While 활용해서 일별/주별/월별로 돌아가는 loop.sh 만들기

세리둥절 2022. 9. 23. 19:39
반응형

특정 SQL(HQL) 파일을 날짜별로 돌리고 싶은데 START 날짜와 END 날짜를 지정해두고 차례로 자동으로 돌아갔으면 좋겠다! 이런 니즈가 너무 너무 많다. 그럴 때는 아래처럼 sh 파일을 만들고 추가로 실행할 파일의 경로를 적어준다

#!/bin/bash

start_dt=`date +"%Y%m%d" -d ${1}`
end_dt=`date +"%Y%m%d" -d ${2}`

#start_dt=`date +"%Y%m%d" -d "20191101"`
#end_dt=`date +"%Y%m%d" -d "20191110"`
end_dt=`date +"%Y%m%d" -d "${end_dt} + 1 day"`
current_dt="$start_dt"

#echo "$start_dt"
#echo "$end_dt"
echo '----------------------------------------------'
echo 'start_dt : '$start_dt
echo 'end_dt : '$end_dt
echo 'current_dt : '$end_dt
echo '----------------------------------------------'

while [ $current_dt -ne $end_dt ]
do
	echo "$current_dt"
	# 실행파일
	# bee --hivevar dt=$current_dt -f <hql file>
  # sh <tmp.sh> $current_dt
	current_dt=`date +"%Y%m%d" -d "${current_dt} + 1 day"`
done

 

 

나는 위의 파일을 주로 loop.sh 이라고 저장하는데,  저장한 후에 아래처럼 실행하면 2022-01-01 부터 2022-03-31 까지 지정한 파일이 차례대로 돌아가게 된다!

sh loop.sh '20220101' '20220331'

 

 

 

 

비슷한 논리를 이용해서 월별로 돌아가는 loop를 만들수도 있다.

#!/bin/bash

start_ym=`date +"%Y%m" -d ${1}`
end_ym=`date +"%Y%m" -d ${2}`

end_ym=`date +"%Y%m" -d "${end_ym} + 1 month"`
current_ym="$start_ym"

echo '----------------------------------------------'
echo 'start_ym : '$start_ym
echo 'end_ym : '$end_ym
echo 'current_ym : '$current_ym
echo '----------------------------------------------'

while [ $current_ym -ne $end_ym ]
do
	echo "$current_ym"
	# 실행파일
	# bee --hivevar exec_ym=$current_ym -f <hql file>
  	# sh <tmp.sh> $current_ym
	current_ym=`date +"%Y%m" -d "${current_ym}01 + 1 month"`
done
sh loop.sh '20220101' '20220331'

 

 

주별로 돌아가는 loop

#!/bin/bash

start_dt=`date +"%Y%m%d" -d ${1}`
end_dt=`date +"%Y%m%d" -d ${2}`

#start_dt=`date +"%Y%m%d" -d "20191101"`
#end_dt=`date +"%Y%m%d" -d "20191110"`
end_dt=`date +"%Y%m%d" -d "${end_dt} + 1 day"`
current_dt="$start_dt"

#echo "$start_dt"
#echo "$end_dt"
echo '----------------------------------------------'
echo 'start_dt : '$start_dt
echo 'end_dt : '$end_dt
echo 'current_dt : '$end_dt
echo '----------------------------------------------'

while [ $current_dt -le $end_dt ]
do
	echo "$current_dt"
	# 실행파일
	# bee --hivevar dt=$current_dt -f <hql file>
  # sh <tmp.sh> $current_dt
	current_dt=`date +"%Y%m%d" -d "${current_dt} + 7 day"`
done
반응형