日期比较在shell脚本中无法正常工作

时间:2014-11-26 06:15:11

标签: shell date crontab ksh

我想比较shell脚本中的日期。 我正在使用的逻辑如下:

$date_1="Tue Nov 25 23:50:01 CST 2014"
$date_2=$(date)
if [ $date_2 -eq $date_1 ] ; then
      echo "$date2 is equal to $date_1"
else
      echo "$date2 is not equal to $date_1"
fi

然而,当我每分钟使用crontab执行脚本时,
我在日志中收到以下消息,这是不正确的:

  

Tue Nov 25 23:50:01 CST 2014不等于Tue Nov 25 23:50:01 CST 2014

你能帮我摆脱这种尴尬局面吗?

2 个答案:

答案 0 :(得分:2)

假设这项工作每分钟都在运行。你可以这样做:

date_1="Tue Nov 25 23:50:01 CST 2014"

dt1=$(date -d "$date_1" '+%Y%m%d%H%M')

dt2=$(date '+%Y%m%d%H%M')

if [ "$dt1" -eq "$dt2" ]; then
      echo "$dt2 is equal to $date_1"
else
      echo "$dt2 is not equal to $date_1"
fi

答案 1 :(得分:0)

最好的做法是将日期字符串格式化为数字,从年份开始,然后是月份等。您可能希望编码大于或等于,或小于或等于,以防cron跳过秒现在或然后:

date_1=$(date +%Y%m%d%H%M%S)
sleep 10
date_2=$(date +%Y%m%d%H%M%S)
if [ $date_2 -ge $date_1 ] ; then
    echo "$date_2 is greater than or equal to $date_1"
else

    echo "$date_2 is less than $date_1"
fi

输出:

20141126063044 is greater than or equal to 20141126063034

请注意,在设置变量时,您不希望变量前面有$