Мне нужна помощь с этим скриптом Этот скрипт анализирует apache_access.log через filter.txt, если существует термин в фильтре, скрипт что-то сделает. Моя проблема, я думаю, в первой команде "for", я не могу использовать фильтр построчно.
Кто-нибудь может мне помочь?
for term in `tail -n $LINESTOSEARCH $IPEATERFILTER`
do
for ip in `tail -n $LINESTOSEARCH $LOGFILE | grep "$TERM" | awk "{print \\$1}" | sort | uniq -c | sort -rn | head -20 | awk "{if (\\$1 > $THRESHOLD) print \\$2}"`
do
# Look in iptables to see if this IP is already banned
if ! iptables -L INPUT -n | grep -q $ip
then
# Do something
fi
done
done
решение1
Тыне хочу читать строки сfor
. Вместо этого используйте while
and read
. Проблема в том, что оболочка разделяет аргументы по пробелам, поэтому любой пробел в строке файла журнала фактически заставит цикл запуститься еще раз.
tail -n $LINESTOSEARCH $IPEATERFILTER | while read -r line; do
# do something with "$line"
done
Повторите тот же узор для внутренних петель.