if upower -d | grep -qF BAT0 ; then
echo "BAT0 PRESENT"
else
echo "NO BAT0"
fi
if
terá uma série de comandos e funcionará no status do final, neste caso o grep. grep
retornará verdadeiro se corresponder e falso caso contrário.
Estou tentando dizer se a máquina tem uma bateria e, em seguida, executar comandos diferentes com base no fato de ela funcionar ou não. Aqui está o que eu 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: [: too many arguments" ao gravar NO BAT0 em / tmp / batstat conforme o esperado. Rodando apenas o grep funciona corretamente, então eu não entendo porque ele não funciona como uma condição if.
Se houver uma maneira melhor de verificar se há uma bateria, estou 100% aberto para ela.
if upower -d | grep -qF BAT0 ; then
echo "BAT0 PRESENT"
else
echo "NO BAT0"
fi
if
terá uma série de comandos e funcionará no status do final, neste caso o grep. grep
retornará verdadeiro se corresponder e falso caso contrário.
grep -F BAT0 /tmp/batstat
não é de forma alguma uma EXPRESSÃO CONDICIONAL (conforme detalhado no manual de instruções) para o test
incorporado em bash
. Como a saída de grep
não é usada, a opção -q
e a confiança no código de saída provavelmente são suficientes.
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, usar mktemp(1)
ou não localizar o arquivo em /tmp
.