今天没干什么正事儿,都开了会了,写点儿关于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用法的资料请关注其它相关文章!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]