GNU/Linux >> Linux Esercitazione >  >> Linux

Script bash di Linux per estrarre l'indirizzo IP

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

Per ottenere solo il tuo indirizzo IP:

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

Questo ti darà l'indirizzo IP di eth0.

Modifica:a causa dei cambi di nome delle interfacce nelle versioni recenti di Ubuntu, questo non funziona più. Invece, potresti semplicemente usare questo:

hostname --all-ip-addresses o hostname -I , che fa la stessa cosa (ti fornisce TUTTI gli indirizzi IP dell'host).


Se l'obiettivo è trovare l'indirizzo IP connesso in direzione di Internet, questa dovrebbe essere una buona soluzione.

Modifica 2021:Aggiunte versioni "sed" e "grep" e nuove versioni "awk" (alcune sono gnu)

Per trovare quale sommatore IP viene utilizzato connesso a Internet, possiamo usare ip route comando. Con la versione più recente di Linux ottieni maggiori informazioni con un output tipico come questo:

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

quindi per ottenere IP devi trovare l'IP dopo src , utilizzando awk , sed o 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

e se ti piace l'interfaccia name utilizzando awk , sed o 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 non apre alcuna connessione, mostra solo il percorso necessario per arrivare a 8.8.8.8 . 8.8.8.8 è il DNS di Google.

Se ti piace memorizzarlo in una variabile, fai:

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]}')

Perché un'altra soluzione potrebbe non funzionare:

ifconfig eth0

  • Se l'interfaccia che hai ha un altro nome (eno1, wifi, venet0 ecc.)
  • Se hai più di un'interfaccia
  • La direzione di connessione IP non è la prima in un elenco di più di un IF

Hostname -I

  • Potrebbe ricevere solo 127.0.1.1
  • Non funziona su tutti i sistemi.
  • Dai a tutti gli IP non solo quelli connessi a internet. -I, --all-ip-addresses tutti gli indirizzi per l'host

Se vuoi ottenere un elenco separato da spazi dei tuoi IP, puoi usare hostname comando con --all-ip-addresses (breve -I ) flag

hostname -I

come descritto qui:Inserimento dell'indirizzo IP nella variabile bash. C'è un modo migliore?


Linux
  1. Come utilizzare la password crittografata nello script della shell Bash Linux

  2. Modifica della password di sistema Linux nello script bash

  3. Come eseguire un comando bash Linux in uno script PERL?

  4. Servizio del sistema operativo Linux 'scsi_reserve'

  5. Corrispondenza del modello di script Bash

35 Esempi di script Bash

Come trovare l'indirizzo IP in Linux

Come eseguire uno script Bash

Come modificare l'indirizzo IP su Linux

Estrai il file tar.gz in Linux

Script Shell/Bash per trovare i numeri primi in Linux