您的位置:首页 > 教程 > linux > shell语言date的用法实例

shell语言date的用法实例

2022-06-19 18:05:25 来源:易采站长站 作者:

shell语言date的用法实例

这篇文章主要介绍了shell语言关于date的一些用法,帮助大家更好的理解和学习shell语言,感兴趣的朋友可以了解下haX站长之家-易采站长站-Easck.Com

    今天没干什么正事儿,都开了会了,写点儿关于shell脚本语言的知识吧,这个也是前两天完成一个业务方的需求的时候使用到的方法,分享出来,希望对大家有点用吧。haX站长之家-易采站长站-Easck.Com

   首先,我们来看,date函数在shell中一般是怎么用的。这种最常见的,就是在脚本中需要输出日志的时候,打印日志的生成时间,而打印的方法,我比较习惯于使用下面的方法:haX站长之家-易采站长站-Easck.Com

LOG_FILE="/var/log/script.log"
exec 2>>${LOG_FILE}

function my_log()
{  
  local curtime=`date "+%Y-%m-%d %H:%M:%S"`
  echo "$curtime $*">> ${LOG_FILE}
}

   写这样一个my_log的函数,然后每次需要打印log的时候,就使用这样的函数my_log加上你想打印的内容,就可以直接进行打印了。haX站长之家-易采站长站-Easck.Com

   在这个过程中,date函数的使用方法是生成指定格式的时间,举个例子:haX站长之家-易采站长站-Easck.Com

[root ~]# date "+%Y-%m-%d %H:%M:%S"
2019-11-05 22:27:59

当然,我们可以定义格式,例如,不要后面的%H:%M:%S或者只显示当前的月份,那就变成了:haX站长之家-易采站长站-Easck.Com

date "+%Y-%m-%d"  
--

date "+%m"

   如果你想获取当天之前或者之后的某一天的时间,可以使用下面的方法:haX站长之家-易采站长站-Easck.Com

[root ~]# date "+%Y-%m-%d" 
-11-05
[root ~]# date -d "1 days" "+%Y-%m-%d"           
-11-06
[root ~]# date -d "1 days ago" "+%Y-%m-%d" 
-11-04

  可以看到,想要前一天的时间,就直接输入1 days ago就可以。这里解释一下-d参数,它代表的是使用字符串来显示当前的时间。haX站长之家-易采站长站-Easck.Com

   前两天遇到的问题是需要去掉日期的前导0,也就是说,形如2019-11-05的日期,需要变为2019-11-5,这种类型,那么这个需求怎么实现呢?这里给出两种方法:haX站长之家-易采站长站-Easck.Com

方法一:haX站长之家-易采站长站-Easck.Com

[dba_mysql@ /tmp]$cat test.sh
real_year=`date -d "2 days" "+%Y"`
real_month=`date -d "2 days" "+%m"`
real_day=`date -d "2 days" "+%d"`

real_date=`date -d "2 days" "+%Y-%m-%d"`
echo "真实的年月日:"$real_date

result_year=`expr $real_year + 0`
result_month=`expr $real_month + 0`
result_day=`expr $real_day + 0`

result_date=$result_year-$result_month-$result_day

echo "处理后的年月日:"$result_date

 输出结果如下:haX站长之家-易采站长站-Easck.Com

真实的年月日:2019-11-07haX站长之家-易采站长站-Easck.Com
处理后的年月日:2019-11-7haX站长之家-易采站长站-Easck.Com

   可以看到,这个过程中,是借助了expr这个数学上的计算方法,来讲日期和月份都转化成数字,这样就去掉了前导的0,然后再通过字符串拼接的方法,最终得到去掉前导0的结果。haX站长之家-易采站长站-Easck.Com

方法二:haX站长之家-易采站长站-Easck.Com

real_year=`date -d "2 days" "+%Y"`
real_month=`date -d "2 days" "+%m"`
real_day=`date -d "2 days" "+%d"`

real_date=`date -d "2 days" "+%Y-%m-%d"`
echo "真实的年月日:"$real_date

result_year=`echo $real_year|sed 's/^0//g'`
result_month=`echo $real_month|sed 's/^0//g'`
result_day=`echo $real_day|sed 's/^0//g'`

result_date=$result_year-$result_month-$result_day

echo "处理后的年月日:"$result_date

  这种方法是使用了sed的方法,通过s方法替代掉以0开头的字符串前面的0,从而让结果中只保留非0开头的数字。其核心是sed  's/^0//g',将以0开头的字符串开头的0去掉。haX站长之家-易采站长站-Easck.Com

    除此之外,我们可以使用date的方法来获取当前日期是一年中的第几个周。这里给出了三个参数都可以给出结果,我罗列一下,大家可以比较一下不同。haX站长之家-易采站长站-Easck.Com

date --help中有下面几句话
%W  week number of year, with Monday as first day of week (00..53)
%U  week number of year, with Sunday as first day of week (00..53)
%V  ISO week number, with Monday as first day of week (01..53)

[dba_mysql@ /tmp]$date +%W

[dba_mysql@ /tmp]$date +%U

[dba_mysql@ /tmp]$date +%V

   这些方法中,%W是以星期一为一个周的第一天,%U是以星期天为一个周的第一天,%V是ISO的周表示方法,也是以星期一为一个周的第一天,不同的是,他没有第0个周的概念。haX站长之家-易采站长站-Easck.Com

   关于date的更多用法,还请大家使用date --help进行参考。haX站长之家-易采站长站-Easck.Com

以上就是shell语言date的用法实例的详细内容,更多关于shell date用法的资料请关注我们其它相关文章!haX站长之家-易采站长站-Easck.Com

haX站长之家-易采站长站-Easck.Com

如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • Linux下用GHOST来做系统备份

    Linux下用GHOST来做系统备份

    在Windows系统下备份我们可以用GHOST工具软件完成,Linux系统不能完全依赖于GHOST工具,一则是GHOST本身是有版权的软件,二是GHOST只支持ext2、ext3文件系统的Linux分区,不支持reiserfs、xfs等
    2019-10-25
  • 给 FreeBSD 12.1 安装 GNOME3 图形界面

    给 FreeBSD 12.1 安装 GNOME3 图形界面

    FreeBSD是一个完全开放的、安全的系统,可以Do it yourself的系统。但是个人还是不喜欢呆板的命令行界面,所有就给 FreeBSD 12.1 安装 GNOME3 图形界面。 开始操作,启动FreeBSD 12.1,以root身份
    2019-10-27
  • Ubuntu Studio一个不错的操作系统

    Ubuntu Studio一个不错的操作系统

    Ubuntu Studio 是一个基于 Ubuntu 而面向音频、视频及图形爱好者的操作系统。本次推出的 Ubuntu Studio 为 7.04 版,目前仅支持 Intel i386 兼容的处理器。 Ubuntu Studio 从大量的开源多媒体创作程序
    2019-10-25
  • 最受欢迎的10款Linux免费游戏

    最受欢迎的10款Linux免费游戏

    图为在Linux下运行的免费游戏America's Army 如果你认为 Linux下没有什么好游戏的话,那就错了!我们来看看Linux下最受欢迎的10款游戏吧,而且这些游戏都是完全免费的! # skyreal update(06-12
    2019-10-25
  • compiz fusion特效使用心得(附3D桌面图)

    compiz fusion特效使用心得(附3D桌面图)

    3D桌面图 LINUX发行版就是好,当大多数人还在沉迷于那些什么风格图标鸟玻璃效果甚至孜孜不倦津津乐道的时候,Linux的高手们已经悄悄为我们开启了一个桌面系统3D的时代。 当我第一次
    2019-10-25
  • Ubuntu 下aMule 的安装配置

    Ubuntu 下aMule 的安装配置

    aMule 是一个类似于 eMule 的多平台 P2P 客户端程序。以下将简略叙述 aMule 在 Ubuntu 中的安装及配置 [High ID] 与 [KAD] 的过程。 安装: sudo apt-get install amule sudo apt-get install amule-utils 如果需要
    2019-10-25
  • JMeter jp@gc - stepping thread group插件

    JMeter jp@gc - stepping thread group插件

    这是一个出单接口压力测试的小例子,了解一下压力测试最最基础的基础。出单接口是用来保险出单的,不需要在UI界面下一步下一步的出单,接口一调数据入库完事~~~。再啰嗦一句接
    2019-10-27
  • Ubuntu 下使用K3B软件刻录光盘(图)

    Ubuntu 下使用K3B软件刻录光盘(图)

    不知大家会不会在Ubuntu下刻录光盘呢?k3b是KDE环境下的一个CD/DVD刻录软件,有非常容易使用的界面,功能比较齐全。用起来感觉就象是win下的Nero一样简单自然,比ubuntu里原来的刻录CD方式
    2019-10-25