PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [bash]Test ob gültige IP



Phate
23.10.2004, 11:41
Tach, ich brauche in einem shellscript eine Überprüfung einer von einem User eingegeben IP, d.h. daß sie 4 Nummern-Blöcke und 3 Punkte hat und nicht aus 7 Zahlen mit Kommata usw besteht.
Ich dachte eventuell so:

if echo $var | egrep <muster>; then blabla
Es geht jetzt um <muster>, keine Ahnung wie ich ein Muster für grep schreiben könnte, welches IP-Adressen beschreibt.
Die Punkte würde ich so darstellen : \.
nur wie die Zahlen?

Jemand ne Idee oder einen anderen einfacheren Lösungsansatz?

Vielen Dank,
Phate

Cyber
23.10.2004, 13:10
Bei den regexp gehts mit [0-9] , allerdings solltest du ja auch den Bereich 0-255 prüfen, daher würd ich die IP nachdem sie auf korrete syntax geprüft würde in vier werte zerlegen und diese nochmals auf checken ob sie in einem gültigen Bereich liegen.

Phate
23.10.2004, 13:15
Cybermarc: Genau das habe ich gerade gemacht! Nach anfänglichen Versuchen alles in einem zu haben und der Problematik mit 1-255 ist das dabei heraus gekommen, vielleicht kanns ja mal wer anderes gebrauchen:


#!/bin/bash
# IP-Test

echo "type an ip to check for:"
read var

if echo $var |egrep '.*\..*\..*\..*' >/dev/null 2>&1; then

counter=1
start=1
stop=255

while [ $counter -le '4' ]; do

if [ ! `echo $var|awk -F. '{print $'$counter'}'` -ge $start ] || \
[ ! `echo $var|awk -F. '{print $'$counter'}'` -le $stop ]; then
echo "IP invalid"
exit 1
fi
counter=`expr $counter + 1`
done

else echo "wrong syntax"
exit 1
fi

echo "$var is a valid IP"



Die letzte Frage bleibt dennoch bestehen: kennt jemand ne kürzere Lösung? Eine elegantere? Ohne externe Programme wie ipcalc oder root-Rechte?

Gruß, Phate

Ach ich liebe bash :)

rup
23.10.2004, 13:53
if echo $var | egrep "^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])$" ; then echo ok ; fi :rolleyes: 8o

Phate
23.10.2004, 14:03
8o ;( :respekt:

Oh Gott...