我想比较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
你能帮我摆脱这种尴尬局面吗?
答案 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
请注意,在设置变量时,您不希望变量前面有$
!