중첩된 Case 문에서 while 루프를 벗어나는 방법은 무엇입니까? [폐쇄]

중첩된 Case 문에서 while 루프를 벗어나는 방법은 무엇입니까? [폐쇄]

아래 스크립트에서 사용자는 잘못되었을 수 있는 스크립트를 계속 실행할 것인지 확인하라는 메시지를 받습니다. 사용자가 메시지에 따라 입력하면 블록 Y에서 벗어나 다시 루프로 다시 전송됩니다.casewhile

#! /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?"

입력 하면 n스크립트가 예상한 대로 정확하게 존재합니다. Y스크립트를 입력할 때 이 두 가지를 깨뜨릴 수 있도록 이 작업을 수행하는 방법을 알고 싶습니다.case 그리고while 블록이지만 완전히 종료되지는 않습니다. 이를 위해 자리 표시자("여기에 뭐가 있지??")를 추가할 수 있나요?

답변1

사용자가 "y"를 입력하면 while 및 Case를 종료할 수 있습니다.

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.

당신이 염려하는 한, 당신은 그것을 하고 싶어합니다 break 2.

답변2

@dhag는 훌륭한 답변을 제공합니다. 다음을 사용할 수도 있습니다.

a=0
while [ "$a" -eq 0 ]; do
     ...
     [Nn]*)
          a=1;
          ;;
      ...
done

관련 정보