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

这个问题在这里已经有了答案:

  • 如何在Linux shell脚本中提示是/否/取消输入? 25个答案

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

    编辑

    我整合了levislevis85的建议(谢谢!)并添加了-n选项来read以接受一个字符,而无需按Enter键。 您可以使用其中的一个或两个。

    而且,否定形式可能如下所示:

    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
    

    但是,正如Erich指出的那样,在某些情况下,例如脚本在错误的shell中运行导致的语法错误,否定形式可能会使脚本继续执行“危险的事情”。 失效模式应有利于最安全的结果,所以只有第一,非否定if应该被使用。


    用例/ esac。

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

    优点:

  • 整洁
  • 可以更容易地使用“OR”条件
  • 可以使用字符范围,例如[yY] [eE] [sS]接受单词“是”,其中任何字符可以是小写或大写。

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

     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/25535.html

    上一篇: How do I prompt a user for confirmation in bash script?

    下一篇: Rename "type" from JSON moxy output