No script abaixo - que solicita ao usuário que confirme que deseja continuar com a execução de um script potencialmente ruim - quando o usuário digita Y
no prompt - ele será interrompido case
, apenas para ser enviado novamente ao while
loop.
#! /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 fazê-lo para que, quando Y
digitado, o script saia do bloco while case
e do bloco while, mas não saia completamente. Existe algo que eu possa colocar para o espaço reservado ("O que se passa aqui ??") faça isso?
bash
shell-script
the_velour_fog
fonte
fonte
[Yn]*)
; você provavelmente quis dizer[Yy]*)
.$TEST=1
necessárioTEST=1
, e é muito provável que seu script funcione com essa alteração.Respostas:
No caso em que o usuário digitou "y", você pode sair do while e do case:
No seu caso, você quer fazer
break 2
.fonte
break 2
, com relação ao seu comentário acima, sim, tentei definir uma variável, mas não funcionou - acho que o bash tem escopo local nos blocos while e case? ao contrário, por exemplo, PHPcase
que você fez deve ser refletida no teste do loop while.[Yy]
bloco do caso. fiz uma pequena edição dentro da minha pergunta para refletir, mas seu direito funciona - obrigado, eu aprendi algumas coisas legais!break
é suficiente. Não vejo dois níveis de loops no código.@ dhag tem uma ótima resposta. Você também pode usar:
fonte