GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Bash-Skript zum Extrahieren der IP-Adresse

ip -4 addr show eth0 | grep -oP "(?<=inet ).*(?=/)"

So erhalten Sie einfach Ihre IP-Adresse:

echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`

Dadurch erhalten Sie die IP-Adresse von eth0.

Bearbeiten:Aufgrund von Namensänderungen von Schnittstellen in neueren Versionen von Ubuntu funktioniert dies nicht mehr. Stattdessen könnten Sie einfach Folgendes verwenden:

hostname --all-ip-addresses oder hostname -I , was dasselbe tut (gibt Ihnen ALLE IP-Adressen des Hosts).


Wenn das Ziel darin besteht, die IP-Adresse zu finden in Richtung Internet verbunden, dann sollte dies eine gute Lösung sein.

Bearbeiten 2021:„sed“- und „grep“-Versionen und neue „awk“-Versionen (einige sind gnu) hinzugefügt

Um herauszufinden, welche IP-Addierer in Verbindung mit dem Internet verwendet werden, können wir den ip route verwenden Befehl. Mit einer neueren Version von Linux erhalten Sie mehr Informationen mit einer typischen Ausgabe wie dieser:

ip route get 8.8.8.8
8.8.8.8 via 10.36.15.1 dev ens160 src 10.36.15.150 uid 1002
    cache

also um IP zu bekommen Sie müssen die IP nach src finden , mit awk , sed oder grep

ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/src (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/src/)$0=$(i+1)}NR==1'

ip route get 8.8.8.8 | sed -E 's/.*src (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*src \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed  -nE '1{s/.*?src (\S+) .*/\1/;p}'

ip route get 8.8.8.8 | grep -oP 'src \K[^ ]+'
10.36.15.150

und wenn Ihnen die Oberfläche gefällt Name mit awk , sed oder grep

ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/dev (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)$0=$(i+1)}NR==1'

ip route get 8.8.8.8 | sed -E 's/.*?dev (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*dev \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed  -nE '1{s/.*?dev (\S+) .*/\1/;p}'

ip route get 8.8.8.8 | grep -oP 'dev \K[^ ]+'
ens192

ip route öffnet keine Verbindung, sondern zeigt nur die Route, die benötigt wird, um zu 8.8.8.8 zu gelangen . 8.8.8.8 ist Googles DNS.

Wenn Sie dies in einer Variablen speichern möchten, tun Sie Folgendes:

my_ip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')

my_interface=$(ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}')

Warum eine andere Lösung möglicherweise fehlschlägt:

ifconfig eth0

  • Wenn die Schnittstelle, die Sie haben, einen anderen Namen hat (eno1, wifi, venet0 usw.)
  • Wenn Sie mehr als eine Schnittstelle haben
  • IP-Verbindungsrichtung ist nicht die erste in einer Liste mit mehr als einem IF

Hostname -I

  • Bekommt möglicherweise nur 127.0.1.1
  • Funktioniert nicht auf allen Systemen.
  • Geben Sie alle IPs an, nicht nur die mit dem Internet verbundene. -I, --all-ip-addresses alle Adressen für den Host

Wenn Sie eine durch Leerzeichen getrennte Liste Ihrer IPs erhalten möchten, können Sie den hostname verwenden Befehl mit dem --all-ip-addresses (kurz -I )-Flag

hostname -I

wie hier beschrieben:Putting IP Address into bash variable. Gibt es einen besseren Weg?


Linux
  1. So verwenden Sie ein verschlüsseltes Passwort in einem Linux-Bash-Shell-Skript

  2. Analysieren des Bash-Verlaufs unter Linux

  3. Ändern des Linux-Systempassworts im Bash-Skript

  4. Linux-Betriebssystemdienst „scsi_reserve“

  5. Ausführen des PHP-Skripts (PHP-Funktion) in Linux Bash

35 Bash-Skriptbeispiele

So finden Sie die IP-Adresse unter Linux

So führen Sie ein Bash-Skript aus

So ändern Sie die IP-Adresse unter Linux

Extrahieren Sie die tar.gz-Datei unter Linux

Shell/Bash-Skript zum Finden von Primzahlen in Linux