比如某shell脚本需要传一个起始日期来处理数据如下
sh test.sh $1 $2
#!/bin/bash
start_day=$1
end_day=$2
days=`seq $start_day $end_day`
for day in $days
do
echo $day
done
同一月份的起始日期依次替增没有问题,当起始日期为 20150501-20150610时,会出现20150531..20150599无效日期如何避免修改如下过滤无效日期
方法一
#!/bin/bash
datebeg=$1
dateend=$2
days=`seq $datebeg $dateend`
for day in $days
do
mouth=`echo $day|cut -c5-6`
if [ `echo $day|cut -c7-8` -gt `cal -m $mouth|xargs echo|awk '{print $NF}'` ];then
continue
fi
echo $day
done
解释一下
#cal 获取某月的最后一天
cal -m $mouth|xargs echo|awk '{print $NF}'
方法二
#!/bin/bash
datebeg=$1
dateend=$2
beg_s=`date -d "$datebeg" +%s`
end_s=`date -d "$dateend" +%s`
while [ "$beg_s" -le "$end_s" ]
do
day=`date -d '1970-01-01 UTC '$beg_s' seconds' +"%Y%m%d"`
echo $day
beg_s=$((beg_s+86400))
done
解释一下
#换算成linux时间戳格式,每隔一天加86400秒
date -d "20150604" +%s
#再把时间戳格式换算成日期格式
date -d '1970-01-01 UTC 1433347200 seconds' +"%Y%m%d"