免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-12 14:54 |只看该作者 |倒序浏览
本帖最后由 fufq 于 2010-02-12 14:57 编辑 \n\n脚本内容如下:\r\nroot@# more offlinereason.sh\r\n#!/bin/ksh\r\n\r\nYEAR=`date +%Y`;\r\ndate1=`date +%d`; #当前日期,用以判断是否为每月1日\r\nMONTH=`date +%m`;\r\nyesterday1=`TZ=$TZ+32 date +%Y%m%d`; #昨天的日期,格式:20100210,查询条件\r\nyesterday2=`TZ=$TZ+32 date +%Y_%m_%d`;#昨天的日期,格式:2010_02_10,用做导出的文件名\r\n\r\necho  \"1-Year is \"$YEAR \" MONTH IS \"$MONTH \", yes1 is \"$yesterday1>offlinereason.sql\r\nif [ $date1 -eq 01 ]; then   #当前日期为01日,则话单表月份需取上个月月份\r\n{\r\n   if [ $MONTH -eq 01 ]; then  #当前月份为01月份,则需要获取到去年12月份的值,否则保持当前值不变\r\n    {\r\n      MONTH=12\r\n      YEAR=`expr $YEAR  - 1`\r\n      echo \"date is 01,and month is 01,MONTH-1 IS \"$MONTH\" ,YEAR is \"$YEAR>>offlinereason.sql\r\n\r\n    };else                   #非1月份,则当日期为01日的时候,月份直接取上一月月份,年不变;\r\n    {\r\n     MONTH=`expr $MONTH - 1` \r\n     echo \"date is 01,month is not 01,than month-1 is \"$MONTH>>offlinereason.sql\r\n    } ;fi\r\n };\r\nfi  #如果当前日期不为01,则,月份保持为当月不变\r\n\r\necho \"unload to $yesterday2.txt\r\nselect * from rec_210_$YEAR$MONTH where substr(begintime,1,=\'$yesterday1\'\">>offlinereason.sql \r\n\r\n==========================================\r\n当前系统日期:\r\nroot@# date\r\n2010年01月01日 星期五 14时41分14秒 CST\r\n==========================================\r\n脚本执行结果如下:\r\nroot@CNCSCDN-SHPTL1 # more offlinereason.sql\r\n1-Year is 2010  MONTH IS 01 , yes1 is 20091230\r\ndate is 01,and month is 01,MONTH-1 IS 12 ,YEAR is 2009\r\nunload to 2009_12_30.txt\r\nselect * from rec_210_200912 where substr(begintime,1,=\'20091230\'\r\n\r\n+================================\r\n问题:\r\n1、为何每月01日的话,yesterday取到的前一天日期都是上月的30日,永远取不到31日?\r\n2、同1,怎么才可以按不同的月份取到前一天日期实际的30日、31日或者28日?\r\n\r\n3、当当前月份为02月时,最后结果MONTH-1=1了,而不是我要的01,如:\r\n\r\nroot@# date\r\n2010年02月01日 星期一 14时30分20秒 CST\r\n执行结果:\r\nroot@ # more offlinereason.sql\r\n1-Year is 2010  MONTH IS 02 , yes1 is 20100130\r\ndate is 01,month is not 01,than month-1 is 1\r\nunload to 2010_01_30.txt\r\nselect * from rec_210_20101 where substr(begintime,1,=\'20100130\'

论坛徽章:
0
2 [报告]
发表于 2010-02-15 18:32 |只看该作者
安装GNU Coreutils, 运用 GNU date:\r\n\r\n% date -d \"1 month ago\"\r\n% date -d \"1 day ago\"
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP