Encontrei o que acredito ser a melhor abordagem, com base em comentário de napcae : use uma função.
assert_service_stopped () {
for i in {1..30}; do
if verification_command then
echo "It's gone"
return 0
fi
sleep 2
done
echo "It hangs dude!"
return 1
}
pkill -f "stuff"
if ! assert_service_stopped; then
echo "failed to terminate"
# send mail
fi
Isto tem a vantagem de permitir muitas afirmações facilmente, e quando não é necessária nenhuma ação (como enviar o email) as asserções podem ser executadas por último e o status de saída do script refletirá o resultado das asserções.