diff --git a/tpromptuser.sh b/tpromptuser.sh index e60cce8..aebb41a 100755 --- a/tpromptuser.sh +++ b/tpromptuser.sh @@ -2,7 +2,7 @@ # promptuser.sh - User Prompting From Shell With validation # Copyright (c) 2010, TundraWare Inc, Des Plaines, IL USA # All Rights Reserved -# $Id: tpromptuser.sh,v 1.104 2010/10/07 19:12:17 tundra Exp $ +# $Id: tpromptuser.sh,v 1.105 2010/10/07 19:21:14 tundra Exp $ # Loop through a set of questions for the user to answer, storing # their response back into the prompt variable itself. @@ -33,14 +33,90 @@ ORIGIFS=$IFS # Save current field separator DL=';' # Prompt field delimiter +# ---------- Nothing Should Change Below This Line ---------- # + +##### +# PromptUser() - Shell Function To Prompt And Validate User Input +##### + +PromptUser() + +{ + + for x in $PROMPTLIST + do + eval record=\$$x # Get the prompt record + IFS=$DL # Get individual fields + read prompt default answers <<EOF +$record +EOF + + IFS=$ORIGIFS # And restore the original field separator + + # Now read input and check it against list of valid responses + + DONE=False + + while [ _$DONE = _False ] + do + + read -p "${prompt} (Default: ${default}) " ANS + + # We're done if the user took the default OR if the "Legal + # Answers" field is empty (which means we accept anything) + + if [ _"$ANS" = _ ] || [ _"$answers" = _ ] + then + DONE=True + + # Otherwise, make sure answer is legit + + else + for a in $answers # Check against each possible legal answer + do + if [ _$a = _"$ANS" ] + then + DONE=True + fi + done + + if [ _$DONE = _False ] + then + echo "Invalid Response! Must Be One Of $answers" + fi + fi + + done + + # Save the answer back into the original prompt variable, + # substituting the default value if the user entered nothing. + + ANS=${ANS:-$default} + eval $x=\"$ANS\" + + done + +} + +# End Of 'PromptUser()' + + + +# ---------- End Of Code ---------- # + + + + +##### +# Example +##### + # Common Answers YN="Y y N n Yes yes No no YES NO" -##### # Prompt Records -##### # Layout Of Fields In Prompt Record: # @@ -73,69 +149,9 @@ echo "Before: foo->$foo bar->$bar baz->$baz bat->$bat" -# ---------- Nothing Should Change Below This Line ---------- # +# Go get the user input and validate it -##### -# Actual Prompting Logic -##### - - -for x in $PROMPTLIST -do - eval record=\$$x # Get the prompt record - IFS=$DL # Get individual fields - read prompt default answers <<EOF -$record -EOF - - IFS=$ORIGIFS # And restore the original field separator - - # Now read input and check it against list of valid responses - - DONE=False - - while [ _$DONE = _False ] - do - - read -p "${prompt} (Default: ${default}) " ANS - - # We're done if the user took the default OR if the "Legal - # Answers" field is empty (which means we accept anything) - - if [ _"$ANS" = _ ] || [ _"$answers" = _ ] - then - DONE=True - - # Otherwise, make sure answer is legit - - else - for a in $answers # Check against each possible legal answer - do - if [ _$a = _"$ANS" ] - then - DONE=True - fi - done - - if [ _$DONE = _False ] - then - echo "Invalid Response! Must Be One Of $answers" - fi - fi - - done - - # Save the answer back into the original prompt variable, - # substituting the default value if the user entered nothing. - - ANS=${ANS:-$default} - eval $x=\"$ANS\" - -done - - -# End Of Prompting Logic - +PromptUser # Dump results for sake of this example only