在Bash中执行时间戳比较的最佳方式是什么?

我有一个警告脚本,我试图阻止垃圾邮件发送给我,所以我想提出一个条件,如果警报已经发送了,比如最后一个小时,不发送另一个警报。 现在我有一个cron工作,每分钟检查一次情况,因为当条件满足时我需要很快得到提醒,但是我不需要每隔一段时间都收到邮件,直到问题得到控制。 在bash中比较时间的最佳方法是什么?

到目前为止,最简单的方法是将时间戳存储为虚拟文件的修改时间。 GNU touchdate命令可以设置/获取这些时间并执行date计算。 Bash有testing来检查一个文件比( -nt )更新还是比( -ot )更新。

例如,如果最后一次通知是一个多小时前才发送通知:

 touch -d '-1 hour' limit if [ limit -nt last_notification ]; then #send notification... touch last_notification fi 

使用“testing”:

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

编辑:如果你想知道事件发生的时间,你可以使用“触摸”创build一个文件,你可以稍后使用“testing”比较。

使用date命令将两次转换为标准格式,然后减去它们。 您可能会想要将以前的执行时间存储在dotfile中,然后执行如下操作:

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

(谢谢,史蒂夫。)