想写一个日志清理脚本,用来清理保存30天以前的日志,但是没有没有一个好的算法计算30天以前的具体日期,随在网上查询,发现一个强人写的计算脚本,虽然基本算法自己看懂了 ,但是局限于自己的shell水平不高,有些语句不明白具体意思,随将其一些语句进行简化,并且将计算几天前的日期与计算几天后的日期,两个编写在一起,组成以下的函数; 函数又两个参数:1、起始日期,例:20080302 2、偏移天数,负数为计算几天前的日期,整数为计算几天后的日期。最后结果存在$result_date 变量当中
#!/bin/sh
get_result_date()
{
start_date=$1
days=$2
yy=`echo $start_date|cut -c 1-4`
mm=`echo $start_date|cut -c 5-6`
dd=`echo $start_date|cut -c 7-8`
if [ $days -le 0 ]
then
#get the result-date several days before start-date
sav_dd=$days
days=`expr $days + $dd`
while [ $days -le 0 ]
do
mm=`expr $mm - 1`
[ $mm -eq 0 ] && mm=12 && yy=`expr $yy - 1`
aaa=`cal $mm $yy`
bbb=`echo $aaa|awk '{print $NF}'`
days=`expr $days + $bbb`
done
dd=`printf "%02d" $days`
mm=`expr $mm + 0`
mm=`printf "%02d" $mm`
result_date=$yy$mm$dd
else
#get the result-date serveral days after start-date
days=`expr $days + $dd`
while [ $days -gt 0 ]
do
aaa=`cal $mm $yy`
bbb=`echo $aaa|awk '{print $NF}'`
sav_dd=$days
sav_mm=$mm
sav_yy=$yy
days=`expr $days - $bbb`
mm=`expr $mm + 1`
[ $mm -gt 12 ] && mm=1 && yy=`expr $yy + 1`
done
dd=`printf "%02d" $sav_dd`
mm=`expr $mm + 0`
mm=`printf "%02d" $sav_mm`
result_date=$yy$mm$dd
fi
}
阅读(6001) | 评论(2) | 转发(0) |