PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gueltigkeit eines Arrays oder wo ist meine IP-Adresse geblieben?



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?

Joghurt
20-03-2006, 11:59
Übliches Problem:
cat foo | while .... macht eine subshell für den While-teil auf, der dann ein eigenes Environment hat.

Ein Grund mehr, auf "useless use of cat" zu verzichten.

So sollte es gehen

while read line; do
...
done < $LOGFILE

baumgartner
20-03-2006, 12:40
wie du deine ip adresse herausfindest, steht hier: http://www.mrunix.de/forums/showthread.php?s=&threadid=30232