[
e test
são sinônimos (exceto [
requer ]
), portanto, você não deseja usar [ test
:
[ -x /bin/cat ] && echo 'cat is executable'
test -x /bin/cat && echo 'cat is executable'
test
retorna um status de saída zero se a condição for verdadeira, caso contrário, diferente de zero. Isso pode ser substituído por qualquer programa para verificar seu status de saída, onde 0 indica sucesso e diferente de zero indica falha:
# echoes "command succeeded" because echo rarely fails
if /bin/echo hi; then echo 'command succeeded'; else echo 'command failed'; fi
# echoes "command failed" because rmdir requires an argument
if /bin/rmdir; then echo 'command succeeded'; else echo 'command failed'; fi
No entanto, todos os exemplos acima apenas testam o status de saída do programa e ignoram a saída do programa.
Para find
, você precisará testar se alguma saída foi gerada. -n
testa uma string não vazia:
if [[ -n $(find /var/log/crashes -name "app-*.log" -mmin -5) ]]
then
service myapp restart
fi
Uma lista completa de argumentos de teste está disponível chamando help test
na linha de comando bash
.
Se você estiver usando bash
(e não sh
), poderá usar [[ condition ]]
, que se comporta de maneira mais previsível quando há espaços ou outros casos especiais em sua condição. Caso contrário, geralmente é o mesmo que usar [ condition ]
. Eu usei [[ condition ]]
neste exemplo, como faço sempre que possível.
Eu também alterei 'command'
para $(command)
, que também geralmente se comporta de forma semelhante, mas é melhor com comandos aninhados.