linux shell实现转换输入日期的格式

 更新时间:2016年08月14日 11:33:26   投稿:mdxy-dxy  
对于用户输入日期的合法性检验,是个很重要的问题,这个例子是简单得取得用户输入的日期,并转换为相应的格式,但不完美,原因请看后文

对于用户输入日期的合法性检验,是个很重要的问题,这个例子是简单得取得用户输入的日期,并转换为相应的格式,但不完美,原因请看后文。

#!/bin/sh
# normdate -- Normalizes month field in date specification
# to three letters, first letter capitalized. A helper
# function for Script #7, valid-date. Exits w/ zero if no error.

monthnoToName()
{
 # Sets the variable 'month' to the appropriate value
 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 numeric month value $1" >&2; exit 1
  esac
  return 0
}

## Begin main script

if [ $# -ne 3 ] ; then
 echo "Usage: $0 month day year" >&2
 echo "Typical input formats are August 3 1962 and 8 3 2002" >&2
 exit 1
fi

if [ $3 -lt 99 ] ; then
 echo "$0: expected four-digit year value." >&2; exit 1
fi

if [ -z $(echo $1|sed 's/[[:digit:]]//g') ]; then
 monthnoToName $1
else
 # Normalize to first three letters, first upper, rest lowercase
 month="$(echo $1|cut -c1|tr '[:lower:]' '[:upper:]')"
 month="$month$(echo $1|cut -c2-3 | tr '[:upper:]' '[:lower:]')"
fi

echo $month $2 $3

exit 0

脚本分析:
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)这个脚本最大的缺陷是虽然将日期的格式转换了,但不能检测过滤不存在的日期。

相关文章

  • Shell编程中while与for的区别及用法详解

    Shell编程中while与for的区别及用法详解

    在shell编程中经常用到循环,常用的循环有for和while循环两种。while循环默认以行读取文件,而for循环以空格读取文件切分文件,本篇就结合现网的一些使用示例说说二者的用法和区别
    2016-02-02
  • 用shell脚本和c语言将大写字母转成小写的代码

    用shell脚本和c语言将大写字母转成小写的代码

    最近在学shell编程,在网上看到tr '[:upper:]' '[:lower:]' 可以把字符串中大写字母转换成小写字母,我就在这个的基础上写了一个脚本来自己学习学习
    2013-08-08
  • 3个备份系统文件并邮件发送的Shell脚本分享

    3个备份系统文件并邮件发送的Shell脚本分享

    这篇文章主要介绍了3个备份系统文件并邮件发送的Shell脚本分享,3个脚本分别对应了普通需求脚本、推荐脚本、大文件需求脚本,需要的朋友可以参考下
    2014-09-09
  • Linux下rm误删除文件的三种恢复方法

    Linux下rm误删除文件的三种恢复方法

    一下午写的程序就被rm掉了,幸好只是一个文件,第二天很快又重新写了一遍。但是很多人可能就不像我这么幸运了,本文收集了一些在Linux下恢复rm删除的文件的方法,需要的朋友可以参考下
    2022-12-12
  • Linux系统中bash shell编程的10个基础问题讲解

    Linux系统中bash shell编程的10个基础问题讲解

    这篇文章主要介绍了Linux系统中bash shell编程的10个基础问题讲解,这10个问题涵盖了很多Linux shell编程的基本知识点及bash shell的特性,非常推荐!需要的朋友可以参考下
    2016-02-02
  • Linux shell中的printf的详细用法

    Linux shell中的printf的详细用法

    这篇文章主要介绍了Linux shell中的printf的详细用法的相关资料,希望能通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Linux crontab定时执行Shell脚本需要执行特定的命令时解决思路

    Linux crontab定时执行Shell脚本需要执行特定的命令时解决思路

    今天小编就为大家分享一篇关于Linux crontab定时执行Shell脚本需要执行特定的命令时解决思路,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • shell打印给定日期的日历

    shell打印给定日期的日历

    这篇文章主要为大家详细介绍了shell打印给定日期的日历,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 深入浅出Shell编程 Shell变量介绍

    深入浅出Shell编程 Shell变量介绍

    先不要管Shell的版本,来看看Shell 变量,在Shell中有三种变量:系统变量,环境变量,用户变量。其中用户变量在编程过程中使用最多,系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置。
    2013-01-01
  • Linux Shell获取文件夹下的文件名方法

    Linux Shell获取文件夹下的文件名方法

    今天小编就为大家分享一篇Linux Shell获取文件夹下的文件名方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论