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

一、问题

       输入日期格式字符串“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。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌托邦2号

博文不易,支持的请给予小小打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值