How to get the elapsed time in milliseconds in a bash script?

The date command you're using doesn't support %N so your output is literally 1292460931N. I tried it on Linux and it worked, but on FreeBSD I see the results you got. Run that date command in a shell and see what comes out. Is it possible you're using busybox? Its cut-down date command also omits %N but the version I just tried gave me 1292463535%N.


Okay, a couple of things here.

First, not a lot of systems can give you a time that actually accurate to nanoseconds anyway.

Now, using time, either as /usr/bin/time or the shell builtin (bash: help time) is very easy. If the command you want to time is foo1, then

$ time foo

will return the elapsed time as three lines on stderr

real 0m0.001s
user 0m0.000s
sys  0m0.000s

which you can use any way you like.

If you want to get a better, more accurate timing, execute the command many times. This can be as simple as writing a short loop

time for i in 0 1 2 3 4; do foo; done

will do foo five times and give you the total time. You probably want to do more than 5 iterations, so you'd probably want a counter and a while loop or the like.

Tags:

Time

Shell

Bash