Atribuindo endereço IP à variável de ambiente [duplicado]

9

Como posso atribuir o endereço IP da eth0 a uma variável de ambiente, digamos $ ip, o mais facilmente possível?

Atualização: Distro é o Ubuntu Server 12.04 LTS.

    
por user204863 19.12.2012 / 00:03

7 respostas

5

Uma maneira mais curta (e mais interessante) é hostname -i . Não há mais problemas com ipconfig, ip, sed, awk e tal.

    
por 19.12.2012 / 00:59
4

Usar ip address show é o caminho a percorrer. Especialmente em qualquer sistema Linux moderno em que a interface que você está consultando possa ter vários endereços que ifconfig não conheceria.

$ ip a s eth0 | awk '/inet / {print$2}'
10.13.211.83/24
192.168.17.21/16

E, claro, se você não quiser a máscara de rede, basta enviar isso para qualquer número de itens, por exemplo:

cut -d/ -f1

Nota: No mesmo sistema, ifconfig mostra:

$ ifconfig em1 | awk '/inet / {print $2}'
10.13.211.83
    
por 19.12.2012 / 02:14
1

Não responda ao seu problema exato como você deseja que o IP atribuído a uma interface definida, mas eu pensei que poderia ser útil ter listado aqui para informações futuras a maneira de ter seu IP externo (mesmo se por trás de um NAT):

ip='wget -qO- ipecho.net/plain'
    
por 19.12.2012 / 01:32
1

Tente fazer isso:

ip=$(
    ifconfig eth0 |
    perl -ne 'print $1 if /inet\s.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/'
)
echo "$ip"
    
por 19.12.2012 / 00:08
0

Como você pode ver, hostname -i pode mostrar 127.0.0.1 (não NAT here (archlinux)), isso não é o que queremos.

Então eu proponho:

dev=eth0
ip=$(
    ip a s dev $dev |
        awk '/inet /{gsub("/.*", "");print $2}'
)
echo "$ip"

Ou se você tiver -P alternar para grep :

ip a s dev eth0 | grep -oP 'inet\s+\K[^/]+'

Eu acho que é a solução mais curta =)

    
por 19.12.2012 / 20:03
0

Confira também:

ifconfig eth0 | awk '/inet /{print $2}' | cut -f2 -d':'

que funcionará mesmo no Solaris e no HP-UX (use dev de rede apropriado em vez de eth0 ).

Quanto ao comando hostname -i , tente hostname -I se você tiver uma interface configurada (exceto loopback).

    
por 24.07.2013 / 11:48
-1

Você também pode tentar isso,

IP='wget -q -O- http://checkip.dyndns.org/index.html | grep 'IP'| html2text | cut -c 21-36'
    
por 24.07.2013 / 06:11