Você parece querer consultar os arquivos carrier
em /sys/class/net/*/
para ver se há pelo menos um que indique se você está online ou não (ignorando */lo/carrier
).
Com um loop de shell:
#!/bin/sh
online=0
for carrier in /sys/class/net/*/carrier; do
case "$carrier" in
*/lo/carrier) continue ;;
esac
if read online <"$carrier" && [ "$online" -eq 1 ]; then
break
fi
done
if [ "$online" -ne 1 ]; then
echo 'not online' >&2
exit 1
fi
Usando bash
:
#!/bin/bash
shopt -s extglob
online=0
for carrier in /sys/class/net/!(lo)/carrier; do
if read online <"$carrier" && [ "$online" -eq 1 ]; then
break
fi
done
if [ "$online" -ne 1 ]; then
echo 'not online' >&2
exit 1
fi
Ou, como um bash
"quase um-liner"
#!/bin/bash
shopt -s extglob
grep -qx 1 /sys/class/net/!(lo)/carrier || ! echo not online >&2
Este último pressupõe que os arquivos contêm um único digito 1
se essa operadora estiver on-line e que não há dados, ou pelo menos não 1
, se não estiver.
Os loops acima (usando read
) lerão a primeira linha somente de cada arquivo carrier
até que 1
seja encontrado.
O problema em seu código é a substituição de comando $(/sys/class/net/*)
, que tentará executar o primeiro nome de arquivo correspondente como um comando com os outros nomes de arquivos correspondentes como argumentos.
Além disso, o teste [ $OnLine ]
seria "verdadeiro" sempre que $OnLine
não estiver vazio. Não tenho certeza do que os arquivos que você analisou contêm se a operadora não estiver on-line, mas até mesmo um zero seria considerado "verdadeiro" aqui.