shell实例浅谈之八日期串中month设为特殊格式

来源:互联网 发布:服务器怎么安装软件 编辑:程序博客网 时间:2024/05/22 06:27

一、问题

       输入日期格式字符串“month-day-year”,仅将month设置成三个字母显示,第一个字母大写第二到三个字母小写(判断day和year基本相似,此处暂不处理)。

       先判断month是数字还是单词,若是单词取前三个字母并格式化,若为数字则直接对应成字母。     

二、详解

[cpp] view plaincopy
  1. #处理month为字母,第一个字母大写,其余小写  
  2. #!/bin/bash  
  3. MonthNumToName()  
  4. {  
  5.     case $1 in  
  6.     1) month="Jan"     ;;  2) month="Feb"    ;;  
  7.     3) month="Mar"     ;;  4) month="Apr"    ;;  
  8.     5) month="May"     ;;  6) month="Jun"    ;;  
  9.     7) month="Jul"     ;;  8) month="Aug"    ;;  
  10.     9) month="Sep"     ;;  10) month="Oct"   ;;  
  11.     11) month="Nov"    ;;  12) month="Dec"   ;;  
  12.     *) echo "$0:unknown value $1" >&2 ; exit 1 ;;  
  13.     esac  
  14.     return 0  
  15. }  
  16.   
  17. ###main入口,传递三个参数month day year###  
  18. if [ $# -ne 1 ]  
  19. then  
  20.     echo "Usage:$0 month-day-year or month/day/year"  
  21.     exit 1  
  22. fi  
  23. set -- $(echo $1 | sed 's/[\/\-]/ /g')  #处理MM/DD/YYYY or MM-DD-YYYY 的形式,set 的--命令可以将其后的参数赋予位置参数$1、$2和$3  
  24.   
  25. #判断month是否为数字,替换串中所有数字为空则为数字  
  26. if [ -z $(echo $1 | sed 's/[[:digit:]]//g') ]  
  27. then  
  28.     MonthNumToName $1  
  29. else  
  30.     #取第一个字母变大写,取2-3字母变小写  
  31.     month="$(echo $1 | cut -c1 | tr '[:lower:]' '[:upper:]')" #等价tr "[a-z]" "[A-Z]"小写字母转大写  
  32.     month="$month$(echo $1 | cut -c2-3 | tr '[:upper:]' '[:lower:]')"  #字符串合并  
  33. fi  
  34.   
  35. echo $month $2 $3    #输出结果  
  36. exit 0  
0 0
原创粉丝点击