Archiv verlassen und diese Seite im Standarddesign anzeigen : [bash]Test ob gültige IP
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
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.
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 :)
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
8o ;( :respekt:
Oh Gott...
Powered by vBulletin® Version 4.2.0 Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.