ubuntuusers.de

Usereinagbe y oder n ansonsten nochmal

Status: Gelöst | Ubuntu-Version: Server 16.10 (Yakkety Yak)
Antworten |

Nur-Ein-Blogger

Anmeldungsdatum:
4. April 2011

Beiträge: 146

Hey, ich muss euch mal was fragen.

Ich habe einen Konfigurationshelfer geschrieben. Eig. immer das gleiche. Allerdings habe ich ein Problem, der Benutzer soll nur y or n eingeben können. Macht er das nicht, soll die Abfrage nochmal kommen. Im Moment habe ich erst mal alles ähnlich wie den unten stehenden Code gemacht. Also, wenn y dann das. Wenn n dann das.

Nun könnte ich ja auch if y do elif n do else exit machen. Ich will aber nicht,dass das script beendet. In einer case loop wäre das ja das gleiche. Nun überlege ich, wie ich das am besten umsetzen kann.

Meine Überlegung wäre nen switch (FRAGE_EINS=1, wenn alles richtig - die loop solange, wie $FRAGE_EINS=0 ist) und eine while drum zu setzen. allerdings habe ich 20 solcher fragen die jeweils eigene while Schleifen benutzen. Das heißt, dass ich die verschachteln müsste aber in einigen tests konnte ich nicht mehr raus aus der schleife.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ----------------------------------------------------------------
	read -p "Do you want to Use SSL? Please type y or n:" USE_VALID_SSL
		if [ "$USE_VALID_SSL" = "y" ]; then
			USE_VALID_SSL="1"
			echo "${finished} You use SSL"

				# --------------------------------
					while true
					do
						read -p "Enter your valid E-Mail address: " SSLMAIL
						if [[ "$SSLMAIL" =~ $CHECK_E_MAIL ]];then
							echo "${finished} Your E-Mail address is $SSLMAIL"
							break
						else
							echo "${error} Should we again practice how an e-mail address looks?"
						fi
					done
		fi

		if [ "$USE_VALID_SSL" = "n" ]; then
			USE_VALID_SSL="0"
			echo "${finished} You dont use SSL"
		fi
	# ----------------------------------------------------------------

Hat jemand von euch eine bessere Idee?

Edit: Hab ne Lösung, muss nur alles neu schreiben :S ^^

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
prompt_confirm() {
  while true; do
    read -r -n 1 -p "${1:-Continue?} [y/n]: " REPLY
    case $REPLY in
      [yY]) echo ; return 0 ;;
      [nN]) echo ; return 1 ;;
      *) printf " \033[31m %s \n\033[0m" "invalid input"
    esac
  done
}

# example usage
if prompt_confirm "Are you an expert?"; then
IAMEXPERT="1"
echo $IAMEXPERT
else
IAMEXPERT="0"
echo $IAMEXPERT
fi
Antworten |