Eu não acho que haja uma maneira ideal de fazer o que você quer. Como Martin diz, você pode verificar se o bit executável está definido, mas isso não confirma que ele será realmente executado.
Uma coisa que você pode fazer é tentar executar o programa e, em vez de procurar por um texto específico do próprio programa, veja a variável $?
. Isto devolve o estado de saída do programa (convencionalmente 0 para OK) ou (num sistema CentoOS que tenho de entregar) 127 para o ficheiro não encontrado, por ex.
find --version
if [[ $? == 127 ]]
then
exit 1
fi
A razão de não existir uma maneira ideal é que um status de saída de 0 para OK seja apenas convencional e os programas retornem um status de saída diferente se forem executados, mas encontrarem um erro. Isso pode funcionar para você até que algo seja executado e retorne um status de saída de 127 para indicar alguma condição de erro.