Você quer dizer algo tão simples assim:
while :; do
ping -c 1 -w 3 8.8.8.8; echo $? > /tmp/ping.status
sleep 1
done
Isso gravará o status de saída de ping
a /tmp/ping.status
uma vez por segundo. Então, em outro script, você poderia ter algo como:
pingFailed=$(cat /tmp/ping.status)
if [ $pingFailed -ne 0 ]; then
echo "No connection"
else
echo "Connected!"
fi
Então, sim, você poderia fazer isso. No entanto, é um método muito ruim de verificar sua conexão. Obviamente, existem condições de corrida aqui. Que a conexão estava ativa quando o primeiro loop foi executado, não significa que ele esteja ativo neste segundo. Mais importante, se você ler o arquivo ping.status
no início do script, isso não significa que a conexão ainda estará lá no final do script. Além disso, você está enviando spam tanto para sua rede quanto para sua CPU com solicitações contínuas. Isso realmente não é muito elegante.
Uma forma mais rápida e simples de testar se sua conexão está ativa (pelo menos no Linux) está olhando para /sys/class/net/$NIC/link_mode
onde $NIC
é o nome da sua placa de rede. Por exemplo, no meu sistema:
## Wireless connection up
$ cat /sys/class/net/wlp3s0/link_mode
1
## Wireless connection down
$ cat /sys/class/net/wlp3s0/link_mode
0
Você pode escrever uma função que verifique isso:
isLinkDown(){
return $(cat /sys/class/net/wlp3s0/link_mode)
}
E você pode usá-lo em seus scripts assim:
if isLinkDown; then
echo Link Down
else
echo Link Up