Preciso de ajuda com esse script Este script analisa o apache_access.log através de um filter.txt, se existir o termo em filter o script fará alguma coisa. Meu problema acho que está no primeiro comando "for", não estou conseguindo usar o filtro linha por linha.
alguém pode me ajudar?
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
Responder1
Vocênão quero ler linhas comfor
. Use while
e read
em vez disso. O problema é que o shell dividirá os argumentos em espaços em branco, portanto, qualquer espaço na linha do arquivo de log fará com que o loop seja executado novamente.
tail -n $LINESTOSEARCH $IPEATERFILTER | while read -r line; do
# do something with "$line"
done
Repita o mesmo padrão para os loops internos.