文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

shell语言date的用法实例

2022-06-04 23:40

关注

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

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


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加上你想打印的内容,就可以直接进行打印了。

   在这个过程中,date函数的使用方法是生成指定格式的时间,举个例子:


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

当然,我们可以定义格式,例如,不要后面的%H:%M:%S或者只显示当前的月份,那就变成了:


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

date "+%m"

   如果你想获取当天之前或者之后的某一天的时间,可以使用下面的方法:


[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参数,它代表的是使用字符串来显示当前的时间。

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

方法一:


[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

 输出结果如下:

真实的年月日:2019-11-07
处理后的年月日:2019-11-7

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

方法二:


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_yeardFTDIrZV-$result_month-$result_day

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

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

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


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 MondFTDIrZVday 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个周的概念。

   关于date的更多用法,还请大家使用date --help进行参考。

以上就是shell语言date的用法实例的详细内容,更多关于shell date用法的资料请关注我们其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯