What is the Best Way to Perform Timestamp Comparison in Bash

前端 未结 3 2038
感动是毒
感动是毒 2021-01-31 15:36

I have an alert script that I am trying to keep from spamming me so I\'d like to place a condition that if an alert has been sent within, say the last hour, to not send another

相关标签:
3条回答
  • 2021-01-31 15:41

    Use "test":

    if test file1 -nt file2; then
       # file1 is newer than file2
    fi
    

    EDIT: If you want to know when an event occurred, you can use "touch" to create a file which you can later compare using "test".

    0 讨论(0)
  • 2021-01-31 15:47

    By far the easiest is to store time stamps as modification times of dummy files. GNU touch and date commands can set/get these times and perform date calculations. Bash has tests to check whether a file is newer than (-nt) or older than (-ot) another.

    For example, to only send a notification if the last notification was more than an hour ago:

    touch -d '-1 hour' limit
    if [ limit -nt last_notification ]; then
        #send notification...
        touch last_notification
    fi
    
    0 讨论(0)
  • 2021-01-31 15:54

    Use the date command to convert the two times into a standard format, and subtract them. You'll probably want to store the previous execution time in a dotfile then do something like:

    last = cat /tmp/.lastrun
    curr = date '+%s'
    
    diff = $(($curr - $last))
    if [ $diff -gt 3600 ]; then
        # ...
    fi
    
    echo "$curr" >/tmp/.lastrun
    

    (Thanks, Steve.)

    0 讨论(0)
提交回复
热议问题