LinuxSir.cn,穿越时空的Linuxsir!

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

脚本 输入年、月、日计算星期[独创^_^]

[复制链接]
发表于 2006-2-22 15:36:38 | 显示全部楼层 |阅读模式
  1. #!/bin/bash
  2. # week
  3. #QQ:82386723  E-mail:sc_fan@163.com

  4. value=year

  5. error()
  6. {
  7. echo $value error! please input again.
  8. continue
  9. }

  10. while
  11.     read -p "Please input $value: " tmp
  12. do
  13.        if [ "$tmp" ]; then
  14.         if [ `echo $tmp | awk '{if($0~/[^0-9]/) print "1"}'` ]; then
  15.            echo $value error! please input again.
  16.            continue
  17.         fi
  18.         else
  19.            error
  20.        fi
  21.       
  22.        case $value in
  23.          year)
  24.             value=month
  25.             year=$tmp
  26.             continue
  27.          ;;
  28.          month)
  29.             if [ $tmp -gt 0 -a $tmp -le 12 ]; then
  30.                value=day
  31.                month=$tmp
  32.                continue
  33.              else
  34.                 error
  35.             fi
  36.          ;;
  37.          day)
  38.             case $month in
  39.               1|3|5|7|8|10|12)
  40.                  if [ $tmp -gt 0 -a $tmp -le 31 ]; then
  41.                     day=$tmp
  42.                     break
  43.                   else
  44.                      error
  45.                  fi
  46.               ;;
  47.               4|6|9|11)
  48.                  if [ $tmp -gt 0 -a $tmp -le 30 ]; then
  49.                     day=$tmp
  50.                     break
  51.                   else
  52.                      error
  53.                  fi
  54.               ;;
  55.               2)
  56.                  case $[year%4] in
  57.                    0)
  58.                       if [ $tmp -gt 0 -a $tmp -le 29 ]; then
  59.                          day=$tmp
  60.                          break
  61.                        else
  62.                           echo $value error! $year is leap year, input again.
  63.                           continue
  64.                       fi
  65.                    ;;
  66.                    *)
  67.                       if [ $tmp -gt 0 -a $tmp -le 28 ]; then
  68.                          day=$tmp
  69.                          break
  70.                        else
  71.                           error
  72.                       fi
  73.                    ;;
  74.                  esac
  75.               ;;
  76.             esac
  77.          ;;
  78.        esac
  79. done

  80. century=$[year/100+1]
  81. declare -i tmp=0

  82. for (( i = 0; i < $[year%28]; i++))
  83. do  if [ $[i%4] = 0 ]; then
  84.        tmp=$[tmp+366]
  85.      else
  86.         tmp=$[tmp+365]
  87.     fi
  88. done

  89. for (( i = 1; i < $month; i++))
  90. do  case $i in
  91.       1|3|5|7|8|10|12)
  92.          tmp=$[tmp+31]
  93.       ;;
  94.       4|6|9|11)
  95.          tmp=$[tmp+30]
  96.       ;;
  97.       2)
  98.          if [ $[year%4] = 0 ]; then
  99.             tmp=$[tmp+29]
  100.           else
  101.              tmp=$[tmp+28]
  102.          fi
  103.       ;;
  104.     esac
  105. done

  106. tmp=$[(tmp+day)%7]
  107. week=(Thursday Friday Saturday Sunday Monday Tuesday Wednesday)
  108. week=${week[tmp]}

  109. echo -e "\nCentury $century $year.$month.$day $week\n"
复制代码


本人使用linux半年多了,水平不济可能有比较罗嗦的语句,望各位不要见笑,还请大家多多指教。
上面的脚本是我自己根据一些规律写出来的,加入了点判定,如果输入字母和符号等错误会提示,从公元0年以后的所有日期都可以算出星期,如果谁有这样的脚本希望帖出来,呵呵
发表于 2006-2-23 13:10:33 | 显示全部楼层
支持原窗!!!
BTW: linux下的date和cal这俩实用工具都可以
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-23 14:19:23 | 显示全部楼层
呵呵,我的脚本再加上几句话公元前、后的都可以算了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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