www.xxx.yyy.zzz -> www.xxx.yyy ja?
Einfach : echo ${IP} | cut -d"." -f-3
-- Randolf
+-------------------------------------------------------------------------+
| Randolf Skerka http://www.heim2.tu-clausthal.de/~randolf |
| Tel./Fax. ++49-5323-78140 Randolf...@heim2.tu-clausthal.de |
+----= Don't always say what you know, but always know what you say! =----+
ich habe ein Problem mit einem CGI-Script:
Es soll anhand der IP-Adresse des abrufenden Rechners
erkannt werden ob dieser Rechner einer bestimmten Gruppe angehoert.
Das CGI-Script soll als Linx/UNIX-ShellScript laufen.
Das Vergleichen der IP-Adresse mit einer von mir vorgegebenen
funktioniert einwandfrei :-)
Nun moechte ich aber nur die z.B. ersten drei 'Gruppen' der
IP-Adresse vergleichen. Genau hier liegt mein Problem.
Wie kann ich einen String (IP-Adresse) einfach um x Stellen
kuerzen, um ihn dann zu vergleichen?
Besten Dank schon mal im voraus.
> Das CGI-Script soll als Linx/UNIX-ShellScript laufen.
> Das Vergleichen der IP-Adresse mit einer von mir vorgegebenen
> funktioniert einwandfrei :-)
> Nun moechte ich aber nur die z.B. ersten drei 'Gruppen' der
> IP-Adresse vergleichen. Genau hier liegt mein Problem.
> Wie kann ich einen String (IP-Adresse) einfach um x Stellen
> kuerzen, um ihn dann zu vergleichen?
man cut
(echo 192.168.2.100 | cut -d. -f1-3)
> Besten Dank schon mal im voraus.
Gruss
Thomas
--
/* (C)opyright by Thomas Rese, t...@gismo.owl.de, Tel.: 49 5251 680463 /
/ /
/ Real programmers don't comment... /
/ What was hard to write should be hard to read. */
if [ `echo $CLIENT_IP | grep -E 'xxx\.yyy\.zzz\..+'` ] ; then
echo Hallo freund
else
echo Hallo feind
fi
MfG Graffiti
--
-----------------------------------------------
Oliver Graffunder | Berlin, Charlottenburg
mailto:gr...@berlin.snafu.de
-----------------------------------------------
: Wie kann ich einen String (IP-Adresse) einfach um x Stellen
: kuerzen, um ihn dann zu vergleichen?
Aus der bash-FAQ:
Instead of using
/usr/local/bin/ipaddr | read A B C D
to break the local machine's IP address into separate octets, use
OIFS="$IFS"
IFS=.
set -- $(/usr/local/bin/ipaddr)
IFS="$OIFS"
A="$1" B="$2" C="$3" D="$4"
Beware, however, that this will change the shell's positional
parameters. If you need them, you should save them before doing
this.
Sagen wir also, die IP-Adresse stünde in $REMOTE_IP, dann sähe der Code für
Dich folgendermassen aus:
old_IFS="$IFS"
IFS=.
set -- $REMOTE_IP
IFS="$old_IFS"
AAA="$1" BBB="$2" CCC="$3" DDD="$4"
if [ "$AAA.$BBB.$CCC" = "192.168.1" ]
then
if [ "$DDD" -gt "97" -o "$DDD" -lt "127" ]
then
echo "Hallo Welt"
fi
fi
Vorteil: kommt ganz ohne forken aus.
-Winfried
> Nun moechte ich aber nur die z.B. ersten drei 'Gruppen'
> der IP-Adresse vergleichen. Genau hier liegt mein Problem.
>
> Wie kann ich einen String (IP-Adresse) einfach um x Stellen kuerzen, um
> ihn dann zu vergleichen?
newip=`expr "$oldip" : '\(.*\..*\..*\)\..*'`
... Regular expressions sind was schoenes :).
MfG Henning
--
Viele, die die schaendlichsten Dinge tun, fuehren die trefflichsten
Reden. (Demokrit)
... aber an dieser Stelle overkill.
Besser:
IFS="."
set $REMOTE_ADDR
und dann hat man die einzelnen Teile der IP-Adresse in $1 $2 $3 und $4, *ohne*
daß man dafür erst ein Programm starten muß.
Gerd
--
HOST SYSTEM NOT RESPONDING, PROBABLY DOWN. DO YOU WANT TO WAIT? (Y/N)