ou tel aussi: p> ( Mes excuses à * BSD et Solaris utilisateurs, comme la commande ci-dessus peut ne pas fonctionner ; je n'ai pas pu tester) < / p> p>
7 Réponses :
Vous donnez une interface directe, réduisant ainsi un grep.
ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'
Merci@coder pour la suggestion. Je me demande si nous ne pouvons même pas aller plus loin cependant! Après tout, les outils * Nix font quelque chose de simple et le font bien. Il peut donc y avoir un moyen standard d'obtenir l'adresse IP d'une interface. Par exemple, quelque chose comme hostname --ip-adresse code> (cela ne fonctionne pas) serait génial.
ifconfigthh0 | grep inet | Cut -D: -F2 | Cut -D '' -F1 CODE> - De cette façon, vous supprimez Awkwewewewewewewewwk. Bien sûr, ne fonctionnera pas avec PPP0, etc., mais si vous avez plus d'une carte réseau, vous obtiendrez également plus d'une réponse avec votre solution. (tête -1 à saisir en premier?)
Merci Tom pour le pointeur; Cela fait de l'aide. Une mine d'information. Le showIp.c code> adresse le problème (suppression du formatage de la sortie). Je me demande s'il existe un moyen de compter sur les outils "standard" * Nix dans les coquilles. Pour le contexte, j'écris des scripts censés travailler sur * Nix et * BSD. Cela fonctionne, mais mon chemin n'est pas très élégant. Utilisation de
showIP.c code>, je devrais déployer le programme avec le script, que je crois peut être évité.
Vous pouvez le faire avec une seule commande AWK. Pas besoin d'utiliser trop de tuyaux.
$ ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}'
Votre proposition est très bien. Des tests simples montrent qu'il est également plus rapide en moyenne que mes propositions de base. Je voudrais accepter le vôtre pour l'instant. La portabilité n'est pas meilleure, en raison de _ [1] code> et
2 $ code>. Par exemple, je dois changer les indices sous * BSDS (AH, pourrait le tester cette fois). Honnêtement, je me demande toujours s'il y a un outil pour obtenir la propriété intellectuelle en un coup, peut-être des paramètres de passage (par exemple le nom de l'interface).
ifconfig code> est en effet "Configurer les paramètres d'interface réseau", pas obtenir des paramètres ... peut-être une version bien répandue de
showIp.c code>, comme introduit par Tom, serait génial .
Si vous souhaitez envisager la portabilité, vous voudrez peut-être essayer d'utiliser une bibliothèque de socket à partir des différents outils de programmation, tels que Perl ou Python. Par exemple, dans Python, on peut obtenir l'adresse IP à l'aide de socket.gethostbyname (socket.gethostName ()) code>. Bien sûr, c'est juste un exemple simple. Beaucoup de gens sont proposés avec la plate-forme des méthodes indépendantes de la liste d'adresses d'interface à l'aide de ces bibliothèques. Donc, vous voudrez peut-être essayer.
Le dernier commentaire de GhostDob74 m'a donné l'idée suivante: ifconfig | grep -op "\ b \ d {1,3} \. \ d {1,3} \. \ d {1,3} \. \ d {1,3} \ b" code> c'est très Portable, comme il se fusionne uniquement sur des outils standard et ne supporte aucune hypothèse sur la position de l'adresse IP dans les lignes analysées. Remarque: la regex capture de mauvaises adresses IP, mais cela n'a pas beaucoup donné que
ifconfig code> renvoie des adresses valides.
ifconfig | grep 'Broadcast \ | biccast' | awk -f '' {'print 2'} | tête-n ° 1 | Sed -e 's / addr: // g' p> blockQuote>
Peut-être que cela pourrait aider.
more /etc/hosts | grep `hostname` | awk '{print $1}'
Cela aiderait à spécifier au moins les conditions où vous pensez que ce travail (OS, etc.). Le grep code> est trop restrictif pour moi (testé sur deux OSES, sans succès).
J'ai testé dans les serveurs Aix. Fonctionne bien.
Il n'a pas fonctionné sur Centos et Mac OS X. Je ne connais pas suffisamment de normes, mais je me demande comment régulier le contenu du fichier / etc / etc. / hôte> est entre les systèmes.
# for bash/linux ipaddr(){ if="${1:-eth0}" result=$(/sbin/ip -o -4 addr show dev "${if}" | sed 's/^.*inet // ; s/\/...*$//') printf %s "${result}" tty -s && printf "\n" }
basé sur Ce Vous pouvez utiliser la commande suivante
ip route get 8.8.8.8 | awk 'NR==1 {print $NF}'
Et si la machine a plus d'une carte réseau?
Qu'entendez-vous par «l'adresse IP»? Il est très courant de nos jours d'avoir deux adresses IP ou plus, même sur un poste de travail ...
Oui, j'ai pensé à cette question. Mais cela dépend de ce que les scripts doivent faire. Pour mes besoins individuels, je passe habituellement le nom d'interface sur ifconfig (i.e
ifconfig eth0 code>, etc.). Je pensais que cela rendrait la question trop spécifique. Toute suggestion comment rendre la question plus significative alors? Merci!