Linux shell脚本示例(四)

Example No. 2
作为shell编写人员,经常面对数据格式不一致的问题,将数据标准话后输出是一个需要解决问题,本示例以MySQL的时间为例,脚本输入月、日、年三个参数,将其标准化后输出,月份以英文标准输出,年份如果是4个数字,直接输出,如果是0~69,则年份为2000~2069,如果是70~99,则年份为1970~1999;
脚本示例:

#!/bin/bash
#shell name:shell_format.sh
#author by woon
#数据标准化输出示例
Month_to_name()
{
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: 错误的月份格式:$1" >&2; exit 1
   esac
   return 0
}

#脚本主体
if [ $# -ne 3 ]; then
    echo "Usage: $0 month day year\nThe correct formats are 8 21 2018 or August 21 2018"
exit 1
fi

#判断年份是否是数字,并拼接年份
#判断是否是个位数
if [ -z $(echo $3 | sed ‘s/^[0-9]//g‘) ];then
    year=200$3
    #判断是否是10-69之间数字
elif [ -z $(echo $3 | sed ‘s/^[1-6][0-9]//g‘) ]; then
        year=20$3
elif [ -z $(echo $3 | sed s‘/^[7-9][0-9]//g‘) ]; then
    year=19$3
elif [ -z $(echo $3 | sed ‘s/^[0-9]\{4\}//g‘) ]; then
    year=$3
else
    echo "The yeat‘s formats are wrong:$3"
    exit 2
fi

#脚本主体
if [ -z $(echo $1 | sed ‘s/[[:digit:]]//g‘) ]; then
    Month_to_name $1
else
    month=$(${$1%${$1#?}}|tr ‘[a-z]‘ ‘[A-Z]‘)$(echo $1|cut -c2-3 | tr ‘[A-Z‘ ‘[a-z]‘)
fi
echo $month $2 $year
exit 0

运行结果:

原文地址:http://blog.51cto.com/woonli/2147445

时间: 2024-11-14 13:16:24

Linux shell脚本示例(四)的相关文章

老李分享:《Linux Shell脚本攻略》 要点(四)

老李分享:<Linux Shell脚本攻略> 要点(四) 1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2.grep用法 //在多级目录中对文本进行递归检索 [[email protected] program_test]# grep "yang" ./ -Rn ./test.txt:6:laoyang./right.txt:1:1 yang man //忽略大小写匹配 [[email protec

《Linux Shell脚本攻略》 笔记 第四章:高效文本处理

<Linux Shell脚本攻略> 笔记 第四章:高效文本处理 1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2.grep用法 //在多级目录中对文本进行递归检索 [[email protected] program_test]# grep "yang" ./ -Rn ./test.txt:6:laoyang ./right.txt:1:1 yang man //忽略大小写匹配 [[email pr

Linux shell脚本基础学习详细介绍(完整版)一

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Linux 脚本编写基础◆1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执

Linux shell脚本流程控制

博主搬家至51CTO,初来乍到,请多指教. 此次我们来通过实例解析Linux shell脚本流程控制 Linux shell脚本流程控制可分为三类:顺序执行,条件选择执行,循环执行 顺序执行:简单理解就是逐行执行脚本内容,逐行解读,逐行执行.(此处不做实例解析) 条件选择执行:可以理解为先进行某一条件的判断选择,再决定执行怎样的脚本内容.常见语句if case 条件选择语句:if if语句用法: 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件

Linux shell脚本中shift的用法说明

Linux shell脚本中shift的用法说明 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本). 示例1:依次读取输入的参数并打印参数个数: run.sh: #!/bin/bash while [ $# != 0 ];do echo "第一个参数为:$1,参数个数为:$#" shift done 输入如下命令运行:run.sh a b c d e f 结果显示如下: 第一个参数为:a

LINUX SHELL脚本攻略笔记[速查]

Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述符和重定向 cat 数组和关联数组 alias date 调试脚本 函数和参数 管道 读取命令输出 read 字段分隔符和迭代器 循环 比较和测试 find xargs tr md5sum sha1sum 对目录进行校验 sort uniq tempfile split bash变量匹配切分 exp

Linux Shell常用技巧(四) awk

Linux Shell常用技巧(四) awk 九.  awk实用功能: 和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行"选择"动作.如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上.如果一个动作没有模板,所有被动作指定的行都被处理.       1.  awk的基本格式:    /> awk 'pattern' filename    /> awk '{action}' filename    /> awk '

Linux Shell常用技巧(四)

九.  awk实用功能: 和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行“选择”动作.如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上.如果一个动作没有模板,所有被动作指定的行都被处理.       1.  awk的基本格式:    /> awk 'pattern' filename    /> awk '{action}' filename    /> awk 'pattern {action}' filename      

Linux----编写可靠Linux shell脚本的八个建议

编写可靠Linux shell脚本的八个建议 指定bash shell 脚本的第一行,#!之后应该是什么? 如果拿这个问题去问别人,不同的人的回答可能各不相同.我见过/usr/bin/env bash,也见过/bin/bash,还有/usr/bin/bash,还有/bin/sh,还有/usr/bin/env sh.这算是编程界的"'茴'字四种写法"了. 在多数情况下,以上五种写法都是等价的.但是,写过程序的人都知道:"少数情况"里往往隐藏着意想不到的坑. 如果系统的