博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本示例:计算毫秒级、微秒级时间差
阅读量:6990 次
发布时间:2019-06-27

本文共 1897 字,大约阅读时间需要 6 分钟。

bash&shell系列文章:


有时候需要计算命令的执行时间长度,可以使用time命令,虽然time命令可以精确到毫秒级,但time命令无法计算一堆命令的执行时间。可以直接使用date命令计算命令执行前后的时间差,但直接使用date命令计算时间差只能精确到秒级。因此,要计算毫秒级或者微秒级的时间长度,需要对date命令的结果进行一番计算转换。

本文只给出了毫秒级时间差的计算方法,若要计算微秒级时间差,对脚本稍作修改即可。

脚本如下:

#!/bin/bash############################################################  description: get msec level time delay                 ##  author     : 骏马金龙                                   ##  blog       : http://www.cnblogs.com/f-ck-need-u/       ############################################################# filename: msec_diff.shfunction timediff() {# time format:date +"%s.%N", such as 1502758855.907197692    start_time=$1    end_time=$2        start_s=${start_time%.*}    start_nanos=${start_time#*.}    end_s=${end_time%.*}    end_nanos=${end_time#*.}        # end_nanos > start_nanos?     # Another way, the time part may start with 0, which means    # it will be regarded as oct format, use "10#" to ensure    # calculateing with decimal    if [ "$end_nanos" -lt "$start_nanos" ];then        end_s=$(( 10#$end_s - 1 ))        end_nanos=$(( 10#$end_nanos + 10**9 ))    fi    # get timediff    time=$(( 10#$end_s - 10#$start_s )).$(( (10#$end_nanos - 10#$start_nanos)/10**6 ))        echo $time}#start=$(date +"%s.%N")# Now exec some command#end=$(date +"%s.%N") # here give the valuesstart=1502758855.907197692end=1502758865.066894173 timediff $start $end

 执行该脚本:

[root@xuexi ~]# bash microsecond_diff.sh9.159

可见结果精确到了毫秒级。

脚本说明:

(1).为了计算毫秒级时间差,所以使用date +"%s.%N"格式。其中"%s"是计算从1970-01-01 00:00:00到当前时间点经过的总秒数,所以计算两个"%s"的差值就计算出了两个时间点的秒级时间差。"%N"是每个时间点的纳秒部分,由于date命令中无法直接得到精确到毫秒的时间,因此只能通过纳秒来计算并转换,于是两个时间点的"%N"就可以计算出纳秒级的时间差。

但需要注意的是,计算纳秒时间差时要考虑是否要将1秒转换成10^9纳秒,以确保纳秒相减时一定得到正数值。

(2)."%N"的纳秒部分如果长度小于9,将以0补齐。例如999纳秒,将补齐为000000999。但在数学计算时,以0开头的数值默认会被当作八进制计算,因此需要强行保证它以10进制计算,需要使用"10#"。数学表达式相关内容参见man bash的Arithmetic Evaluation部分。

(3).由于date命令获取到的%s和%N在同一字符串内,因此需要将其分割开来,在上述脚本中采用的是变量切分的方法。

你可能感兴趣的文章
DevOps和容器:本地or云端,如何选择?
查看>>
ActiveMQ 初试
查看>>
linux-yum库建立和常见使用
查看>>
“两只小熊队”Alpha版本展示博客
查看>>
创建django的不同环境
查看>>
Top 10 command-line commands for managing Windows 7 desktops
查看>>
CentOS5.4安装samba服务
查看>>
学习笔记之简单工厂设计模式
查看>>
Spring+SpringMVC+MyBatis+Maven框架整合
查看>>
MFC读写文件
查看>>
linux优化
查看>>
手动制作mini linux详细步骤—之一
查看>>
kali密码离线破解
查看>>
Bootstrap优秀模板-Unify.2.6.2
查看>>
poj 3122 Pie (二分)
查看>>
在面试中如何展示虚拟机和内存调优技能
查看>>
C++命名空间学习笔记
查看>>
购物商城Web开发第五天
查看>>
剑指Offer第36题—Java版
查看>>
txt 简单操作
查看>>