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 |