Shell用户提示(Y / n)

我只是想为我的NAS复制一些文件来做一些小小的工作,所以我在Shell脚本方面并不是很有经验。 我知道Linux上的许多命令行工具在Yes / No输入中使用以下命令行工具

Are you yure [Y/n]

大写字母表示标准操作,该操作也将通过按Enter键开始。 这对于快速使用来说很不错。

我也想实现这样的事情,但是我在缓存Enter键时遇到了一些麻烦。 这是我到目前为止:

read -p "Are you sure? [Y/n] " response

    case $response in [yY][eE][sS]|[yY]|[jJ]|[#insert ENTER codition here#]) 

        echo
        echo files will be moved
        echo
        ;;
    *)
        echo
        echo canceld
        echo
        ;;
esac

我可以添加任何我想要的东西,但它不适用于Enter。


这是一个快速解决方案:

read -p "Are you sure? [Y/n] " response

case $response in [yY][eE][sS]|[yY]|[jJ]|'') 

    echo
    echo files will be moved
    echo
    ;;
    *)
    echo
    echo canceled
    echo
    ;;
esac

如果你使用的是bash 4,你可以用默认的答案“响应预先”响应,这样你就不必显式地对待ENTER 。 (您也可以规范的情况下, response简化case声明。

read -p "Are you sure? [Y/n] " -ei "y" response
response=${response,,}  # convert to lowercase
case $response in
    y|ye|yes)
      echo
      echo files will be moved
      echo
    ;;
    *)
      echo
      echo cancelled
      echo
      ;;

你应该使用read -n1

read -n1 -p "Are you sure? [Y/n] " response

case "$response" in 
   [yY]) echo "files will be moved";;
   ?) echo "canceled";;
esac

根据help read

  -n nchars return after reading NCHARS characters rather than waiting
        for a newline, but honor a delimiter if fewer than NCHARS
        characters are read before the delimiter
链接地址: http://www.djcxy.com/p/25549.html

上一篇: Shell user prompt (Y/n)

下一篇: bash select menu get index