Rufen Sie die IP-Adresse von ifconfig ab

462
Federico Ponzi

Ich habe gerade meine Shell-Punkt-Datei aktualisiert und dachte, es wäre schön, einen Alias ​​zu haben, der nur meine IP-Adresse anzeigt. Normalerweise verbinde ich mich mit WLAN, das sich auf wlan0 befindet und es ist der letzte "Block" von Geräten.

Ich habe also so etwas:

wlan0 Link encap:Ethernet HWaddr 6c:71:d9:d3:28:9d  inet addr:192.168.1.16 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::6e71:d9ff:fed3:289d/64 Scope:Link 

Und ich möchte meine Bcast-Adresse.

Mit diesem Befehl kann ich es bekommen:

alias ip="ifconfig | grep Bcast | tail -n1 | cut -d' ' -f14 | cut -d':' -f2" 

Aber das gefällt mir nicht. Gibt es einen saubereren Weg, dies zu tun?

0
Wenn Sie sicher sind, dass `wlan0` die Schnittstelle ist, die Sie verwenden, führt der folgende Trick aus:` ifconfig wlan0 | sed -n 's /^.* Bcast: \ (. * \). * $ / \ 1 / p ``. Ist das hübscher? AFH vor 8 Jahren 2
Ja, viel besser als 4 Befehle. Aber könntest du es bitte erklären? Vielen Dank Federico Ponzi vor 8 Jahren 0
Ich muss es als Antwort tun. AFH vor 8 Jahren 0

1 Antwort auf die Frage

1
AFH

Wenn Sie sicher sind, dass dies wlan0die Schnittstelle ist, können Sie die Informationen nur für diese Schnittstelle mit:

ifconfig wlan0 

Da Sie jetzt nur noch eine Zeile enthalten Bcast:(eliminieren tail), können Sie seddie grepund cutFunktionen kombinieren :

ifconfig wlan0 | sed -n 's/^.*Bcast:\(.*\) .*$/\1/p' 

In diesem Fall sed -nentfällt das routinemäßige Drucken von Zeilen aus der Eingabe, und die Suchzeichenfolge stimmt mit der gesamten Zeile überein, wobei markiert wird, was zwischen Bcast:dem nächsten und dem nächsten Leerzeichen liegt. Die Ersetzung ist nur dieses markierte Feld und /püberschreibt das -nund erzwingt das Drucken. Um diese Zeichenfolge einem Alias ​​zuzuweisen, müssen Sie doppelte Anführungszeichen verwenden, um einige der Zeichen mit einem Back-Slash zu schützen, oder einfache Anführungszeichen verwenden, um die im obigen Befehl enthaltenen durch zu ersetzen '\''(das resultierende Ergebnis kann jedoch weggelassen werden '').

Wenn Sie sich vergewissern möchten, dass dies wlan0die gewünschte Schnittstelle ist und keine anderen für den Internetzugang konfiguriert sind, können Sie herausfinden, welche Schnittstelle verwendet wird (Sie müssen möglicherweise installieren networkctl):

networkctl status | sed -n 's/^.*Gateway: .* on \(.*$\)/\1/p' 

Dies verwendet seddie networkctlAusgabe ähnlich wie zuvor. Jetzt können Sie sie kombinieren:

ifconfig $(networkctl status |\ sed -n 's/^.*Gateway: .* on \(.*$\)/\1/p')|sed -n 's/^.*Bcast:\(.*\) .*$/\1/p' 

Dies ist zwar kaum ordentlich, deckt jedoch die meisten Grundlagen ab - insbesondere wenn Ihr WLAN nicht funktioniert und Sie stattdessen Ethernet verwenden, sollte es trotzdem funktionieren. Wenn beide Schnittstellen zusammenarbeiten, wird es noch komplizierter: Ich überlasse es Ihnen, das herauszufinden (Hinweis: Sie müssen /Gateway/,$den Zeilenbereich für den sBefehl verwenden und die IPv6-Einträge ausschließen).

Die Ausgabe von "ip -4 -o dev wlan0" ist möglicherweise einfacher zu analysieren Teun Vink vor 8 Jahren 0
@TeunVink - Meine Version von `ip` (Ubuntu 15.04) hat` dev` nicht als Objekt. Die Informationen sind in "ip -4 -o addr", aber ich denke nicht, dass dies einfacher zu analysieren ist. AFH vor 8 Jahren 0