计算日期差异时预期的整数表达式

时间:2018-01-26 00:21:52

标签: linux bash integer

我正在构建这个脚本并需要一些帮助。我希望尽可能使用最少的代码行。但是,我希望脚本执行的操作如下。

使用我指定的关键字将指定文件(如authlog)备份到新文件中。

然而。我还希望它备份文件,如果当前备份文件超过2天以前,如果它更新。不要管它。如果(文件)早于+2天,则删除它并将其替换为更新的。

我预计整数表达式,我不知道如何解决它

#!/bin/bash

authlog=/home/(myhomedir)/logs/backups/authlog-${current_date}
backup="$(cat /var/log/auth.log | grep -e failed -e invalid > /home/(myhomedir)/logs/backup)"
dayold=$(date -d '1 day ago' "+%Y-%m-%d")
current_date=$(date +"%m_%d_%Y")

if [ $authlog -lt $dayold ] ;
    then ${backup}
        else
          echo $authlog is newer than $current_date $authlog has not been updated
if [ $authlog -eq ${current_date} ]
   then "$(rm {authlog})"
  fi
fi

1 个答案:

答案 0 :(得分:1)

您无法使用-lt来比较非数字字符串。这就是为什么你得到“预期的整数表达式”。您正在尝试将文件名与日期字符串进行比较。

比较日期的最简单方法是将它们转换为自纪元(1970年1月1日00:00:00 UTC)以来的秒数。例如,假设我有一个名为foo.bar的文件,我想检查它是否在3天或更久前被修改过:

filetime=$(stat -c %Y foo.bar)
three_days_ago=$(date -d "3 days ago" +%s)
if [ $filetime -lt $three_days_ago ]; then
   echo "foo.bar was last modified more than 3 days ago"
fi

此外,您的authlog变量不包含日期。我假设你遗忘了一个错过的步骤。