[ … != " " ]
compara o lado esquerdo com uma string contendo um único espaço. [ … != "" ]
compara o lado esquerdo com uma string vazia. A programação da shell tem esquisitices e armadilhas, mas esse caso em particular é direto.
'ping google.com -c 4 | grep time'
é uma cadeia literal de 32 caracteres. Você supostamente pretendia usar a saída do comando, ou seja, um comando susbtitution . Você pode usar backquotes para isso (em vez das aspas que você usou), ou parêntese do dólar, que é mais legível e menos propenso a erros em alguns casos complexos. De qualquer forma, você precisa de aspas duplas em torno da coisa toda, caso contrário, o resultado da substituição do comando seria divididos em palavras e mais maldade .
if [ "$(ping google.com -c 4 | grep time)" != "" ]; then …
Tudo isso é uma maneira bastante rotatória e frágil de testar a conectividade. Use o status de retorno de ping
. Provavelmente, um único pacote é suficiente e você deve especificar um tempo limite bem pequeno caso a rede esteja inativa. O ping google.com
testa se a conectividade IP e o DNS estão funcionando. Você pode executar o ping de 8.8.8.8
para testar se a conectividade IPv4 está funcionando (8.8.8.8 é um servidor executado pelo Google).
if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then
echo "The network is up"
else
echo "The network is down"
fi
Veja também Shell Scripting: Maneira correta de verificar a conectividade com a Internet?