Obtém o endereço IP do ifconfig

0

Eu estava atualizando meu arquivo de ponto de shell e achei que seria interessante ter um alias que mostrasse apenas o meu ip. Eu geralmente me conecto com o wifi, que está no wlan0 e é o último "bloco" de dispositivos.

Então, eu tenho algo assim:

wlan0     Link encap:Ethernet  HWaddr 6c:71:d9:d3:28:9d  
          inet addr:192.168.1.16  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::6e71:d9ff:fed3:289d/64 Scope:Link

E eu quero o meu endereço de Bcast.

Com este comando, posso obtê-lo:

alias ip="ifconfig | grep Bcast | tail -n1 | cut -d' ' -f14 | cut -d':' -f2"

Mas eu não gosto disso. Existe uma maneira mais limpa de fazer isso?

    
por Federico Ponzi 24.01.2016 / 16:00

1 resposta

1

Se tiver certeza de que wlan0 é a interface, você pode retornar as informações apenas para essa interface com:

ifconfig wlan0

Agora que você tem apenas uma linha com Bcast: (eliminando tail ), é possível usar sed para combinar as funções grep e cut :

ifconfig wlan0 | sed -n 's/^.*Bcast:\(.*\) .*$//p'

Nesse caso, sed -n elimina a impressão rotineira de linhas da entrada, e a string de pesquisa corresponde à linha inteira, enquanto marca o que fica entre Bcast: e o próximo espaço: a substituição é somente esse campo marcado e /p substitui o -n e força a impressão. Note que para atribuir esta string a um alias você precisará usar aspas duplas e escapar de alguns dos caracteres com barras invertidas, ou usar aspas simples, substituindo aquelas no comando acima por '\'' (embora você possa omitir o resultado final '' ).

Por fim, se você quiser ter certeza de que wlan0 é a interface que deseja e se não há outros configurados para acesso à Internet, você pode descobrir qual interface está sendo usada (talvez seja necessário instalar networkctl ):

networkctl status | sed -n 's/^.*Gateway: .* on \(.*$\)//p'

Isso usa sed na saída networkctl semelhante a antes. Agora você pode combiná-los:

ifconfig $(networkctl status |\
  sed -n 's/^.*Gateway: .* on \(.*$\)//p')|sed -n 's/^.*Bcast:\(.*\) .*$//p'

Isso não é nada legal, mas cobre a maioria das bases - em particular, se o seu wireless não estiver funcionando e você usar Ethernet, ele ainda funcionará. Se você tiver as duas interfaces trabalhando juntas, isso se tornará mais complicado ainda: deixarei que você trabalhe nisso (dica: você precisará usar /Gateway/,$ como o intervalo de linhas para o comando s e uma maneira de excluir as entradas do IPv6).

    
por 24.01.2016 / 18:32