Tom*_*son 104
正如其他人所建议的那样,使用time命令是个好主意.
另一种选择是使用魔术内置变量$ SECONDS,它包含自脚本开始执行以来的秒数.你可以说:
START_TIME=$SECONDS
dosomething
ELAPSED_TIME=$(($SECONDS - $START_TIME))
Run Code Online (Sandbox Code Playgroud)
我认为这是特定于bash的,但是因为你在Linux上,我认为你正在使用bash.
Kei*_*ith 39
使用该time命令.time ls /bin.
Wol*_*ach 34
试试以下示例:
START_TIME=$SECONDS
# do something
sleep 65
ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo "$(($ELAPSED_TIME/60)) min $(($ELAPSED_TIME%60)) sec"
#> 1 min 5 sec
Run Code Online (Sandbox Code Playgroud)
小智 8
许多答案都提到了$SECONDS,但是该变量实际上比他们意识到的还要好:
分配给该变量会将计数重置为分配的值,并且扩展后的值将成为分配的值加上分配以来的秒数。
这意味着您可以直接在脚本结尾直接查询此变量以显示经过的时间:
#!/usr/bin/env bash
# Do stuff...
echo "Script finished in $SECONDS seconds."
Run Code Online (Sandbox Code Playgroud)
您还可以为较小的部分设置时间,如下所示:
#!/usr/bin/env bash
# Do stuff
SECONDS=0
# Do timed stuff...
echo "Timed stuff finished in $SECONDS seconds."
Run Code Online (Sandbox Code Playgroud)
小智 5
这是查找经过的时间(以毫秒为单位)的脚本。用您要执行的代码替换sleep 60行。
a=0
while [ $a -lt 10 ]
do
START_TIME=`echo $(($(date +%s%N)/1000000))`
sleep 3
END_TIME=`echo $(($(date +%s%N)/1000000))`
ELAPSED_TIME=$(($END_TIME - $START_TIME))
echo $ELAPSED_TIME
if [ $a -eq 10 ]
then
break
fi
a=`expr $a + 1`
done
Run Code Online (Sandbox Code Playgroud)