linux shell实现转换输入日期的格式
对于用户输入日期的合法性检验,是个很重要的问题,这个例子是简单得取得用户输入的日期,并转换为相应的格式,但不完美,原因请看后文。
#!/bin/sh
#normdate--Normalizesmonthfieldindatespecification
#tothreeletters,firstlettercapitalized.Ahelper
#functionforScript#7,valid-date.Exitsw/zeroifnoerror.
monthnoToName()
{
#Setsthevariable'month'totheappropriatevalue
case$1in
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:Unknownnumericmonthvalue$1">&2;exit1
esac
return0
}
##Beginmainscript
if[$#-ne3];then
echo"Usage:$0monthdayyear">&2
echo"TypicalinputformatsareAugust31962and832002">&2
exit1
fi
if[$3-lt99];then
echo"$0:expectedfour-digityearvalue.">&2;exit1
fi
if[-z$(echo$1|sed's/[[:digit:]]//g')];then
monthnoToName$1
else
#Normalizetofirstthreeletters,firstupper,restlowercase
month="$(echo$1|cut-c1|tr'[:lower:]''[:upper:]')"
month="$month$(echo$1|cut-c2-3|tr'[:upper:]''[:lower:]')"
fi
echo$month$2$3
exit0
脚本分析:
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)这个脚本最大的缺陷是虽然将日期的格式转换了,但不能检测过滤不存在的日期。
热门推荐
7 简短的二胎祝福语
10 简短霸气女儿生日 祝福语
11 祝福语高考小众诗句简短
12 元旦祝福语20秒简短
13 老师过年祝福语大全 简短
14 一生祝福语简短
15 产检祝福语简短霸气
16 朋友店开张祝福语简短
17 生日爱情祝福语大全简短
18 朋友女儿生日祝福语 简短