shell中输出从某一天起所有日期的方法

 最近在项目中有这么一个需求,导入历史所有日志到DB中,而导入的脚本usage如下:

./importApiaccessLog-main.py <date like 20120506>

因此需要从一个很早的时间点开始,依次调用该脚本,顺序传入日期。那么每年每个月的天数都会不同,怎么办,写了个shell脚本,以后面对这种需求,可以直接板砖了。不多说,上脚本:

#!/bin/bash
 
datefile="datefile"
echo > $datefile
 
function importOneMonthLog()
{
	start_day=1
    year=$1
    month=$2
    total_day_num=$3
    while [ $start_day -le $total_day_num ] 
    do
        if [ $start_day -lt 10 ];then
            echo ${year}${month}0${start_day} >> $datefile
        else
            echo ${year}${month}${start_day} >> $datefile
        fi
        start_day=`expr $start_day + 1`
    done
}
 
function importAllLogs()
{
    # 能够符合计算的log月份
    MOST_BEFORE_YEAR_MONTH="201202"
    n=1
    LAST_YEAR_MONTH=`date -d '1 months ago' +%Y%m`
    while [ $LAST_YEAR_MONTH -gt $MOST_BEFORE_YEAR_MONTH ] 
    do
        LAST_YEAR_MONTH=`date -d ''$n' months ago' +%Y%m`
        LAST_YEAR=`date -d ''$n' months ago' +%Y`
        LAST_MONTH=`date -d ''$n' months ago' +%m`
        LAST_DAY_NUM=`cal $LAST_MONTH $LAST_YEAR | xargs | awk '{print $NF}'`
		importOneMonthLog ${LAST_YEAR} ${LAST_MONTH} ${LAST_DAY_NUM}
        n=`expr $n + 1`
    done
    NOW_YEAR_MONTH=`date +%Y%m`
    NOW_YEAR=`date +%Y`
    NOW_MONTH=`date +%m`
    NOW_DAY_NUM=`date -d "1 day ago" +%d`
	importOneMonthLog ${NOW_YEAR} ${NOW_MONTH} ${NOW_DAY_NUM} 
}
 
importAllLogs
 
sort $datefile > ${datefile}.sort
while read line
do
    ./importApiaccessLog-main.py $line
    #echo $line
done < ${datefile}.sort

 

Leave a Comment.