A única maneira de sair do loop é que $status
seja success
. Isso ocorre porque o resultado da atribuição será verdadeiro na cabeça do loop e o loop será infinito.
Seu loop:
while [ some test ]; echo 'something'; retries=$(( $retries + 1 )); do
loop body
done
Em vez disso, mova a echo
e a atribuição para o loop:
#!/bin/bash
MAX_RETRIES=5
retries=0
status="$1"
while [ "$retries" -le "$MAX_RETRIES" ]; do
echo "$retries"
retries=$(( retries + 1 ))
sleep $(( 1^retries * 1))
if [[ "$status" == "success" ]]; then
echo "success"
break;
elif [[ "$status" == "pending" ]]; then
echo "pending"
else
echo "I am else."
fi
echo "Retries in do $retries"
done
echo "done."
Ou com case .. esac
:
#!/bin/bash
MAX_RETRIES=5
retries=0
status="$1"
while [ "$retries" -le "$MAX_RETRIES" ]; do
echo "$retries"
retries=$(( retries + 1 ))
sleep $(( 1^retries * 1))
case "$status" in
success)
echo "success"
break ;;
pending)
echo "pending" ;;
esac
echo "Retries in do $retries"
done
echo "done."