我正在构建这个脚本并需要一些帮助。我希望尽可能使用最少的代码行。但是,我希望脚本执行的操作如下。
使用我指定的关键字将指定文件(如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
答案 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
变量不包含日期。我假设你遗忘了一个错过的步骤。