一、问题
输入日期格式字符串“month-day-year”,仅将month设置成三个字母显示,第一个字母大写第二到三个字母小写(判断day和year基本相似,此处暂不处理)。
先判断month是数字还是单词,若是单词取前三个字母并格式化,若为数字则直接对应成字母。
二、详解
#处理month为字母,第一个字母大写,其余小写
#!/bin/bash
MonthNumToName()
{
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 value $1" >&2 ; exit 1 ;;
esac
return 0
}
###main入口,传递三个参数month day year###
if [ $# -ne 1 ]
then
echo "Usage:$0 month-day-year or month/day/year"
exit 1
fi
set -- $(echo $1 | sed 's/[\/\-]/ /g') #处理MM/DD/YYYY or MM-DD-YYYY 的形式,set 的--命令可以将其后的参数赋予位置参数$1、$2和$3
#判断month是否为数字,替换串中所有数字为空则为数字
if [ -z $(echo $1 | sed 's/[[:digit:]]//g') ]
then
MonthNumToName $1
else
#取第一个字母变大写,取2-3字母变小写
month="$(echo $1 | cut -c1 | tr '[:lower:]' '[:upper:]')" #等价tr "[a-z]" "[A-Z]"小写字母转大写
month="$month$(echo $1 | cut -c2-3 | tr '[:upper:]' '[:lower:]')" #字符串合并
fi
echo $month $2 $3 #输出结果
exit 0
三、总结
(1)旨在熟练使用case结构。
(2)熟悉set --、tr和cut等工具的用法。
(3)上述若有更多想法,可请大家留言,也可联系本人yang.ao@i-soft.com.cn。