<分区>
解决方案:我的日期变量格式错误(天数和星期几颠倒了)。我更改了它,然后使用下面@PesaThe 提出的 if
语句代替我的测试。
原帖:
我正在编写一个 bash 脚本作为我服务器日常维护任务的一部分运行。这个特定的工作是在 input_file 中搜索与昨天和今天的时间戳相匹配的条目。这是我的日期变量。
today=$(date "+%a, %b %d %Y")
yesterday=$(date --date=yesterday "+%a, %b %d %Y")
这里是声明,它们应该是这样的:
declare -- adminLogLoc="/opt/sc/admin/logs/"
declare -- adminLog="/opt/sc/admin/logs/201801.log"
declare -- today="Tue, Jan 02 2018"
declare -- yesterday="Mon, Jan 01 2018"
declare -- report="/maintenance/daily/2018-01-02_2.2.txt"
这里有一些实际的日志条目,比如我需要输出的那些。这些是通过 grep $today $adminLog | 找到的grep 错误
2018 年 1 月 2 日星期二 14:38:50 +0000||error|WARNING|13|用于生成源数据的查询 #2464 处于非事件状态。
2018 年 1 月 2 日星期二 14:38:50 +0000||错误|警告|13|用于生成源数据的查询 #2468 处于非事件状态。
2018 年 1 月 2 日星期二 14:38:50 +0000||错误|警告|13|用于生成源数据的查询 #2470 处于非事件状态。
2018 年 1 月 2 日星期二 14:38:50 +0000||error|WARNING|13|用于生成源数据的查询 #2474 处于非事件状态。
这是我要运行的 if 语句:
# Check for errors yesterday
if [ $(grep $yesterday $adminLog|grep "error") != "" ]; then
echo "No errors were found for $yesterday." >> $report
else
$(grep $yesterday $adminLog|grep "error") >> $report
fi
# Check for errors today (at the time the report is made, there
# probably won't be many, if any at all)
if [ $(grep $today $adminLog|grep "error") != "" ]; then
echo "No errors were found for $today." >> $report
else
$(grep $today $adminLog|grep "error") >> $report
fi
我已经尝试了几种方法,例如在测试中将双引号括在变量周围,等等。当我在设置变量后在命令行中运行 grep 搜索时,它工作得很好,但是当我在测试括号中运行它时,grep 将每个术语(即星期二、一月......等等)用作单独的参数。我也试过了
grep $yesterday $adminLog 2> /dev/null | grep -q error
if [ $? = "0" ] ; then
运气不好。 我怎样才能让这个测试工作,以便我可以将指定的条目输入到我的日志文件中?谢谢。