Como capturar o primeiro endereço IP que vem do ifconfig
comando?
ifconfig -a
enw178032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 100.14.22.12 netmask 255.255.0.0 broadcast 100.14.255.255
inet6 fe80::250:56ff:fe9c:158a prefixlen 64 scopeid 0x20<link>
ether 00:10:56:9c:65:8a txqueuelen 1000 (Ethernet)
RX packets 26846250 bytes 12068811576 (11.2 GiB)
RX errors 0 dropped 58671 overruns 0 frame 0
TX packets 3368855 bytes 1139160934 (1.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Resultado esperado:
IP=100.14.22.12
Respostas:
É melhor evitar usar
ifconfig
para obter um endereço IP em um script que está obsoleto em algumas distribuições (por exemplo, CentOS e outros, não o instala por padrão).Em outros sistemas, a saída do ifconfig varia de acordo com o lançamento da distribuição (por exemplo, a saída / espaçamento / campos do
ifconfig
difere do Debian 8 para o Debian 9, por exemplo).Para obter o endereço IP
ip
, de maneira semelhante, você está perguntando:Ou melhor ainda:
Ou, como você pede "IP ="
Adaptar descaradamente a ideia da @Roman
Saída normal:
De
man ip
:Veja um exemplo de por que
ifconfig
não é recomendado: BBB: `bbb-conf --check` mostrando endereços IP como` inet` - ifconfig woesPara entender por que
ifconfig
está saindo, consulte Diferença entre os comandos 'ifconfig' e 'ip'fonte
awk
. Muita inteligência para mim, ainda acordando. Eviteifconfig
, ele não tem futuro, e a posição do endereço IP muda, há pelo menos duas versões / implementações diferentes (?) Para Linux por aí que eu conheço.-brief
parâmetro e sua saída fica mais fácil de analisar (31-08-2015: git.kernel.org/pub/scm/network/iproute2 /iproute2.git/commit/… )-o
que de fato parece útil para scriptsAwk
solução:Saída de amostra:
fonte
fonte
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '