Shell script: text finden

below

Aktives Mitglied
Thread Starter
Dabei seit
15.03.2004
Beiträge
13.565
Reaktionspunkte
1.092
Hallo,

ich möchte mit einem Shell script die IP Address von einem rechner rausbekommen. Dazu wollte ich eigentlich den Output von ping -c 1 parsen, aber das klappt nicht ganz:

Code:
#!/bin/sh

if [ $# -ne 1 ]; then
 echo 1>&2 Usage: $0 machinename
 exit 127
fi

ping -c 1 $1 | perl -i -pe "s/PING $1 \(([^)]*)\):.*$/\1/"
Das gibt zwar die IP, aber auch den Rest vom Ping

Hat jemand einen Vorschlag?

Danke

Alex
 
below schrieb:
Hat jemand einen Vorschlag?

Klar, du löscht ja einfach nur in der Zeile in der "PING" steht alles ausser der IP-Adresse selbst. Den Rest der Ausgabe veränderst du ja gar nicht. Was dir jetzt noch fehlt ist, dass du dir vor dem Ersetzen erstmal die richtige Zeile suchst, z.B. mit
Code:
grep PING
 
Ahhhh, klar

Danke
 
Yo, chicos!

Warum nimmst Du dafür denn ping und nicht dig oder nslookup oder so was?

Sophokles
 
Weil der ping so in dem Ablauf von Apple stand :p

Aber aus dig oder nslookup müsste ich die IP ja auch rausholen

Alex
 
Yo, chicos!
below schrieb:
Aber aus dig oder nslookup müsste ich die IP ja auch rausholen

Das schon, aber wenn man nur eine reverse DNS Auflösung will, wäre mir nicht unbedingt ping als erstes brauchbares Werkzeug eingefallen :)

Sophokles
 
Ganz genau, deshalb:

#!/bin/csh
nslookup -type=A $1 | xargs | awk '{print $10}'
 
@Sophokles: Du meinst DNS, nicht reverse DNS ;)

@MacHomer: Das funktioniert bei mir nicht. Mit `test.sh localhost` kommtnur ein CR, mit `test.sh rendezvousname.local` kommt: xargs: unterminated quote

Alex
 
host localhost | awk '{print $4}'

ist doch einfacher ;)
 
oneOeight schrieb:
host localhost | awk '{print $4}'

ist doch einfacher ;)

%host macpro.local
Host macpro.local not found: 3(NXDOMAIN)

Alex
 
für die local adressen kannst du auch keinen richtigen DNS nameserver fragen, weil die nicht darüber laufen sondern über mDNS...

dig @127.0.0.1 -p 5353 macpro.local
 
Zuletzt bearbeitet:
Hrm, könnte es sein das Apple deshalb "ping" benutzt hat ;) ?

Alex
 
naja, die kennen wohl ihre eigenen tools nicht so richtig ;)
dns-sd -Q macpro.local
 
Bei dem dns-sd muss ich CTRL-C drücken damit er wieder kommt.

Ich weiss ja nicht, aber immer noch scheint mir da ping irgendwie nicht die schlechteste Alternative zu sein.

Alex
 
mit dig auf localhost port 5353 geht es doch auch...
auch wenn da das parsen etwas schwieriger ist ;)
 
Code:
#!/bin/bash

temp=`ping -c 1 $1 | grep PING | awk '{print $3}'`; 
echo ${temp:1:${#temp}-3};

exit 1

Ich würds so machen. Gibt wenn er den host nicht kennt auch die standard Fehlermeldung zurück.
 
"Der Zweck heiligt die Mittel" ist hier nicht angebracht!
Ein "Ping" zur IP-Auflösung ist wie eine frische Pizza
backen um dann nach Fertigstellung den Rand abzuschneiden
und nur diesen zu verspeisen... :confused:
 
macHomer schrieb:
"Der Zweck heiligt die Mittel" ist hier nicht angebracht!
Ein "Ping" zur IP-Auflösung ist wie eine frische Pizza
backen um dann nach Fertigstellung den Rand abzuschneiden
und nur diesen zu verspeisen... :confused:

Das geht mir hier schon alles zu weit off-topic, aber dennoch:

Mir ist schon klar, was DNS Resolution ist. Aber in diesem Fall suchte ich einfach die (für mich :D ) einfachste Lösung.

Alex
 
Zurück
Oben Unten