Menu

使用计算命令为选择,可以直接使用date命令计算命令执行前后的时间差



混合格局是计量命令的魂魄,使用计占星令为挑选

shell脚本示例:计算纳秒级、皮秒级时间差,shell飞秒

奇迹要求计看相令的施行时长,能够选拔time命令,就算time命令能够正确到阿秒级,但time命令不可能测算一群命令的施行时间。能够也得以一贯利用date命令总结命令实行前后的岁月差,但一直运用date命令总计时间差只好准确到秒级。因而,要总括阿秒级或然飞秒级的时刻长短,必要对date命令的结果开展一番总括调换。

 本文只交付了纳秒级时间差的揣测形式,若要总结飞秒级时间差,对剧本稍作修改就能够。

剧本如下:

#!/bin/bash
# filename: msec_diff.sh

function 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 values
start=1502758855.907197692
end=1502758865.066894173

timediff $start $end

 实践该脚本:

[[email protected] ~]# bash microsecond_diff.sh
9.159

足见结果正确到了皮秒级。

剧本表明:

(1).为了总结阿秒级时间差,所以选取date
+”%s.%N”格式。个中”%s”是计算从一九七零-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在同一字符串内,由此须求将其分割开来,在上述脚本中应用的是变量切分的点子。

 

回来连串小说大纲:

bash&shell种类小说:http://www.cnblogs.com/f-ck-need-u/p/7048359.html**

图片 1

转发请表明出处:


图片 2

注:若您以为那篇文章还能够请点击下右下角的推荐,有了您的支撑手艺激起作者更加大的编慕与著述热情,极度谢谢!

一时候要求总括命令的实施时长,能够利用time命令,尽管time命令可以标准到阿秒…

一时需求计占卜令的实施时间长短,能够利用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=$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 values
start=1502758855.907197692
end=1502758865.066894173

timediff $start $end

 执行该脚本:

[root@xuexi ~]# bash microsecond_diff.sh
9.159

可知结果正确到了皮秒级。

本子表明:

(1).为了总结飞秒级时间差,所以使用date
+”%s.%N”格式。个中”%s”是计量从一九七零-01-01
00:00:00到当前时间点通过的总秒数,所以测算七个”%s”的差值就总括出了八个时间点的秒级时间差。”%N”是各类时间点的阿秒部分,由于date命令中不能直接得到确切到皮秒的光阴,由此只好通过皮秒来估测计算并转移,于是五个时间点的”%N”就可以总括出飞秒级的年华差。

但必要留心的是,总括飞秒时间差时要思量是否要将1秒转换到10^9阿秒,以管教飞秒相减时一定获得正数值。

(2).”%N”的皮秒部分假若长度小于9,将以0补齐。比如999纳秒,将补齐为000000999。但在数学总括时,以0起首的数值暗中认可会被当作八进制计算,因而供给强行保险它以10进制计算,要求动用”10#”。数学表明式相关内容参见man
bash的阿Ritterhmetic Evaluation部分。

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图