c=$(awk -v d1="$(date --date="-30 min" "+%b %_d %H:%M")" -v d2="$(date
"+%b %_d %H:%M")" '$0 > d1 && $0 < d2 || $0 ~ d2' /var/place/message|
grep -ci "Important message")
if [ $c-gt 0 ]
then
echo "Found message"
else
echo "fail"
fi
我希望我的脚本能够在日志中找到一条重要消息,这些消息是顺便说一句,当前时间和-30分钟。
日志如下所示
三月 14 03:03:41 等等"重要信息">
三月 14 03:03:42 等等
等等三月 14 03:03:43 等等
等等。
三月 14 03:31:41 等等等等"重要信息">
因此,如果当前时间为 4:00:00,它将找到最后一行。这根本行不通..我得到两个错误。第一个是 grep 找不到消息,第二个是"-gt 一元运算符预期"。任何指导都会很棒。第一次用 bash 编写脚本!!谢谢:(
您的日期格式与您的日志不匹配。
$ awk -v d1="$(date -d "-30 min" "+%B %d %H:%M")"
-v d2="$(date "+%B %d %H:%M")" '
$0>d1 && $0<d2 && /Important message/ {c++}
END {print c; exit !c}' file
只需检查此脚本的返回状态即可。 如果不需要计数,可以去除一些噪音(c++
后加;exit
,去掉print c
。
或者,您也可以在同一脚本中添加"找到"或"失败"消息...
铌。这在月更改的午夜左右不起作用,例如April xx < March xx
基于词汇顺序。