bashで日付でループ

よく使うが毎回忘れがちなのでメモ。

#!/bin/bash

# USAGE
# $(0) [ -f FROM_DATE ] [ -t TO_DATE ]
#

_from=20180101
_to=20180105

while getopts f:t: OPT
do
    case ${OPT} in
    f)
        _from=${OPTARG}
        ;;
    t)
        _to=${OPTARG}
        ;;
    esac
done


_epocStart=$(date -d "${_from}" +"%s")
_epocEnd=$(date -d "${_to}" +"%s")
_epocIter=${_epocStart}

echo "FROM: ${_from} ($(date +%Y/%m/%d -d @${_epocStart}))"
echo "TO  : ${_to} ($(date +%Y/%m/%d -d @${_epocEnd}))"


while :
do
    if [ ! ${_epocIter} -le ${_epocEnd} ]
    then
        break
    fi

    _ymdIter=$(date +%Y%m%d -d @${_epocIter})

    # Do Anything in HERE
    sleep 1

    ((_epocIter = _epocIter + 86400))
done

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です