时间获取及延时
1 获取时间
纪元时:在系统内部,日期被存储为一个整数,其取值为自1970年1月1日0时0分0秒起,所流失的秒数
1.1 获取时间
date
timedatectl
1.2 打印纪元时
date +%s #打印纪元时
date --date "Wed Aug 14 17:27:47 CST 2019" +%s #将某个时间转化为纪元时
date --date "Aug 14 17:27:47 CST 2019" +%A #知道某个时间是星期几
1.3 格式化输出的时间
参数 | 描述 |
---|---|
%% | 显示字符% |
%a | 星期几的缩写(Sun..Sat) |
%A | 星期几的完整名称(Sunday...Saturday) |
%b/%h | 月份的缩写(Jan..Dec) |
%B | 月份的完整名称(January..December) |
%c | 日期与时间。只输入date指令也会显示同样的结果 |
%C | 世纪(年份除100后去整) [00-99] |
%d | 日期(以01-31来表示)。 |
%D | 日期(含年月日)。 |
%e | 一个月的第几天 ( 1..31) |
%F | 日期,同%Y-%m-%d |
%g | 年份(yy) |
%G | 年份(yyyy) |
%H | 小时(00..23) |
%I | 小时(01..12) |
%j | 一年的第几天(001..366) |
%k | 小时( 0..23) |
%l | 小时( 1..12) |
%m | 月份(01..12) |
%M | 分钟(00..59) |
%n | 换行 |
%N | 纳秒(000000000..999999999) |
%p | AM or PM |
%P | am or pm |
%r | 12小时制时间(hh:mm:ss [AP]M) |
%R | 24小时制时间(hh:mm) |
%s | 从00:00:00 1970-01-01 UTC开始的秒数 |
%S | 秒(00..60) |
%t | 制表符 |
%T | 24小时制时间(hh:mm:ss) |
%u | 一周的第几天(1..7); 1 表示星期一 |
%U | 一年的第几周,周日为每周的第一天(00..53) |
%V | 一年的第几周,周一为每周的第一天 (01..53) |
%w | 一周的第几天 (0..6); 0 代表周日 |
%W | 一年的第几周,周一为每周的第一天(00..53) |
%x | 日期(mm/dd/yy) |
%X | 时间(%H:%M:%S) |
%y | 年份(00..99) |
%Y | 年份(1970…) |
%z | RFC-2822 风格数字格式时区(-0500) |
%Z | 时区(e.g., EDT), 无法确定时区则为空 |
# date '+%Y-%m-%d'
2017-01-29
# date +%Y-%m-%d
2017-01-29
# date +%m/%d/%y
01/29/17
# date "+%Y-%m-%d %H:%M:%S"
2017-01-29 10:57:02
实际应用(shell中时间的计算必须要先将时间格式化成字符串):
# date -d now
Sun Jan 29 10:46:07 CST 2017
# date -d 'next monday'
Mon Jan 30 00:00:00 CST 2017
# date -d yesterday +%Y%m%d
20170128
1.4 测量一组命令所消耗的时间
#!/bin/bash
start=$(date +%s)
commands;
statements;
end=$(date +%s)
diffenence=$((end - start))
echo time taken to execute commands is $diffenence seconds.
time 命令是统计时间的最简单方式
延时
#!/bin/bash
echo count:
tput sc
#循环40秒
for count in `seq 0 40`
do
tput rc
tput ed
echo -n $count
sleep 1
done
变量使用了seq命令生成一系列数字
使用tput sc存储光标位置
通过tput rc恢复光标位置
每次循环中,通过tput rc恢复光标位置,使用tput ed清除从光标到行尾之间的所有内容,然后在终端中打印出新的count值,sleep可以使脚本在每次的循环中延迟1秒
网友评论