Como posso sair de um loop while, de dentro de uma instrução case aninhada? [fechadas]

12

No script abaixo - que solicita ao usuário que confirme se deseja prosseguir com a execução de um script potencialmente ruim - quando o usuário insere Y no prompt - ele sairá do bloco case , apenas para ser enviado de volta para o loop while novamente.

#! /bin/bash
set -e

echo
echo "bad install start"
echo "-----------------------------------------"

while true; do
        read -p "this script will probably fail - do you want to run anyway?" yn
        case $yn in
                [Yy]*)
                        ##### WHAT GOES HERE?? #####
                        ;;
                [Nn]*)
                        exit ;;
                *)
                        echo "answer y or n" ;;
        esac

        echo "script has broken out of case back into while loop"
done

echo -e "\e[33m Installing bad packagename \e[0m"
apt-get install sdfsdfdfsd

echo "rest of script - will i keep running?"

Quando n é inserido, o script existe inteiramente como desejado. Gostaria de saber como fazer com que, quando Y for inserido, o script rompa o case e o bloco while, mas não saia totalmente. Existe algo que eu possa colocar no espaço reservado ("O que vai aqui ??") para fazer isso?

    
por the_velour_fog 04.05.2015 / 21:50

2 respostas

17

No caso em que o usuário digitou "y", você pode sair enquanto e caso:

break [n]
       Exit from within a for, while, until, or select loop.  If  n  is
       specified, break n levels.  n must be ≥ 1.  If n is greater than
       the number of enclosing loops, all enclosing loops  are  exited.
       The  return  value is 0 unless n is not greater than or equal to
       1.

No seu caso, você quer fazer break 2 .

    
por 04.05.2015 / 21:54
1

@dhag tem uma ótima resposta. Você também pode usar:

a=0
while [ "$a" -eq 0 ]; do
     ...
     [Nn]*)
          a=1;
          ;;
      ...
done
    
por 04.05.2015 / 21:58