gle*_*man 40
如果您想要以秒为单位的持续时间,请在顶部使用
start=$SECONDS
Run Code Online (Sandbox Code Playgroud)
最后
duration=$(( SECONDS - start ))
Run Code Online (Sandbox Code Playgroud)
Mar*_*ana 30
您可以使用 Linux 的内置time命令。从手册页:
时间命令 [参数]
time 确定要从字符串 FORMAT 中显示有关 COMMAND 使用的资源的哪些信息。如果在命令行中未指定格式,但设置了 TIME 环境变量,则使用其值作为格式。
要为cleanup.sh脚本计时,请使用:
$ time cleanup.sh
Run Code Online (Sandbox Code Playgroud)
Phi*_*ons 15
我意识到这是一个非常古老的问题,但是当我想/需要知道某事运行需要多长时间时,这就是我为任何事情做的方式。
Bash 有一个以内部变量命名的内置秒计时器SECONDS(参见:此处了解其他内部变量)
放在SECONDS=0您要检查的运行时间之前。它需要在任何用户输入之后才能获得良好的结果,因此如果您提示输入信息,请将其放在提示之后。
然后,把它放在你检查的最后:
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
Run Code Online (Sandbox Code Playgroud)
如果您只想知道以秒为单位的时间,则可以将上述简化为:
echo "Completed in $SECONDS seconds"
Run Code Online (Sandbox Code Playgroud)
举个例子:
read -rp "What's your name? " "name"
SECONDS=0
echo "Hello, $name"
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
Run Code Online (Sandbox Code Playgroud)
小智 5
#!/bin/bash
start=$(date +%s)
#
# do something
sleep 10
#
#
end=$(date +%s)
seconds=$(echo "$end - $start" | bc)
echo $seconds' sec'
echo 'Formatted:'
awk -v t=$seconds 'BEGIN{t=int(t*1000); printf "%d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
Run Code Online (Sandbox Code Playgroud)