outro ... para placas de rede mais antigas, o comando mii-tool é incrível
Como obter o status da rede (on-line / off-line) e atribuí-lo a uma variável no shell script?
Vou recomendar ip
novamente:
status=$(ip -o link show eth0 | awk '{print $9}')
(A nona coluna é o estado da interface)
Se você usa o gerenciador de rede para sua conexão de rede, você poderia consultá-lo via dbus da seguinte forma:
dbus-send --type=method_call --print-reply --system --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" org.freedesktop.NetworkManager.state
(um pouco obsoleto, mas ainda funciona, para interfaces mais novas, você apenas consultaria um endereço diferente)
Se isso retornar um "3", você está "conectado", conforme descrito no link (mas não diz nada sobre conectividade à internet).
Se você realmente quiser saber se tem conectividade com a Internet, basta executar um ping em um servidor remoto como o google.com e ver se funcionou ou não.
Você diz que quer simplesmente o status on-line / off-line de uma interface e não está preocupado com a velocidade ou o tipo de link.
Tente ethtool , como root:
# ethtool eth0 |grep "Link detected"
Link detected: yes
# ethtool eth1 |grep "Link detected"
Link detected: no
ifconfig
também pode mostrar o status on-line / off-line, e esse comando geralmente está disponível para qualquer usuário no sistema.
$ { /sbin/ifconfig eth0 | grep MTU: | grep -w UP >/dev/null 2>&1 ; }; echo $?
0
# This could return some false errors
$ { /sbin/ifconfig eth1 | grep MTU: | grep -w UP >/dev/null 2>&1 ; }; echo $?
1
Tags networking shell-script