LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 947|回复: 2

求sh闰年算法

[复制链接]
发表于 2004-7-1 19:38:37 | 显示全部楼层 |阅读模式
小弟用sh写了个算当前日期前一天的脚本,脚本如下。
但不知在sh下如何实现闰年算法。请高手指点一下。如果不行优化下面代码也行

  1. #!/bin/sh

  2. sysyear=`date +%Y`
  3. sysmonth=`date +%m`
  4. sysday=`date +%d`
  5. logyear=
  6. logmonth=
  7. logday=
  8. mday=

  9. case $sysmonth in
  10. 01|02|04|06|08|09|11)
  11.     mday=31
  12. ;;

  13. 05|07|10|12)
  14.     mday=30
  15. ;;

  16. 03)
  17.     mday=28  #求闰年算法
  18. ;;

  19. *)
  20.     echo "date error!!"
  21.     exit 1
  22. ;;
  23. esac

  24. if [ "$sysday" == "01" ]; then
  25.     if [ "$sysmonth" == "01" ]; then
  26.         logyear=`expr $sysyear - 1`
  27.         logmonth=12
  28.         logday=31
  29.     else
  30.         logyear=$sysyear
  31.         case $sysmonth in
  32.         02|03|04|05|06|07|08|09)
  33.             logmonth=0`expr $sysmonth - 1`
  34.         ;;
  35.         *)
  36.             logmonth=`expr $sysmonth - 1`
  37.         ;;
  38.         esac
  39.         logday=$mday
  40.     fi
  41. else
  42.     logyear=$sysyear
  43.     logmonth=$sysmonth
  44.     case $sysday in
  45.     02|03|04|05|06|07|08|09)
  46.         logday=0`expr $sysday - 1`
  47.     ;;
  48.     *)
  49.         logday=`expr $sysday - 1`
  50.     ;;
  51.     esac
  52. fi

  53. logfile=ex$logyear$logmonth$logday.log
  54. echo $logfile

  55. unset sysyear sysmonth sysday mday
  56. unset logyear logmonth logday logfile
复制代码
发表于 2004-7-1 21:31:56 | 显示全部楼层
我记得是能被4整除且不能被100整除的年是闰年(能被400整除的也是闰年)。
最初由 5sky 发表

case $sysmonth in
01|02|04|06|08|09|11)
    mday=31
;;

05|07|10|12)
    mday=30
;;

03)
    mday=28  #求闰年算法
;;

[/code]

这里有点看不懂,为什么02,04,06,09,11的mday是31?  有28天的为何是03?
发表于 2004-7-2 12:01:38 | 显示全部楼层
参考下面连接提供的方法和地址
http://www.linuxsir.cn/bbs/showt ... hlight=%C8%F2%C4%EA
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表