Aqui está uma variante ainda mais simples da sugestão de @ terdon:
while ! command_to_run; do
echo "failed, retrying"
sleep 1
done
while recebe um comando, portanto, pode testar o sucesso / falha de command_to_run diretamente, em vez de ter que lidar com $? . Normalmente, while executa o loop desde que o comando seja bem-sucedido; neste caso, eu uso ! para negar isso e executar o loop enquanto o comando falhar (ou seja, até que seja bem-sucedido).