How to get execution time of a script effectively?
Just use time
when you call the script:
time yourscript.sh
If time
isn't an option,
start=`date +%s`
stuff
end=`date +%s`
runtime=$((end-start))
Just call times
without arguments upon exiting your script.
With ksh
or zsh
, you can also use time
instead. With zsh
, time
will also give you the wall clock time in addition to the user and system CPU time.
To preserve the exit status of your script, you can make it:
ret=$?; times; exit "$ret"
Or you can also add a trap on EXIT
:
trap times EXIT
That way, times will be called whenever the shell exits and the exit status will be preserved.
$ bash -c 'trap times EXIT; : {1..1000000}'
0m0.932s 0m0.028s
0m0.000s 0m0.000s
$ zsh -c 'trap time EXIT; : {1..1000000}'
shell 0.67s user 0.01s system 100% cpu 0.677 total
children 0.00s user 0.00s system 0% cpu 0.677 total
Also note that all of bash
, ksh
and zsh
have a $SECONDS
special variable that automatically gets incremented every second. In both zsh
and ksh93
, that variable can also be made floating point (with typeset -F SECONDS
) to get more precision. This is only wall clock time, not CPU time.