Como posso exibir o endereço IP mostrado no eth0 usando um script?
24
salve isso em um arquivo e execute bash <filename>
#!/bin/bash
ifconfig eth0 | grep "inet addr"
sendo mais preciso obter apenas o número que mostra o endereço IP:
#!/bin/bash
ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1
Atualização : se isso não funcionar, tente a outra resposta
grep "inet"
Para fornecer outra opção, você pode usar o
ip addr
comando dessa maneira para obter o endereço IP:ip addr show eth0
mostra informações sobreeth0
grep "inet\b"
mostra apenas a linha que possui o endereço IPv4 (se você quiser o endereço IPv6, altere-o para"inet6\b"
)awk '{print $2}'
imprime no segundo campo, que possui o endereço ip / máscara, exemplo172.20.20.15/25
cut -d/ -f1
leva apenas a parte do endereço IP.Em um script:
fonte
Retirado de /programming//a/14910952/1695680
No entanto, isso pode retornar um endereço IP local (127.0.0.1), portanto, você pode precisar usar e filtrar:
Nas páginas de manual do nome do host:
fonte
ip addr show label 'enp*'
melhor, mas eu é parse irritante, algo comoip addr show label 'enp*' | grep -oP inet\ \\S+ | cut -d' ' -f2
o trabalho pode ... o quão bonitaA resposta de @ markus-lindberg é a minha favorita. Se você adicionar
-o -4
aos sinalizadores do ip, obterá uma saída muito mais facilmente analisável (e consistente):-o
significa--oneline
, que se destina a ajudar exatamente nesse tipo de situação. O-4
é adicionado ao limite para o endereço IPv4, que é o que todas as outras respostas implicam.fonte
ip
bandeiras. Usando umcut
pouco deawk
bruxaria avançada :ip -o -4 addr show eth0 scope global | awk '{print $4;}' | cut -d/ -f 1
cut
muito depois de aprenderawk
e gosto de minimizar o número de comandos em meus pipelines. Sugestão agradável em qualquer caso.Aqui estão alguns oneliners .....
Awk
A função split no comando awk acima divide a segunda coluna com base no delimitador
:
e armazena o valor dividido em uma matriz associativaa
. Então,a[2]
mantém o valor da segunda parte.sed
No sed básico,
\(...\)
chamado grupo de captura que é usado para capturar os caracteres. Poderíamos referenciar os caracteres capturados por meio de referência posterior.\([^[:space:]]\+\)
captura qualquer personagem, mas não espaço, uma ou mais vezes.grep
\K
descarta os caracteres correspondidos anteriormente da impressão na final e\S+
corresponde a um ou mais caracteres não espaciais.Perl
Um ou mais caracteres não espaciais próximos à
inet addr:
sequência são capturados e, finalmente, imprimimos apenas esses caracteres capturados.fonte
Aqui está uma boa, apenas usa grep como comando secundário:
endereço IP show eth0 | grep -oP 'inet \ K \ S [0-9.] +'
Não vejo por que você deveria usar mais comandos do que o necessário
fonte
Você deve usar
ip
(em vez deifconfig
) como é atual, mantida e talvez o mais importante para fins de script, produz uma saída consistente e analisável. A seguir, algumas abordagens semelhantes:Se você deseja o endereço IPv4 para sua interface Ethernet
eth0
:Como um script:
A saída produzida acima está na notação CIDR. Se a notação CIDR não for desejada, ela poderá ser removida:
Outra opção que o IMHO é "mais elegante" obtém o endereço IPv4 para qualquer interface usada para conectar-se ao host remoto especificado (8.8.8.8 neste caso). Cortesia de @gatoatigrado nesta resposta :
Como um script:
Isso funciona perfeitamente bem em um host com uma única interface, mas mais vantajosamente também funcionará em hosts com várias interfaces e / ou especificações de rota.
Embora
ip
seja minha abordagem preferida, certamente não é a única maneira de esfolar esse gato. Aqui está outra abordagem usadahostname
se você preferir algo mais fácil / mais conciso:Ou, se você deseja o endereço IPv6:
Como um script:
fonte
Sugiro o uso de uma biblioteca python, como netifaces, projetada especificamente para esse fim.
Para obter a interface de rede padrão que está em uso.
fonte
Este uso apenas
ip addr
é um substitutoifconfig
eawk
combinado com a substituição (gsub).Pare de usar muitos processos para tarefas simples
fonte
Apenas mais uma opção que pode ser útil se você não tiver o awk (como é o caso em alguns dispositivos incorporados):
fonte
ifconfig eth0|grep 'inet '|awk '{print $2}'
fonte
aqui está o IPv4 :
ip -f inet a|grep -oP "(?<=inet ).+(?=\/)"
aqui está para IPv4 e dev particular (eth0):
ip -f inet a show eth0|grep -oP "(?<=inet ).+(?=\/)"
para IPv6 :
ip -6 -o a|grep -oP "(?<=inet6 ).+(?=\/)"
fonte
isso também pode ser usado com um usuário normal.
fonte
ip addr show | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6
cut
duas vezes em vez de uma combinação deawk
ecut
para analisar a saída. Da próxima vez, verifique melhor todas as outras respostas primeiro e garanta que não publique uma solução duplicada. Nesse caso, acho que é discutível se é uma duplicata ou se é semelhante; portanto, tome isso como uma dica geral. Obrigado.Esta é a maneira mais curta que pude encontrar:
ip -f inet addr show $1 | grep -Po 'inet \K[\d.]+'
Substituir
$1
pela sua interface de rede.ip -f inet
diz ao ip para retornar apenas valores para a família inet (ipv4).grep -Po
diz ao grep para interoperar o próximo valor como um perl-regex e imprima apenas os valores correspondentes.O regex
\K[\d.]+
diz "jogue fora tudo até esse ponto (\ K) e combine o máximo de valores numéricos seguidos por um ponto em uma linha possível". Portanto, isso corresponderá apenas ao endereço IP e ignorará tudo depois dele, incluindo a máscara de sub-rede de atalho \ XX.fonte
hoje em dia com múltiplas interfaces (por exemplo, se você usa uma janela de encaixe) e a interface de nomenclatura da ETH não é mais as normas
Eu uso este comando para extrair o IP / Mask:
Portanto, quaisquer que sejam as interfaces que eu tenha e o nome delas, o GREP será o primeiro a ter a opção MULTICAST.
Eu uso este comando para extrair apenas o IP sem a máscara:
Eu uso esses comandos em diferentes BDS & NIX e nunca falha;)
fonte
ip
, use a-o
opçãoNo meu script, estou usando algo assim:
Não gera nenhum processo.
fonte
Ainda de outra maneira (supondo que você não queira um
CIDR
endereço e queiraIPv4
):ip
comando que não édeprecated
fonte