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 |