1.1 date命令
date用于获取和设置操作系统的时间,还有hwclock是获取硬件时间。
date有个选项"-d",可以用来描述获取什么时候的时间,描述的方式非常开放,但不能使用"now"关键字,其他的如3天前"3 days ago",3天后"3 days",昨天"yesterday",下周一"next Monday",epoch时间"@EPOCH"等等。
Linux中设置date命令的显示格式:date [+format],其中"+"表示从前面的时间中获取其中的格式部分,如date -d "yesterday" +"%Y"获取的是昨天的年份部分。
format格式如下所示:标红色的较常用。
符号
意义
描述
年
%y
年(后两位)
last two digits of year (00..99)
%Y
年
year
月
%m
月
month (01..12)
日
%j
年中天
day of year (001..366)
%d
月中天
day of month (如01)
%w
周中天
day of week (0..6); 0 is Sunday
%u
周中天
day of week (1..7); 1 is Monday
周
%U
年中周(00-53)
week number of year with Sunday as first day
%W
年中周(00-53)
week number of year with Monday as first day
时
%H
时(24时制)
hour (00..23)
%I
时(12时制)
hour (01..12)
分
%M
分
minute (00..59)
秒
%S
秒
second (00..60)
%N
纳秒
ns of current minute
%s
秒
从1970-01-01到目前时间的秒数总数
完整
格式
%T
完整时间
time; same as %H:%M:%S
%D
日期完整格式
date; same as %m/%d/%y
%F
日期完整格式
date; same as %Y-%m-%d
特殊
格式
%n
换行
a newline
%t
tab键
a tab
[root@xuexi ~]# date +%F2016-09-25[root@xuexi~]# date +"%F %T"# 有空格需要使用双引号或引号来分隔2016-09-25 10:48:34[root@xuexi~]# date +"%Y-%m-%d %H:%M:%S"
2016-09-25 10:47:49
使用date命令可以计算时间差。例如:
# 以下3个命令等价date -d "3 days ago" +%Fdate -d "-3 days" +%Fdate -d "now - 3 days" +%F
再例如,给定一个时间,计算它的前几天,后几天。
# 以下两条命令等价date -d "2018-02-19 3 days ago" +%Fdate -d "2018-02-19 - 3 days" +%F
给定一个日期,计算该日期所在星期的星期一是几月几号。例如,2018-05-12是星期六,那么星期一是2018-05-07。
#!/bin/bash
src_date="2018-05-12"src_weekday=`date -d $src_date +%w`
Mon_date=`date -d "$src_date - $(( src_weekday - 1 )) days" +%F`echo $Mon_date
date命令还可以计算延迟时间(两个时间点的时间差)。如果要计算精确度为秒级的延迟,可直接使用%s计算,但如果要计算毫秒级、微秒级甚至是纳秒级的时间差,则需要对date的结果进行一番计算和转换。以下是秒级时间差计算方法,毫秒级计算方法见:
#!/bin/bash
start_time=$(date +"%s")find / -type f -name "*.db" &>/dev/nullend_time=$(date +"%s")
time_diff=$(( start_time -end_time ))echo $time_diff
1.2 sleep和usleep
在shell中常使用sleep命令指定休眠时间,休眠的意思表示让当前进程进入睡眠状态。例如:
sleep 5
sleep默认的休眠单位为秒,因此上面表示休眠5秒钟。如果要休眠毫秒级、微秒级,则可以使用小数。例如:
sleep 0.5
表示休眠半秒钟。
此外,还有专门的微秒级的休眠命令usleep。例如:
usleep 1000
表示休眠1000微秒,即1毫秒。