2013-10-07 5 views
5

sto cercando di trovare indirizzo IP del mio sistema attraverso uno script di shell e scrivere in un testo questo è il mio contenuto dello scripttrovare l'indirizzo IP del mio sistema per un'interfaccia particolarmente raffinata con script di shell (bash)

#!/bin/bash 

wifiip=$(ip addr | grep inet | grep wlan0 | awk -F" " '{print $2}'| sed -e 's/\/.*$//') 

eth0ip=$(ip addr | grep inet | grep eth0 | awk -F" " '{print $2}' | sed -e 's/\/.*$//') 

if [ "$eth0ip" == "0" ]; then 

    echo "$eth0ip" | grep [0-9]$ > /home/pi/att/ip.txt 

else 

    echo "$wifiip" | grep [0-9]$ > /home/pi/att/ip.txt 

fi 

e cercando di fare qualcosa di simile se l'interfaccia non è in alto stampa un altro ip in ip.txt

ma la sua dando

ip.sh: 14: [: unexpected operator 
+0

consideri semplificare questo ottenendo 'ip' per produrre un output più analizzabili; per esempio, 'ip -f inet -o addr mostra dev wlan0'. – Joe

risposta

14

Puliamo il codice prima. Non hai bisogno di catene di una dozzina di comandi e pipe diversi quando stai già utilizzando awk. Questo:

wifiip=$(ip addr | grep inet | grep wlan0 | awk -F" " '{print $2}'| sed -e 's/\/.*$//') 

può essere scritto semplicemente come questo:

wifiip=$(ip addr | awk '/inet/ && /wlan0/{sub(/\/.*$/,"",$2); print $2}') 

ma tutto il tuo script può essere scritto come un solo comando awk.

mi è necessario aggiornare la tua domanda con qualche esempio di output del comando ip addr, l'output desiderato dal comando awk dato che l'input, e spiegare più chiaramente ciò che si sta cercando di fare per mostrare il corretto modo per scrivere quello, ma potrebbe essere qualcosa di simile:

ip addr | awk ' 
/inet/ { ip[$NF] = $2; sub(/\/.*$/,"",ip[$NF]) } 
END { print ("eth0" in ip ? ip["eth0"] : ip["wlan0"]) } 
' > /home/pi/att/ip.txt 
+0

pi @ raspberrypi ~/attendance $ sh ip.sh ip.sh: 14: [: numero illegale: –

+1

@Ayushjoshi - Che cosa hai eseguito per ottenere quel messaggio di errore? Di nuovo, aggiorna la tua domanda come ho chiesto, specialmente con l'output di 'ip addr', altrimenti non posso né testare né eseguire il debug di alcuno script che pubblico. Sospetto che ci sia qualcosa nel tuo script della shell che non ci hai ancora mostrato (probabilmente una citazione ineguagliata) e CHE è ciò che sta causando i tuoi errori - aggiorna il tuo script per essere il più piccolo possibile ma continua a produrre il messaggio di errore e poi pubblica intero script –

+2

Meglio ancora scriverlo come 'ip addr show dev wlan0 | awk -F '[/] *' '/ inet/{print $ 3}' ', penserei. Lascia che 'ip' ti dia solo l'interfaccia che vuoi ... – twalberg

8

Ecco un buon modo per ottenere il tuo indirizzo IP. Questo ti dà l'indirizzo utilizzato per raggiungere Internet durante il test, quindi ti darà l'IP corretto anche se cambi da Wifi a eth o a qualsiasi altro tipo di IF.

vedi post più dettagliato qui: Linux bash script to extract IP address

my_ip=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}') 

per ottenere il nome di interfaccia:

my_if=$(ip route get 8.8.8.8 | awk '/dev/ {f=NR} f&&NR-1==f' RS=" ") 
+0

Grazie mille @jotne –

Problemi correlati