Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104844
  • 博文数量: 4
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-04 09:59
文章分类

全部博文(4)

文章存档

2008年(4)

我的朋友

分类:

2008-03-11 15:31:41

想写一个日志清理脚本,用来清理保存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) |
0

上一篇:没有了

下一篇:分割字符串函数

给主人留下些什么吧!~~

seasheart2013-02-17 14:05:47

http://wenku.baidu.com/view/2f6d0c300b4c2e3f5727637c.html
上面有API你不用,傻逼

chinaunix网友2009-01-24 00:29:12

)_I[knLKHB J