ifconfig
deixa você com um bloco de texto como este:
eth0 Link encap:Ethernet HWaddr aa:aa:aa:aa:aa:aa
inet addr:192.168.0.4 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::6ef0:49ff:fe54:b80/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:118583044 errors:0 dropped:0 overruns:0 frame:0
TX packets:117593447 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:86729976752 (86.7 GB) TX bytes:96008613785 (96.0 GB)
Os primeiros grep
filtros para linhas que contêm inet addr:
, deixando você com:
inet addr:192.168.0.4 Bcast:192.168.0.255 Mask:255.255.255.0
Os próximos dois comandos grep
filtram novamente, procurando por 192
e 168
. Eu acho que ele está procurando por IPs locais. Aqueles que tendem a se parecer com 192.168.*.*
. Nem todos os IPs locais são assim, mas vou ignorar isso por enquanto.
No caso do nosso exemplo, nada é filtrado.
O corte usa :
como um delimitador (ponto de corte) e assume o segundo valor:
192.168.0.4 Bcast
awk
delimita por espaço por padrão e imprime a primeira coluna, deixando-nos com:
192.168.0.4
É um script que tenta obter o seu IP local. Não é muito bom. Se a sua LAN usa um formato de endereçamento diferente ou se você tem um IP legal (externo) com 192 ou 168 nele ou sua máscara - como 4.4.168.192 - isso incorretamente o pegaria.
Provavelmente existem maneiras melhores de obter seu IP interno do que filtrar ifconfig
output, mas aqui está outro método de filtragem que usa apenas um awk para limpar:
ifconfig | awk -F' |:' '/inet addr:192\.168\./ {print $13}'
Ele funcionará apenas para 192.168. . endereços, mas isso já é melhor que o comando existente.