脚本的时间部分(运行时间)
Posted
技术标签:
【中文标题】脚本的时间部分(运行时间)【英文标题】:time part of a script (running time) 【发布时间】:2020-12-17 21:18:19 【问题描述】:使用time script.sh
,您将获得运行脚本所需的时间,但是如果您想为脚本的一部分计时?
假设我想测试一个循环需要多长时间,我可以使用 $SECONDS 函数,但是是否有任何以毫秒计的计时器?
例如在长代码中间:
timerstart
until [[ $loop -eq 10000 ]]; do
((++loop))
echo "annoying"
done
timerstop
然后在脚本的最后,我只添加了 echo $timerresult
,它会显示只运行所选代码所花费的毫秒数,而不是脚本的其余部分
我正在寻找这个解决方案,这样我就可以测试部分脚本的“缓慢性”.. 这个可以解决吗?
【问题讨论】:
【参考方案1】:对于 Bash 5.0 及更高版本,您可以使用$EPOCHREALTIME
:
[...] 它扩展为自 Unix 纪元以来的秒数,作为具有微秒粒度的浮点值 [...]
start=$EPOCHREALTIME
for ((i = 0; i < 10000; ++i)); do
echo "annoying"
done
stop=$EPOCHREALTIME
elapsed=$(bc -l <<< "$stop - $start")
【讨论】:
有很多很好的建议,但我认为你的建议最适合我的需要,因为这样你可以在一个脚本中计时几个函数(有几个开始/结束点并在之后设置结果,所以通过植入你的想法并以time script.sh
开始脚本我会得到一个完整的时间和不同循环和东西的时间!【参考方案2】:
你可以使用
date '+%s.%N'
以纳秒精度获取当前时间。
#!/bin/bash
start=$(date '+%s.%N')
until [[ $loop -eq 10000 ]]; do
((++loop))
echo "annoying"
done
stop=$(date '+%s.%N')
bc <<< $stop-$start
【讨论】:
【参考方案3】:您也可以在脚本中为各个部分使用time
,例如为循环计时:
time until [[ $loop -eq 10000 ]]; do
((++loop))
echo "annoying"
done
或者用大括号对一组命令进行计时:
time
until [[ $loop -eq 10000 ]]; do
((++loop))
done
echo "Other commands here that are also timed"
【讨论】:
【参考方案4】:将循环放入函数中。
#!/bin/bash
myloop()
loop=1
until [[ $loop -eq 10000 ]]; do
((++loop))
echo "annoying"
done
time myloop
【讨论】:
以上是关于脚本的时间部分(运行时间)的主要内容,如果未能解决你的问题,请参考以下文章
shell 外部传入jmeter脚本线程数,rampUp时间,持续运行时间
如何运行作为我在 AWS SSH 会话中上传的应用程序的一部分的 Python 脚本?
为啥我的 Ubuntu EC2 实例的 DataUser 部分中的脚本没有运行?我正在使用 Cloudformation