Skip to content

Instantly share code, notes, and snippets.

@Vdragon
Created November 26, 2017 09:52
Show Gist options
  • Save Vdragon/a0df511641087bc88c98985c44976349 to your computer and use it in GitHub Desktop.
Save Vdragon/a0df511641087bc88c98985c44976349 to your computer and use it in GitHub Desktop.
prompt_yes_or_no.function.bash
# Prompt for Yy/Nn, if not the expected answer ask again
# Parameter: A string of prompt; Default answer(Y/N)
# return 0 for yes and 1 for no
prompt_yes_or_no(){
if [ ${#} -ne 2 ]; then
printf --\
'Fatal: %s: Function paramater quantity mismatch! Please report bug\n'\
"${FUNCNAME[0]}"\
1>&2
exit 1
fi
local -r prompt="${1}"; shift
local -r default_answer="${1}"
local -i default_answer_exit_status
# Validate input
case "${default_answer}" in
Y|y)
default_answer_exit_status=0
;;
N|n)
default_answer_exit_status=1
;;
*)
printf --\
'Fatal: %s: Wrong default_answer parameter format\n'\
"${FUNCNAME[0]}"\
1>&2
exit 1
;;
esac
# Do the job here
printf --\
"%s"\
"${prompt}"
while read -r answer; do
case ${#answer} in
0) # default
return ${default_answer_exit_status}
;;
1)
case "${answer}" in
n|N)
return 1
;;
y|Y)
return 0
;;
*)
printf --\
"%s"\
"${prompt}"
;;
esac
;;
*)
printf --\
'Error: %s: Unexpected case occurred, please report bug.\n'\
"${FUNCNAME[0]}"\
1>&2
exit 1
;;
esac
done
}; declare -rf prompt_yes_or_no
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment