Prompting for a Yes/No response (BASH)

Short bash function routine to prompt the user to enter Yes or No (which may be abbreviated to Y or N) in response to a prompt.

The function displays the prompt and will continue to prompt the user until they enter a valid response or press ctrl-C to abort the script. (The user can’t just press enter to continue, though it would be trivial to change the function to allow them to do so).

confirm() {
# syntax: confirm [<prompt>]
# Prompts the user to enter Yes or No and returns 0/1.
# This  program  is free software: you can redistribute it and/or modify  it
# under the terms of the GNU General Public License as published by the Free
# Software  Foundation, either version 3 of the License, or (at your option)
# any later version.
# This  program  is  distributed  in the hope that it will  be  useful,  but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public  License
# for more details.
# You  should  have received a copy of the GNU General Public License  along
# with this program. If not, see <>
#  04 Jul 17   0.1   - Initial version - MEJT
  local _prompt _default _response
  if [ "$1" ]then _prompt="$1"else _prompt="Are you sure"fi
  _prompt="$_prompt [y/n] ?"
  # Loop forever until the user enters a valid response (Y/N or Yes/No).
  while true; do
    read -r -p "$_prompt " _response
    case "$_response" in
      [Yy][Ee][Ss]|[Yy]) # Yes or Y (case-insensitive).
        return 0
      [Nn][Oo]|[Nn])  # No or N.
        return 1
      *) # Anything else (including a blank) is invalid.

This entry was posted in Programming and tagged . Bookmark the permalink.

Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.