免费注册 查看新帖 |

Chinaunix

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

[SCO UNIX] [转贴]计算日期的shell程序 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之北控
日期:2022-03-04 22:35:50
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-11-09 09:16 |只看该作者 |倒序浏览


  1. 作者:文戈居士

  2. $ date_offset.sh

  3. usage()
  4. {
  5. echo "使用方法:"
  6. echo " date_offset.sh YYYY/MM/DD offset"
  7. echo "\n举例:"
  8. echo " date_offset.sh 2001/10/01 -1 返回: 2001/09/30"
  9. echo " date_offset.sh 2001/10/01 5 返回: 2001/10/06\n"
  10. exit 2
  11. }

  12. yesterday()
  13. {
  14. YEAR=`echo $1|awk -F "/" '{print $1}'`
  15. MONTH=`echo $1|awk -F "/" '{print $2}'`
  16. DAY=`echo $1|awk -F "/" '{print $3}'`
  17. if [ $DAY -eq 1 ]
  18. then
  19. if [ $MONTH -eq 1 ]
  20. then
  21. YEAR=`expr $YEAR - 1`
  22. MONTH=12
  23. else
  24. MONTH=`expr $MONTH - 1`
  25. fi
  26. DAY=`echo \`cal $MONTH $YEAR\`|tail -n1|awk '{print $NF}'`
  27. else
  28. DAY=`expr $DAY - 1`
  29. fi
  30. echo "$YEAR $MONTH $DAY"|awk '{if (length($2)==1) $2=0$2;if (length($3)==1) $3=0$3;printf "%s/%s/%s",$1,$2,$3}'
  31. }

  32. tomorrow()
  33. {
  34. YEAR=`echo $1|awk -F "/" '{print $1}'`
  35. MONTH=`echo $1|awk -F "/" '{print $2}'`
  36. DAY=`echo $1|awk -F "/" '{print $3}'`
  37. LASTDAY=`echo \`cal $MONTH $YEAR\`|tail -n1|awk '{print $NF}'`
  38. if [ $DAY -eq $LASTDAY ]
  39. then
  40. if [ $MONTH -eq 12 ]
  41. then
  42. YEAR=`expr $YEAR + 1`
  43. MONTH=1
  44. else
  45. MONTH=`expr $MONTH + 1`
  46. fi
  47. DAY=1
  48. else
  49. DAY=`expr $DAY + 1`
  50. fi
  51. echo "$YEAR $MONTH $DAY"|awk '{if (length($2)==1) $2=0$2;if (length($3)==1) $3=0$3;printf "%s/%s/%s",$1,$2,$3}'
  52. }

  53. # 检查参数数目
  54. if [ $# -ne 2 ]
  55. then
  56. echo "\n调用出错: 参数数目不对!\n"
  57. usage
  58. fi

  59. # 检查参数1长度
  60. if [ `expr length $1` -ne 10 ]
  61. then
  62. echo "\n调用出错: 日期格式不正确!\n"
  63. usage
  64. fi

  65. TMP_YEAR=`echo $1|awk -F "/" '{print $1}'`
  66. TMP_MONTH=`echo $1|awk -F "/" '{print $2}'`
  67. TMP_DAY=`echo $1|awk -F "/" '{print $3}'`

  68. if ! expr $TMP_YEAR + $TMP_MONTH + $TMP_DAY >;/dev/null 2>;&1
  69. then
  70. echo "\n调用出错: 日期格式不正确!\n"
  71. usage
  72. fi

  73. if [ `expr length $TMP_YEAR` -ne 4 ]
  74. then
  75. echo "\n调用出错: 日期格式不正确!\n"
  76. usage
  77. fi

  78. if [ $TMP_MONTH -lt 1 ] || [ $TMP_MONTH -gt 12 ]
  79. then
  80. echo "\n调用出错: 日期格式不正确!\n"
  81. usage
  82. fi

  83. LAST_DAY=`echo \`cal $TMP_MONTH $TMP_YEAR\`|tail -n1|awk '{print $NF}'`
  84. if [ $TMP_DAY -lt 1 ] || [ $TMP_DAY -gt $LAST_DAY ]
  85. then
  86. echo "\n调用出错: 日期格式不正确!\n"
  87. usage
  88. fi

  89. # 检查参数2是否为数值
  90. expr $2 + 0 >;/dev/null 2>;&1
  91. if [ ! $? ]
  92. then
  93. echo "\n调用出错: 日期偏移量应为整数值!\n"
  94. usage
  95. fi

  96. TMP_DATE=$1
  97. if [ $2 -lt 0 ]
  98. then
  99. INC=-1
  100. COUNT=$2
  101. else
  102. INC=1
  103. COUNT=`expr 0 - $2`
  104. fi
  105. while [ $COUNT -lt 0 ]
  106. do
  107. if [ $INC -gt 0 ]
  108. then
  109. TMP_DATE=`tomorrow $TMP_DATE`
  110. else
  111. TMP_DATE=`yesterday $TMP_DATE`
  112. fi
  113. COUNT=`expr $COUNT + 1`
  114. done
  115. echo $TMP_DATE
  116. #在要SCO 5.0.5下测试通过。

复制代码

论坛徽章:
0
2 [报告]
发表于 2003-11-09 12:36 |只看该作者

[转贴]计算日期的shell程序

加精

论坛徽章:
0
3 [报告]
发表于 2003-11-09 15:39 |只看该作者

[转贴]计算日期的shell程序

这么好的SHELL编程

论坛徽章:
0
4 [报告]
发表于 2003-11-09 22:53 |只看该作者

[转贴]计算日期的shell程序

没看懂,要有注释就好了.............

论坛徽章:
0
5 [报告]
发表于 2003-11-10 09:45 |只看该作者

[转贴]计算日期的shell程序

这个shell程序实用意义不大,不过看的出来作者shell编程能力颇高,呵呵。另外,建议作者可以考虑改进算法,不必这样一天天循环加减。

论坛徽章:
0
6 [报告]
发表于 2003-12-19 16:01 |只看该作者

[转贴]计算日期的shell程序

看不懂啊……
还要学习

论坛徽章:
0
7 [报告]
发表于 2006-01-04 22:33 |只看该作者
精彩

论坛徽章:
0
8 [报告]
发表于 2007-07-17 09:16 |只看该作者

我在SCO 5.0.5下运行的时候,报错

我在SCO 5.0.5下运行的时候,报错,说第74行的分号unexpect.请问这是怎么回事?
谢谢

论坛徽章:
0
9 [报告]
发表于 2008-04-18 11:09 |只看该作者
原帖由 我在用龙卡 于 2007-7-17 09:16 发表
我在SCO 5.0.5下运行的时候,报错,说第74行的分号unexpect.请问这是怎么回事?
谢谢

删除就可以了

论坛徽章:
0
10 [报告]
发表于 2008-04-23 16:47 |只看该作者

回复 #1 sdccf 的帖子

果然这里有强人 先拿来学习学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP