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 |