我意识到这是一个很老的问题,但是当我想/需要知道某件事情要花多长时间时,这就是我做任何事情的方式。
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
如果您只想知道以秒为单位的时间,则可以将以上内容简化为:
echo "Completed in $SECONDS seconds"
举个例子:
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
time
命令(time ./script.sh),打印输出当前时间使用date
命令等等。