[ 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.