Faça sua entrada em um loop. Saia do loop com break
(ou exit
conforme o caso) se você obtiver uma resposta válida do usuário.
while true; do
read -p 'Continue? yes/no: ' input
case $input in
[yY]*)
echo 'Continuing'
break
;;
[nN]*)
echo 'Ok, exiting'
exit 1
;;
*)
echo 'Invalid input' >&2
esac
done
Como uma função de utilidade:
ask_continue () {
while true; do
read -p 'Continue? yes/no: ' input
case $input in
[yY]*)
echo 'Continuing'
break
;;
[nN]*)
echo 'Ok, exiting'
exit 1
;;
*)
echo 'Invalid input' >&2
esac
done
}
Uma variação da função de utilidade que permite sair através de EOF (por exemplo, pressionando Ctrl + D ):
ask_continue () {
while read -p 'Continue? yes/no: ' input; do
case $input in
[yY]*)
echo 'Continuing'
return
;;
[nN]*)
break
;;
*)
echo 'Invalid input' >&2
esac
done
echo 'Ok, exiting'
exit 1
}
Aqui, existem três maneiras de sair do loop:
- O usuário insere "sim" e, nesse caso, a função retorna.
- O usuário insere "não" e, nesse caso, nós
break
saímos do loop e executamosexit 1
. - O
read
falha devido a algo como encontrar um fim de entrada ou algum outro erro, nesse caso oexit 1
é executado.