• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] shell-script

Hi,

In einer Shell (sh) habe ich zwei Variablen mit IP-Adressen. Beispielsweise

$MEMBER_IP mit 123.123.*.*
$REMOTE_ADDR mit 123.123.123.123
oder
$REMOTE_ADDR mit 234.234.234.234

Jetzt möchte ich diese beiden Adressen vergleichen und das Resultat in einer Variablen is_member speichern. Im ersten Beispiel sollte is_member den Wert 1 erhalten, im zweiten den Wert 0.
Hat mir jemand einen Tip, wie man so etwas macht?

Gruss und Dank
Sophie
 
moin moin!
Code:
man test
man if
auf jeden fall mal ansehen. Die eckigen klammern im folgenden sind der Befehl test. Die vergleichsoperatoren sind anfangs etwas verwirrend, weil ein "=" zum Beispiel nur einen String vergleicht.

Code:
#!/bin/bash

var1=123.123.123.123
var2=234.234.234.234
var3=

if [ $var1 = $var2 ]; then
 var3=1
else
 var3=0
fi

aber es geht auch noch einfacher:

Code:
string equal $var1 $var2

gibt dir direkt 1 oder 0 zurück. Du kannst mit dem string Befehl auch nur einen Teil der Adresse vergleichen, zum beispiel die ersten beiden Oktette, dafür müsstest du dann einfach nach der position des zweiten punktes suchen und den string davor vergleichen.

Gruß,
RaverJK
 
Naja, aber damit bekommst Du keinen Wildcard-Vergleich hin

Ich würd mal in Richtung sed schauen. Aber so ausm Kopf bekomme ich das jetzt auch nicht hin.
 
Also das hat mich jetzt beschäftigt... hab jetzt sowas:

Code:
#!/bin/bash

var1=123.123.*.*
var2=123.121.123.123
var3=

v1oct1=`echo $var1 | sed -e 's|\([^\.]\+\)\.\([^\.]\+\)\..\+|\1|g'`
v1oct2=`echo $var1 | sed -e 's|\([^\.]\+\)\.\([^\.]\+\)\..\+|\2|g'`

v2oct1=`echo $var2 | sed -e 's|\([^\.]\+\)\.\([^\.]\+\)\..\+|\1|g'`
v2oct2=`echo $var2 | sed -e 's|\([^\.]\+\)\.\([^\.]\+\)\..\+|\2|g'`


if [ $v1oct1 -eq $v2oct1 ] & [ $v1oct2 -eq $v2oct2 ]; then
 var3=1
else
 var3=0
fi

echo $var3
 
Hi RaverJK,

genial, wirklich genial.
Da erblasse ich immer wieder vor Neid, wenn ich sehe, was andere aus sed herausholen können.

Ganz herzlichen Dank
Sophie
 
Hehe, kein Thema.

Es soll nur nicht der Eindruck entstehen, ich wäre ein Meister in sowas - ich hab ja nicht mal mein Grundstudium geschafft... :wink:
 
aber beachte, dass in dem Beispiel nur die ersten beiden Oktette verglichen werden. Der rest wird ignoriert. Aber man kann es ja ausbauen...
 
Oben