How do I prompt a user for confirmation in bash script?

This question already has an answer here:

  • How do I prompt for Yes/No/Cancel input in a Linux shell script? 25 answers

  • read -p "Are you sure? " -n 1 -r
    echo    # (optional) move to a new line
    if [[ $REPLY =~ ^[Yy]$ ]]
    then
        # do dangerous stuff
    fi
    

    Edit :

    I incorporated levislevis85 's suggestion (thanks!) and added the -n option to read to accept one character without the need to press Enter. You can use one or both of these.

    Also, the negated form might look like this:

    read -p "Are you sure? " -n 1 -r
    echo    # (optional) move to a new line
    if [[ ! $REPLY =~ ^[Yy]$ ]]
    then
        [[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell
    fi
    

    However, as pointed out by Erich, under some circumstances such as a syntax error caused by the script being run in the wrong shell, the negated form could allow the script to continue to the "dangerous stuff". The failure mode should favor the safest outcome so only the first, non-negated if should be used.


    use case/esac.

    read -p "Continue (y/n)?" choice
    case "$choice" in 
      y|Y ) echo "yes";;
      n|N ) echo "no";;
      * ) echo "invalid";;
    esac
    

    advantage:

  • neater
  • can use "OR" condition easier
  • can use character range, eg [yY][eE][sS] to accept word "yes", where any of its characters may be in lowercase or in uppercase.

  • 这样你可以得到'是''是'或'输入'

     read -r -p "Are you sure? [Y/n]" response
     response=${response,,} # tolower
     if [[ $response =~ ^(yes|y| ) ]] || [[ -z $response ]]; then
        your-action-here
     fi
    
    链接地址: http://www.djcxy.com/p/25536.html

    上一篇: 如何使用SqlPlus查询的输出提示用户输入更多信息

    下一篇: 如何在bash脚本中提示用户进行确认?