
Então, estou tentando saber se a máquina tem bateria e, em seguida, executar comandos diferentes dependendo se ela tem ou não. Aqui está o que tenho até agora:
upower -d >> /tmp/batstat
if [ grep -F BAT0 /tmp/batstat ]; then
echo "BAT0 PRESENT" >> /tmp/batstat
else
echo "NO BAT0" >> /tmp/batstat
fi
No entanto, isso retorna o erro "bash: [: muitos argumentos" ao escrever NO BAT0 em /tmp/batstat conforme esperado. Executar apenas o grep funciona corretamente, então não entendo por que não funciona como uma condição if.
Se houver uma maneira melhor de verificar a bateria, estou 100% aberto a ela.
Responder1
if upower -d | grep -qF BAT0 ; then
echo "BAT0 PRESENT"
else
echo "NO BAT0"
fi
if
pegará uma série de comandos e trabalhará no status do último, neste caso o grep. grep
retorna verdadeiro se corresponder e falso caso contrário.
Responder2
grep -F BAT0 /tmp/batstat
não é de forma alguma uma EXPRESSÃO CONDICIONAL (conforme detalhado no manual) para o test
builtin de bash
. Como a saída de grep
não é utilizada, a -q
opção e confiar no código de saída provavelmente é suficiente.
grep -F -q BAT0 batstat
if [[ $? -eq 0 ]]; then
echo yea
else
echo nay
fi
Além disso, /tmp/batstat
é provavelmente uma escolha muito ruim, especialmente quando um usuário local nefasto tem acesso. Considere, em vez disso, usarmktemp(1)
ou não localizar o arquivo em /tmp
.