免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4444 | 回复: 1
打印 上一主题 下一主题

solaris 5.8下的一个shell问题,关于取前一天日期和前一月份 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-12 14:54 |只看该作者 |倒序浏览
本帖最后由 fufq 于 2010-02-12 14:57 编辑

脚本内容如下:
root@# more offlinereason.sh
#!/bin/ksh

YEAR=`date +%Y`;
date1=`date +%d`; #当前日期,用以判断是否为每月1日
MONTH=`date +%m`;
yesterday1=`TZ=$TZ+32 date +%Y%m%d`; #昨天的日期,格式:20100210,查询条件
yesterday2=`TZ=$TZ+32 date +%Y_%m_%d`;#昨天的日期,格式:2010_02_10,用做导出的文件名

echo  "1-Year is "$YEAR " MONTH IS "$MONTH ", yes1 is "$yesterday1>offlinereason.sql
if [ $date1 -eq 01 ]; then   #当前日期为01日,则话单表月份需取上个月月份
{
   if [ $MONTH -eq 01 ]; then  #当前月份为01月份,则需要获取到去年12月份的值,否则保持当前值不变
    {
      MONTH=12
      YEAR=`expr $YEAR  - 1`
      echo "date is 01,and month is 01,MONTH-1 IS "$MONTH" ,YEAR is "$YEAR>>offlinereason.sql

    };else                   #非1月份,则当日期为01日的时候,月份直接取上一月月份,年不变;
    {
     MONTH=`expr $MONTH - 1`
     echo "date is 01,month is not 01,than month-1 is "$MONTH>>offlinereason.sql
    } ;fi
};
fi  #如果当前日期不为01,则,月份保持为当月不变

echo "unload to $yesterday2.txt
select * from rec_210_$YEAR$MONTH where substr(begintime,1,='$yesterday1'">>offlinereason.sql

==========================================
当前系统日期:
root@# date
2010年01月01日 星期五 14时41分14秒 CST
==========================================
脚本执行结果如下:
root@CNCSCDN-SHPTL1 # more offlinereason.sql
1-Year is 2010  MONTH IS 01 , yes1 is 20091230
date is 01,and month is 01,MONTH-1 IS 12 ,YEAR is 2009
unload to 2009_12_30.txt
select * from rec_210_200912 where substr(begintime,1,='20091230'

+================================
问题:
1、为何每月01日的话,yesterday取到的前一天日期都是上月的30日,永远取不到31日?
2、同1,怎么才可以按不同的月份取到前一天日期实际的30日、31日或者28日?

3、当当前月份为02月时,最后结果MONTH-1=1了,而不是我要的01,如:

root@# date
2010年02月01日 星期一 14时30分20秒 CST
执行结果:
root@ # more offlinereason.sql
1-Year is 2010  MONTH IS 02 , yes1 is 20100130
date is 01,month is not 01,than month-1 is 1
unload to 2010_01_30.txt
select * from rec_210_20101 where substr(begintime,1,='20100130'

论坛徽章:
0
2 [报告]
发表于 2010-02-15 18:32 |只看该作者
安装GNU Coreutils, 运用 GNU date:

% date -d "1 month ago"
% date -d "1 day ago"
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP