bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html


有时候需要计算命令的执行时间长度,可以使用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.sh function timediff() { # time format:date +"%s.%N", such as 1502758855.907197692
start_time=$
end_time=$ 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=$(( #$end_s - ))
end_nanos=$(( #$end_nanos + ** ))
fi # get timediff
time=$(( #$end_s - #$start_s )).`printf "%03d\n" $(( (#$end_nanos - #$start_nanos)/** ))` echo $time
} #start=$(date +"%s.%N")
# Now exec some command
#end=$(date +"%s.%N")
# here give the values
start=1502758855.907197692
end=1502758865.066894173
timediff $start $end

执行该脚本:

[root@xuexi ~]# bash microsecond_diff.sh
9.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在同一字符串内,因此需要将其分割开来,在上述脚本中采用的是变量切分的方法。

(4).由于纳秒转换成毫秒时," (end_nanos - start_nanos)/10**6 "的结果可能会忽略最前面的0,例如"(123456789-103456789)/10**6 = 20,表示20毫秒,在连接整数位和小数点时,需要用0补齐3位毫秒数,比如"1.020",所以上面加了一个printf。

shell脚本示例:计算毫秒级、微秒级时间差的更多相关文章

  1. 使用shell脚本完成自动化部署及秒级回滚

    一.部署机代码目录结构 使用www用户进行代码部署,所有部署机上需要创建www用户,并赋予根目录权限,同时配置公私钥认证建立信任关系. [www@ansible-node1 deploy]$ tree ...

  2. shell脚本示例:批量比较多个文件的内容是否相同

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 要比较两个文件的内容是否完全一致,可以简单地使用diff命令. ...

  3. Shell脚本中计算字符串长度的5种方法

    有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前Shell中获取字符串的长度的多种方法,在这里分享给大家,方法如下: 方法1: 使用wc -L命令wc -L可以获取到当前行 ...

  4. shell脚本,计算学生分数的题目。

    1.计算学生平均分数的值是多少? 2.计算每门课都大于80分的学生姓名.3.计算每门课都小于90分的学生姓名.

  5. shell脚本,计算1+2+3+....100等于多少?

    第一种方法,通过for循环来计算[root@localhost wyb]# cat yibai.sh #!/bin/bash #从1+++...100的结果 i= ` do sum=$(($sum+i ...

  6. shell 脚本示例

    #!/bin/sh #while true #do cd /mnt/vfw/third_meteor for sub in `ls` do cd /mnt/vfw/third_meteor/${sub ...

  7. shell脚本,计算创建100个文件所用多少时间。

    [root@localhost mulu]# ls [root@localhost mulu]# `; do touch file$i; done real 0m0.104s user 0m0.012 ...

  8. shell脚本,计算输入给定的数,判断最大值,最小值,总和?

    [root@localhost ~]# cat five.sh #!/bin/bash #任意输入5个数,判断最大值,最小值,总和 s= read -p "please input:&quo ...

  9. shell脚本,计算1+3+5....100等于多少?

    [root@localhost wyb]# cat unevenjia.sh #!/bin/bash #从1+++...100的结果 i= count=$1 $count` do sum=$(($su ...

随机推荐

  1. CentOS开启telnet服务

    原文地址:https://blog.csdn.net/zhujiangm/article/details/4540778 服务器:CentOS-5.1(192.168.1.87)客户机:FC6(192 ...

  2. OC协议、代理的简单使用

    在不同类之间传递数据,我所学到的有三种,1.代理,2.block,3.通知.在这里,我们先来讲一下代理的使用,后面我会继续讲到block和通知.代理通常和协议是一起使用的,协议通常写在代理类里面,被代 ...

  3. redis在linux云服务器上完整的搭建步骤

    Redis的安装 搭建环境: 华为云linux服务器 Linux系统CneterOS-7.3 SSH客户端 Xshell6 安装c语言编译环境软件如下: 安装报错 然后找到了解决方法: 安装kerne ...

  4. 安装Pangolin

    Pangolin是一个用于OpenGL显示/交互以及视频输出的一个轻量级 快速开发库 一:安装必要的库 1.Glew sudo apt-get install libglew-dev 2.Cmake ...

  5. 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框)

    [源码下载] 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框) 作者:webabcd 介绍背水一战 Wind ...

  6. 工具安装(mac)

    1. iterm 2. nvm 3. node 4. git 5. VScode 6. postman 1.安装iterm2安装路径 https://www.iterm2.com/使用技巧https: ...

  7. 【java】java反射初探 ——“当类也学会照镜子”

    反射的作用   开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强 ...

  8. eclipse创建Maven web项目的步骤

    Maven 是一个项目管理工具,可以对 Java 项目进行构建.依赖管理. Maven 能够帮助开发者完成以下工作: 构建 文档生成 报告 依赖 SCMs 发布 分发 邮件列表 一.环境配置 Mave ...

  9. 手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)

    1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理!   我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...

  10. win10怎么查看激活到期时间如何看是否永久激活

    win10怎么查看激活到期时间如何看是否永久激活     我们知道Windows系统需要激活后才可以使用全部功能,那么你的Windows10激活了吗?如何查看激活时间呢?是不是永久激活的?带着这些问题 ...