gpt4 book ai didi

linux - 解析日志文件的shell脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:15 25 4
gpt4 key购买 nike

我正在编写一个 shell 脚本来解析日志文件并提取 sudo 成功和/或失败的所有实例。我现在意识到,如果使用 shell 的正则表达式等价物,这可能会更容易,但我不想花时间四处挖掘(现在我付出了代价)。无论如何:

sudobool=0
sudoCount=0

for i in `cat /var/log/auth.log`;
do
for word in $i;
do
if $word == "sudo:"
then
echo "sudo found"
sudobool=1;
sudoCount=`expr $sudoCount + 1`;
fi
done

sudobool=0;

done


echo "There were " $sudoCount " attempts to use sudo, " $sudoFailCount " of which failed."

所以,我对我写的代码的理解是:读取auth.log 并逐行拆分,存储在i 中。检查 i 中的每个单词是否是 sudo:,如果是,我们翻转 bool 并递增。完成对行的解析后,重置 bool 值并移至下一行。

但是,根据我的输出判断,shell 正在尝试执行日志文件中的各个单词,通常会返回“$word : not found”。

最佳答案

你为什么不为此使用 grep?

grep sudo /var/log/auth.log

如果你想要一个计数管道它到 wc -l <​​/p>

grep sudo /var/log/auth.log | wc -l

或者更好地使用 grep 的 -c 选项,它会打印出有多少行包含 sudo

grep -c sudo /var/log/auth.log

或者我在这里遗漏了一些简单的东西?
编辑:滚动后我看到了 $sudoFailCount,你想计算使用 sudo 的失败尝试次数吗?您尚未在脚本中为 $sudoFailCount 定义任何值,因此它不会打印任何内容。此外,您还缺少 if 条件检查周围的 test 括号 [[ ]]

关于linux - 解析日志文件的shell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com