脚本的时间部分(运行 时间)
time part of a script (running time)
使用 time script.sh
您将获得 运行 脚本所花费的时间,但是如果您想对脚本的一部分计时?
假设我想测试一个循环需要多长时间,我可以使用 $SECONDS 函数,但是有没有计算毫秒的计时器?
例如在一个长代码的中间:
timerstart
until [[ $loop -eq 10000 ]]; do
((++loop))
echo "annoying"
done
timerstop
然后在脚本的末尾,我只添加 echo $timerresult
,它会显示 运行 只用了多少毫秒选择的代码,而不是脚本的其余部分
我正在寻找这个解决方案,以便我可以测试部分脚本是否“缓慢”。
这可以解决吗?
您可以使用
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
对于 Bash 5.0 及更高版本,您可以使用 $EPOCHREALTIME
:
[...] it expands to the number of seconds since the Unix Epoch as a floating point value with micro-second granularity [...]
start=$EPOCHREALTIME
for ((i = 0; i < 10000; ++i)); do
echo "annoying"
done
stop=$EPOCHREALTIME
elapsed=$(bc -l <<< "$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
使用 time script.sh
您将获得 运行 脚本所花费的时间,但是如果您想对脚本的一部分计时?
假设我想测试一个循环需要多长时间,我可以使用 $SECONDS 函数,但是有没有计算毫秒的计时器?
例如在一个长代码的中间:
timerstart
until [[ $loop -eq 10000 ]]; do
((++loop))
echo "annoying"
done
timerstop
然后在脚本的末尾,我只添加 echo $timerresult
,它会显示 运行 只用了多少毫秒选择的代码,而不是脚本的其余部分
我正在寻找这个解决方案,以便我可以测试部分脚本是否“缓慢”。 这可以解决吗?
您可以使用
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
对于 Bash 5.0 及更高版本,您可以使用 $EPOCHREALTIME
:
[...] it expands to the number of seconds since the Unix Epoch as a floating point value with micro-second granularity [...]
start=$EPOCHREALTIME
for ((i = 0; i < 10000; ++i)); do
echo "annoying"
done
stop=$EPOCHREALTIME
elapsed=$(bc -l <<< "$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