[bash]Test ob gültige IP

P

Phate

Frickler/Kellerkommunist
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:
Code:
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:
Code:
#!/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 :)
 
Zuletzt bearbeitet:
Code:
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
 
Zurück
Oben