nul
17-03-2006, 20:36
Ich muss grad ein Skript schreiben, dass mir eine Linux-Log-Datei durchsucht und dann einige Werte darstellt!
Dazu les ich die DAtei ein und geh sie Zeilenweise durch! Mein Problem ist, dass am Ende der while-Schleife das Array fuer die IP-Adressen (hier wird noch nur der Index 0 benutzt) leer ist!
Innerhalb der Schleife ist hingegen die korrekte IP-Adresse im Array an Position 0.
Ich haette mir zumindest erwarten dass am SChluss ne 1 steht, aber gar nichts!
Hier das Skript:
#! /bin/bash
# set -x;
COUNTER=0
LOGFILE="$1";
IP_INDEX=0
declare -a IP_ADDRESS;
declare -a USERS;
function getIpCountValue()
{
I=$1
U=$2
COUNTER2=0
IP_ARR_SIZE=${#IP_ADDRESS }
IP_INDEX=$COUNTER2
}
cat "$LOGFILE" |
while read line
do
line=`echo "$line" | egrep -o "(Accept|Failed).*"`
I=`echo "$line" | egrep -o "[0-9]{1,3}(\.[0-9]{1,3}){3}"`
U=`echo "$line" | egrep -o "(user)[0-9]*"`
ACCESS=`echo "$line" | grep "Accepted password"`
ACCESS="$ACCESS"`echo "$line" | grep "Accepted publickey"`
FAILED=`echo "$line" | grep "Failed password"`
IP_ADDRESS[0]=1
if [ ${#ACCESS} -gt 0 ]
then
getIpCountValue $I $U
IP_ARR_SIZE=${#IP_ADDRESS }
echo "Index: " $IP_INDEX
IP_ADDRESS[$IP_INDEX]=$I
fi
if [ ${#FAILED} -gt 0 ]
then
getIpCountValue $I $U
fi
done
echo "IP" ${IP_ADDRESS[0]}
Die Werte fuer I sind nicht leer, das hab ich schon ueberprueft, muesste eigentlich alles passen - tuts aber nicht...
Hat jemand ne Erklaerung dafuer?
Dazu les ich die DAtei ein und geh sie Zeilenweise durch! Mein Problem ist, dass am Ende der while-Schleife das Array fuer die IP-Adressen (hier wird noch nur der Index 0 benutzt) leer ist!
Innerhalb der Schleife ist hingegen die korrekte IP-Adresse im Array an Position 0.
Ich haette mir zumindest erwarten dass am SChluss ne 1 steht, aber gar nichts!
Hier das Skript:
#! /bin/bash
# set -x;
COUNTER=0
LOGFILE="$1";
IP_INDEX=0
declare -a IP_ADDRESS;
declare -a USERS;
function getIpCountValue()
{
I=$1
U=$2
COUNTER2=0
IP_ARR_SIZE=${#IP_ADDRESS }
IP_INDEX=$COUNTER2
}
cat "$LOGFILE" |
while read line
do
line=`echo "$line" | egrep -o "(Accept|Failed).*"`
I=`echo "$line" | egrep -o "[0-9]{1,3}(\.[0-9]{1,3}){3}"`
U=`echo "$line" | egrep -o "(user)[0-9]*"`
ACCESS=`echo "$line" | grep "Accepted password"`
ACCESS="$ACCESS"`echo "$line" | grep "Accepted publickey"`
FAILED=`echo "$line" | grep "Failed password"`
IP_ADDRESS[0]=1
if [ ${#ACCESS} -gt 0 ]
then
getIpCountValue $I $U
IP_ARR_SIZE=${#IP_ADDRESS }
echo "Index: " $IP_INDEX
IP_ADDRESS[$IP_INDEX]=$I
fi
if [ ${#FAILED} -gt 0 ]
then
getIpCountValue $I $U
fi
done
echo "IP" ${IP_ADDRESS[0]}
Die Werte fuer I sind nicht leer, das hab ich schon ueberprueft, muesste eigentlich alles passen - tuts aber nicht...
Hat jemand ne Erklaerung dafuer?