46 votes

Mettre l'adresse IP dans une variable bash. Existe-t-il un meilleur moyen

J'essaie de trouver un moyen court et robuste de mettre mon adresse IP dans une variable bash et je me demandais s'il existait un moyen plus facile de le faire. Voici comment je procède actuellement :

ip=`ifconfig|xargs|awk '{print $7}'|sed -e 's/[a-z]*:/''/'`

0 votes

Comment avez-vous ajouté les backticks ?

4 votes

Si vous mettez 4 espaces avant la ligne, c'est considéré comme du code, et les backticks ne sont pas traités

76voto

TuxSax Points 452

Je me suis battu avec cela aussi jusqu'à ce que je découvre qu'il existe une commande simple pour cela.

hostname -i

C'est aussi simple que ça !

1 votes

C'est probablement la meilleure solution.

8 votes

Dans mon cas, l'ip ne pouvait pas être résolu et je devais obtenir l'ip donné à l'interface privée eth1, donc j'ai fait hostname -I | cut -f2 -d' '

7 votes

Notez que cela ne fonctionne pas sous OSX. Le seul hostname Les options sont -fs

63voto

user000001 Points 12050

man hostname recommande d'utiliser le --all-ip-addresses (raccourci -I ), au lieu de -i parce que -i ne fonctionne que si le nom d'hôte peut être résolu. Alors voilà :

hostname  -I

Et si vous n'êtes intéressé que par le primaire, cut il :

hostname  -I | cut -f1 -d' '

1 votes

Un seul serveur que je reçois de hostname -I : 192.168.1.30 seulement l'IP unique. Sur mon serveur VPS, j'obtiens ce résultat 127.0.0.2 143.127.52.130 2a00:dee0:ed3:83:245:70:fc12:d196 alors je dois ajouter des filtres. Sur mon linux tuner -I` n'existe pas, donc le mieux dans tout cela est ip route get 8.8.8.8 | awk 'NR==1 {print $NF}'

1 votes

Seulement Linux et pas Mac mais c'est la meilleure réponse.

3 votes

Notez que la page de manuel de -I dit Ne faites pas d'hypothèses sur l'ordre des sorties.

41voto

Synchro Points 2539

ip est le bon outil à utiliser comme ifconfig a été déprécié depuis un certain temps maintenant. Voici une commande sans awk/sed/grep qui est significativement plus rapide que toutes les autres postées ici !

ip=$(ip -f inet -o addr show eth0|cut -d\  -f 7 | cut -d/ -f 1)

(oui, c'est un espace échappé après le premier -d )

24voto

woliveirajr Points 4297

Vous pouvez jeter un coup d'œil à ce site pour les alternatives.

Un moyen serait :

ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'

Un peu plus petit, bien qu'il ne soit pas du tout robuste, et peut renvoyer une valeur erronée selon votre système :

$ /sbin/ifconfig | sed -n '2 p' | awk '{print $3}'

(de http://www.htmlstaff.org/ver.php?id=22346 )

13voto

Matthew G Points 259

La commande ifdata (qui se trouve dans le moreutils ) fournit une interface pour récupérer facilement les données d'ifconfig sans avoir besoin d'analyser manuellement la sortie d'ifconfig. Cela est réalisé avec une seule commande :

ifdata -pa eth1

eth1 est le nom de votre interface réseau.

Je ne sais pas comment ce paquet se comporte lorsque ifconfig n'est pas installé. Comme Syncrho l'a indiqué dans sa réponse, ifconfig a été déprécié depuis un certain temps, et n'est plus présent sur un grand nombre de distributions modernes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X