Uma alternativa que pode ser mais limpa é ter answer
retornar 0 ou retornar 1, dependendo se o usuário disse yes
ou no
. Em seguida, teste o valor de answer
no lugar em que você o chama e só execute a ação se answer
retornar 0.
Com base no seu script anterior, seria algo parecido com isto:
while tomcat_running && user_wants_to_stop_tomcat; do
echo "$tomcat_status_stopping"
kill $RUN
sleep 2
done
function tomcat_running() {
check_tomcat_status
[ -n "$RUN" ]
}
function user_wants_to_stop_tomcat() {
answer "WARNING: Tomcat still running. Kill it? "
}
function answer() {
while true; do
printf "$1"
read response
case $response in
[yY][eE][sS]|[yY])
return 0
;;
[nN][oO]|[nN])
return 1
;;
*)
printf "Please, enter Y(yes) or N(no)!\n"
;;
esac
done
}