咔叽游戏

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 403|回复: 0

[linux shell] shell语言date的用法实例

[复制链接]
  • TA的每日心情
    无聊
    2019-5-27 08:20
  • 签到天数: 4 天

    [LV.2]圆转纯熟

    发表于 2020-12-18 18:34:47 | 显示全部楼层 |阅读模式
    今天没干什么正事儿,都开了会了,写点儿关于shell脚本语言的知识吧,这个也是前两天完成一个业务方的需求的时候使用到的方法,分享出来,希望对大家有点用吧。
       首先,我们来看,date函数在shell中一般是怎么用的。这种最常见的,就是在脚本中需要输出日志的时候,打印日志的生成时间,而打印的方法,我比较习惯于使用下面的方法:
    1. LOG_FILE="/var/log/script.log"
    2. exec 2>>${LOG_FILE}
    3. function my_log()
    4. {  
    5.   local curtime=`date "+%Y-%m-%d %H:%M:%S"`
    6.   echo "$curtime $*">> ${LOG_FILE}
    7. }
    复制代码
      写这样一个my_log的函数,然后每次需要打印log的时候,就使用这样的函数my_log加上你想打印的内容,就可以直接进行打印了。
       在这个过程中,date函数的使用方法是生成指定格式的时间,举个例子:
    1. [root ~]# date "+%Y-%m-%d %H:%M:%S"
    2. 2019-11-05 22:27:59
    复制代码
    当然,我们可以定义格式,例如,不要后面的%H:%M:%S或者只显示当前的月份,那就变成了:
    1. date "+%Y-%m-%d"  
    2. --
    3. date "+%m"
    复制代码
      如果你想获取当天之前或者之后的某一天的时间,可以使用下面的方法:
    1. [root ~]# date "+%Y-%m-%d"
    2. -11-05
    3. [root ~]# date -d "1 days" "+%Y-%m-%d"           
    4. -11-06
    5. [root ~]# date -d "1 days ago" "+%Y-%m-%d"
    6. -11-04
    复制代码
    可以看到,想要前一天的时间,就直接输入1 days ago就可以。这里解释一下-d参数,它代表的是使用字符串来显示当前的时间。
       前两天遇到的问题是需要去掉日期的前导0,也就是说,形如2019-11-05的日期,需要变为2019-11-5,这种类型,那么这个需求怎么实现呢?这里给出两种方法:
    方法一:
    1. [dba_mysql@ /tmp]$cat test.sh
    2. real_year=`date -d "2 days" "+%Y"`
    3. real_month=`date -d "2 days" "+%m"`
    4. real_day=`date -d "2 days" "+%d"`
    5. real_date=`date -d "2 days" "+%Y-%m-%d"`
    6. echo "真实的年月日:"$real_date
    7. result_year=`expr $real_year + 0`
    8. result_month=`expr $real_month + 0`
    9. result_day=`expr $real_day + 0`
    10. result_date=$result_year-$result_month-$result_day
    11. echo "处理后的年月日:"$result_date
    复制代码
    输出结果如下:
    真实的年月日:2019-11-07
    处理后的年月日:2019-11-7
       可以看到,这个过程中,是借助了expr这个数学上的计算方法,来讲日期和月份都转化成数字,这样就去掉了前导的0,然后再通过字符串拼接的方法,最终得到去掉前导0的结果。
    方法二:
    1. real_year=`date -d "2 days" "+%Y"`
    2. real_month=`date -d "2 days" "+%m"`
    3. real_day=`date -d "2 days" "+%d"`
    4. real_date=`date -d "2 days" "+%Y-%m-%d"`
    5. echo "真实的年月日:"$real_date
    6. result_year=`echo $real_year|sed 's/^0//g'`
    7. result_month=`echo $real_month|sed 's/^0//g'`
    8. result_day=`echo $real_day|sed 's/^0//g'`
    9. result_date=$result_year-$result_month-$result_day
    10. echo "处理后的年月日:"$result_date
    复制代码
    这种方法是使用了sed的方法,通过s方法替代掉以0开头的字符串前面的0,从而让结果中只保留非0开头的数字。其核心是sed  's/^0//g',将以0开头的字符串开头的0去掉。
        除此之外,我们可以使用date的方法来获取当前日期是一年中的第几个周。这里给出了三个参数都可以给出结果,我罗列一下,大家可以比较一下不同。
    1. date --help中有下面几句话
    2. %W  week number of year, with Monday as first day of week (00..53)
    3. %U  week number of year, with Sunday as first day of week (00..53)
    4. %V  ISO week number, with Monday as first day of week (01..53)
    5. [dba_mysql@ /tmp]$date +%W
    6. [dba_mysql@ /tmp]$date +%U
    7. [dba_mysql@ /tmp]$date +%V
    复制代码
      这些方法中,%W是以星期一为一个周的第一天,%U是以星期天为一个周的第一天,%V是ISO的周表示方法,也是以星期一为一个周的第一天,不同的是,他没有第0个周的概念。
       关于date的更多用法,还请大家使用date --help进行参考。
    以上就是shell语言date的用法实例的详细内容,更多关于shell date用法的资料请关注咔叽论坛其它相关文章!

    原文地址:https://www.jb51.net/article/199478.htm

    QQ|免责声明|小黑屋|手机版|Archiver|咔叽游戏

    GMT+8, 2024-3-29 01:26

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表