快速业务通道

读书笔记第三集--转换输入日期的格式

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-31

对于用户输入日期的合法性检验,是个很重要的问题,这个例子是简单得取得用户输入的日期,并转换为相应的格式,但不完美,原因请看后文.

The Code

#!/bin/sh

# normdate -- Normalizes month field in date specification

# to three letters, first letter capitalized. A helper

# function for Script #7, valid-date. Exits w/ zero if no error.



monthnoToName()

{

  # Sets the variable ''month'' to the appropriate value

  case $1 in

    1 ) month="Jan"    ;;  2 ) month="Feb"    ;;

    3 ) month="Mar"    ;;  4 ) month="Apr"    ;;

    5 ) month="May"    ;;  6 ) month="Jun"    ;;

    7 ) month="Jul"    ;;  8 ) month="Aug"    ;;

    9 ) month="Sep"    ;;  10) month="Oct"    ;;

    11) month="Nov"    ;;  12) month="Dec"    ;;

    * ) echo "$0: Unknown numeric month value $1" >&2; exit 1

   esac

   return 0

}



## Begin main script



if [ $# -ne 3 ] ; then

  echo "Usage: $0 month day year" >&2

  echo "Typical input formats are August 3 1962 and 8 3 2002" >&2

  exit 1

fi



if [ $3 -lt 99 ] ; then

  echo "$0: expected four-digit year value." >&2; exit 1

fi



if [ -z $(echo $1|sed ''s/[[:digit:]]//g'') ]; then

  monthnoToName $1

else

  # Normalize to first three letters, first upper, rest lowercase

  month="$(echo $1|cut -c1|tr ''[:lower:]'' ''[:upper:]'')"

  month="$month$(echo $1|cut -c2-3 | tr ''[:upper:]'' ''[:lower:]'')"

fi



echo $month $2 $3



exit 0





脚本分析:

1) 定义了函数monthnoToName(),用来转换用户输入的数字月份

2)判断参数的个数是否为3个,其次判断年份,接着是转换月份格式.

3)if [ -z $(echo $1|sed ''s/[[:digit:]]//g'') ];  这句话有点意思,是如果$1被执行sed替换的话,即$1中存在数字

   则执行函数monthnoToName(),来转换数字月份.

4)month="$(echo $1|cut -c1|tr ''[:lower:]'' ''[:upper:]'')"

   month="$month$(echo $1|cut -c2-3 | tr ''[:upper:]'' ''[:lower:]'')"

 将输入的字符月份转换为标准格式.

5)这个脚本最大的缺陷是虽然将日期的格式转换了,但不能检测过滤不存在的日期.
拥有帝国一切,皆有可能。欢迎访问phome.net

本文出自 “你就当我是浮夸吧” 博客,请务必保留此出处http://2804976.blog.51cto.com/2794976/590187

拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号