使用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