Read a variable from user input, limited to a set of options.

Example:

  $ ptxd_template_read_options "select your option" TYPE "option A" "option B" 
"option C"
  ptxdist: select option by number:
  ptxdist: [1] option A
  ptxdist: [2] option B
  ptxdist: [3] option C
  ptxdist: select your option................: 2
  $ echo $TYPE
  option B

The user can select 1, 2 or 3. Other input is not accepted.

Signed-off-by: Bastian Krause <[email protected]>
---
Introduced in v3. Used to ask user about HSM type in a later commit.
---
 scripts/lib/ptxd_lib_template.sh | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/scripts/lib/ptxd_lib_template.sh b/scripts/lib/ptxd_lib_template.sh
index f39e6e033..6b405763b 100644
--- a/scripts/lib/ptxd_lib_template.sh
+++ b/scripts/lib/ptxd_lib_template.sh
@@ -30,6 +30,32 @@ ptxd_template_read() {
     export "${2}"
 }
 export -f ptxd_template_read
+#
+# Read a variable from user input, limited to an array of options
+#
+# $1 prompt prefix
+# $2 variable name
+# $3..$n options
+#
+ptxd_template_read_options() {
+       local -a options=("${@:3}")
+       local i=1
+       echo "${PTXDIST_LOG_PROMPT}select option by number:"
+       for option in "${options[@]}"; do
+               echo "${PTXDIST_LOG_PROMPT}[${i}] ${option}"
+               ((i++))
+       done
+       while : ; do
+               ptxd_template_read "${1}" chosen
+               [ -n "${chosen}" ] && [ "${chosen}" -gt 0 ] &&
+               [ "${chosen}" -le "${#options[@]}" ] &&
+               break
+
+               echo "${PTXDIST_LOG_PROMPT}invalid option"
+       done
+       export "${2}=${options[$chosen-1]}"
+}
+export -f ptxd_template_read_options
 
 ptxd_template_read_name() {
     ptxd_template_read "enter package name" package_name
-- 
2.27.0


_______________________________________________
ptxdist mailing list
[email protected]
To unsubscribe, send a mail with subject "unsubscribe" to 
[email protected]

Reply via email to