for i in 1 2 3 4 5; do command && break || sleep 15; done
Substitua "comando" pelo seu comando. Isso está assumindo que "código de status = FAIL" significa qualquer código de retorno diferente de zero.
Variações:
Usando a sintaxe {..}
. Funciona na maioria dos shells, mas não no BusyBox sh
:
for i in {1..5}; do command && break || sleep 15; done
Usando seq
e passando o código de saída do comando com falha:
for i in $(seq 1 5); do command && s=0 && break || s=$? && sleep 15; done; (exit $s)
O mesmo que acima, mas pulando sleep 15
após a falha final. Como é melhor definir apenas o número máximo de loops uma vez, isso é obtido dormindo no início do loop se i > 1
:
for i in $(seq 1 5); do [ $i -gt 1 ] && sleep 15; command && s=0 && break || s=$?; done; (exit $s)