Cleaned up a minor bug and improved documentation/examples.
1 parent d1526f2 commit 00a35d8ce1ee0af07a27349f7c480d2886c88fc2
@tundra tundra authored on 7 Oct 2010
Showing 1 changed file
View
59
tpromptuser.sh
#!/bin/sh
# 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.103 2010/10/07 18:58:50 tundra Exp $
 
# Loop through a set of questions for the luser to answer, storing
# Loop through a set of questions for the user to answer, storing
# their response back into the prompt variable itself.
#
# This is convenient way to build answers to a set of configuration
# questions at the beginning of a script.
# specification of a default response and a list of legitimate
# single character answers to the prompt. If this list is empty,
# then any response to the prompt is accepted.
 
# $Id: tpromptuser.sh,v 1.102 2010/10/07 18:34:13 tundra Exp $
 
#####
# Constants
#####
 
# Separators
 
ORIGIFS=$IFS # Save current field separator
DL=':' # Prompt field delimeter
DL=';' # Prompt field delimiter
 
# Common Answers
 
YN="Y y N n Yes yes No no YES NO"
 
 
#####
# Prompt Records
#####
 
# Layout Of Fields In Prompt Record:
#
# Prompt<delim>Default Response (If user just hits Enter)<delim>Legal Answers
# Prompt<delim>Default Response (If user just hits Enter)<delim>Legal Answers (space separated)
# Notes:
#
# 1) An empty Prompt field means there will be no prompt displayed
#
# 2) An empty Default Response field means that, if the user hits enter,
# the response is blank
#
# 3) An empty Legal Answers field mean the routine will accept *any* input
#
# 4) It's up to you to make sure the Default Response is a legit answer.
# It is NOT checked against the Legal Answers list.
 
 
# Examples
 
foo="Would you like to foo?${DL}Y${DL}" # Empty last field means accept anything
bar="Would you like to bar?${DL}\!${DL}y Y n N"
baz="Would you like to baz?${DL}n${DL}yes Yes no No"
bat="Would you like to bat?${DL}${DL}yes Yes no No "
bar="Would you like to bar?${DL}\!${DL}${YN}"
baz="Would you like to baz?${DL}n${DL}${YN} yup"
bat="Would you like to bat?${DL}${DL}nope"
 
 
# Display the records for purposes of this example only
 
 
# 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" = _ ]
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 ]
if [ _$a = _"$ANS" ]
then
DONE=True
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\"
 
eval $x=\"$ANS\"
done
 
 
# End Of Prompting Logic