shell语言date的用法实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

shell语⾔date的⽤法实例
今天没⼲什么正事⼉,都开了会了,写点⼉关于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_year-$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 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个周的概念。

关于date的更多⽤法,还请⼤家使⽤date --help进⾏参考。

以上就是shell语⾔date的⽤法实例的详细内容,更多关于shell date⽤法的资料请关注其它相关⽂章!。

相关文档
最新文档