脚本的时间部分(运行时间)



使用time script.sh,您将获得运行脚本所需的时间,但如果您想为脚本的一部分计时?

比方说,我想测试一个循环需要多长时间,我可以使用$SECONDS函数,但有计时毫秒的计时器吗?

例如,在一个长代码的中间:

timerstart
until [[ $loop -eq 10000 ]]; do
((++loop))
echo "annoying"
done
timerstop

然后在脚本的末尾,我只添加echo $timerresult,它将显示只运行所选代码所花费的毫秒数,而不显示脚本的其余部分

我正在寻找这个解决方案,这样我就可以测试";缓慢;。。这有可能解决吗?

对于Bash 5.0及更高版本,您可以使用$EPOCHREALTIME:

〔…〕它扩展到自Unix Epoch以来的秒数,作为具有微秒粒度的浮点值〔…〕

start=$EPOCHREALTIME
for ((i = 0; i < 10000; ++i)); do
echo "annoying"
done
stop=$EPOCHREALTIME
elapsed=$(bc -l <<< "$stop - $start")

您可以使用

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

您也可以在脚本中为各个部分使用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"
}

将循环放入函数中。

#!/bin/bash
myloop() {
loop=1
until [[ $loop -eq 10000 ]]; do
((++loop))
echo "annoying"
done
}
time myloop

最新更新