Você pode fazer isso de várias formas. Aqui um exemplo:
$ cat /sys/class/net/eth0/operstate
up
Eu preciso verificar com um script se eth0
está configurado. Se assim for, o script não fará nada. Caso contrário, ele iniciará wlan0
. (Eu não quero que eth0
e wlan0
estejam ao mesmo tempo).
Qual seria a maneira mais fácil de verificar se eth0
já está funcionando?
Estou usando o Debian Wheezy
Gostaria de verificar não apenas se o cabo em eth0
está conectado, mas se a interface está configurada (isto é, se ele possui um IP estático ou se recebeu um IP de DHCP). Se o cabo estiver conectado, mas eth0
não estiver configurado corretamente, quero iniciar wlan0
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Então, aqui nós grep
são onipresentes ip
da ferramenta stdout
para uma linha que contém tanto a nossa interface de interesse como a frase "estado UP" (graças a @ Lekensteyn por apontar a necessidade de um pouco mais de especificidade do que apenas UP
). Usamos o argumento a
como forma resumida para address
e isso deve ser suficiente para obter uma listagem de todas as placas de rede configuradas no sistema.
Uma vantagem de usar ip
pode ser que esteja disponível em todos os lugares - é como eu normalmente configuro os dispositivos de rede do meu telefone Android, por exemplo.
Os :colons
são usados para evitar correspondências parciais. Dessa forma, garantimos uma correspondência para eth0
em oposição a um possível someothereth0
ou eth007
.
Obrigado @RaphaelAhrens por me empurrar para a correção e explicar minha solução.
Para lidar com os requisitos atuais, você pode:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*//p}'
O texto acima somente imprimirá um endereço IP do CIDR se o seu destino $if
estiver UP, conectado e tiver um. Para o ipv6, a solução é tão simples quanto apenas pequenas modificações.
Se você não gostar de sed
, poderá obter resultados semelhantes com outro |pipe ... grep
e adicionar um contexto -A
opção para o primeiro grep
- mas gosto de sed
.
ip a show ethX up
Se nada for exibido, sua interface está inativa
Tags networking linux