≡ Menu

Shell script to get the time difference

Q. I am able to write PHP or Perl script where I can find out time difference between script executions. Now I have .shtml file that is nothing but a shell script outputting some data to browser. What I want is time difference or time it took to execute a script. How do I write a shell script?

A. Your Logic should be as follows:

* Get start time and store to a variable START

* Execute a shell script

* Grab output and send to web browser

* Get time again and store to a variable END

* Calculate difference using expression END – START

Shell script o get the time difference

Here is small script that does the same thing (please note that script teated on GNU/Linux and with GNU date command only):
$ vi timediff.bash
Append text as follows:

START=$(date +%s)
# do something

# start your script work here
ls -R /etc > /tmp/x
rm -f /tmp/x
# your logic ends here

END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

Save and execute the script as follows:
$ chmod +x timediff.bash
Execute the script:
$ ./timediff.bash

It took 4 seconds
Share this tutorial on:

Like this? Follow us on Twitter OR support us by using Patreon

{ 33 comments… add one }
  • Anonymous May 8, 2006, 10:46 pm

    What ifmy script takes mili seconds to execute and I want to be able to measure the time difference even if it is few micro seconds or mili seconds.



  • Anonymous August 22, 2006, 7:35 pm

    instead of
    $(date +%s)
    $(date +%s%N)

    and you will get nanoseconds precision

    Mitsuhashi Da! Oboeteoke!

  • satish asnani March 25, 2007, 8:22 am

    i need to find the no.of days between system date and the date of file creation. how do i achieve this?

    • Amit Pankaj January 23, 2013, 10:52 am

      echo $((( $END – $START ))/86400)

      will give you output in days

      • Amit Pankaj January 23, 2013, 10:54 am

        small correction

        echo $((( $END – $START )/86400))

        will give you output in days

  • pavana August 16, 2007, 9:11 am

    i need to find the no.of days and time between system date and the date of file creation. how do i achieve this?

    • Arturs Bebris February 6, 2013, 6:24 pm

      This will remove all files modified 30 or more days ago.

      for file in “$( /usr/bin/find /path/to/your/files -type f -mtime +30 )”
      /bin/rm -v -f $file

  • Raj September 12, 2007, 12:14 pm

    Hi, you time diff script doesn’t work. date +%s returns only %s as value. And thus it does not work forward.

  • Ratna September 14, 2007, 12:45 pm

    The above mentioned script will not work because “%s” is given in small letter.
    Replace “%s” with “%S” and the script will work.

  • seema October 23, 2007, 8:59 am

    can i have the similar script in k-shell

  • Johannes May 8, 2008, 1:24 pm

    Cool script, thanks!

  • ESWAR September 29, 2008, 5:33 am

    write a shell script pow(a,b)
    eg a=2
    how to to write this program.

  • Nathan December 16, 2008, 1:59 am

    Wow! its really cool :)

  • Achala February 21, 2009, 6:05 pm

    How do i find time difference between two file .
    Example: One file created at Wed Feb 18 10:08:34 IST 2009.And Anothe file created at
    Wed Feb 18 23:32:36 IST 2009. How do i find difference between Wed Feb 18 23:32:36 IST 2009 – Wed Feb 18 10:08:34 IST 2009 ?
    Please Help

  • shiva April 30, 2009, 1:34 pm

    nice script…. good

  • Yogesh June 2, 2009, 7:07 am

    Good one !!!

  • Jax April 11, 2010, 1:23 am

    Thanks for the script mate. It was of great help to me.

  • Mary Monahan October 12, 2010, 1:23 pm

    Just a comment:
    %s does not work on Solaris. %S does, but it only returns the seconds part of the date-time, not the number of seconds since 00:00:00, Jan 1, 1970 so you would have to deal with the math of changes in minutes, hours and the turn over from 59 to 0.

  • jules March 5, 2011, 10:27 pm

    difference between 2 files in seconds:
    use date -r for the modification date of the file and +%s for date in seconds:
    Example 2 files bobo.png and foobar.ppm
    echo `date -r bobo.png +%s`-`date -r foobar.ppm +%s` | bc
    echo “8411376/(24*3600)”|bc -l
    So 97 days between these files.

    • Vinod September 27, 2011, 4:13 pm

      It was of great help to me…………….Thanx.

  • xofer April 5, 2011, 9:57 pm

    Stumbled upon this example. The script in article is all very fine as a script exercise, but it does not follow bash logic. If you want to get the running time of – lets say – a_long_process
    you just execute:
    time a_long_process
    simple, isn’t it? For more options check: man time

  • solo October 10, 2011, 12:21 pm

    Is it possible to do this with the use of the time() command?

  • Aravindhan Devarajan August 22, 2012, 5:54 pm

    I want to get system time alone. How do I get it from shell script? Anyone please suggest scripts

  • shivendra August 23, 2012, 3:50 am

    Instead of using second can we use DD:MM:YYYY format
    and then calculate deference.

  • Bhaskar March 21, 2013, 1:35 pm

    write a script, ” How much time it will take to boot up the device”?, can anyone help me?

  • Bhaskar March 21, 2013, 1:55 pm

    Which is in shell or perl script or python?

  • betagama September 10, 2013, 6:04 pm

    echo ” Time taken to process $SECONDS”

  • betagama September 10, 2013, 6:07 pm

    just put the above one line at the end of the script and you will get the time till that statement..

  • betagama September 10, 2013, 6:09 pm

    by the way that will be in shell… as most of your answers and since i googled for bash and this came so i thought might be usefull for people who come via google to this page by mistake ;)

  • Marco December 18, 2013, 11:54 am

    If you want to have the time difference based on entries in a logfile, you first have to convert the found dates to seconds.

    >  date -s 'Dec 17 14:38:01'
    Tue Dec 17 14:38:01 CET 2013
    >  date -s 'Dec 17 14:38:01' +%s
  • Kushal Gangan February 21, 2014, 6:02 am

    Thanks, it was helpful :)

  • Samuel October 9, 2015, 6:48 pm

    Do you know about the ‘time’ command.

    Simply put ‘time’ before whatever script you want to run, and afterwards you will get stats how much time it took.

    For exemple:

    time sleep 5

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

  • Amit Yadav June 20, 2016, 10:18 am


    In my ksh file the below two lines of code written for start/end time of some process.
    echo launch TIMESTAMP START: $(date +”%Y.%m.%d %H:%M:%S”)
    echo launch TIMESTAMP END: $(date +”%Y.%m.%d %H:%M:%S”)

    which showing ouput as:
    showing in log as : launch TIMESTAMP START: 2016.05.24 06:30:35
    showing in log as : launch TIMESTAMP END: 2016.05.24 14:55:05

    Now please let us know how i take total time taken for this process. just to inform you that (END-START will not help in this and showing incorrect output while considering all difficult combinations)

    Please help!
    Thanks in Advance.

Security: Are you a robot or human?

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">

   Tagged with: , , , , ,