shell脚本在安装时提示是或否

时间:2017-05-14 22:24:44

标签: linux bash shell prompt

我尝试创建一个shell脚本,提示一组问题并根据答案运行命令。如果在任何时候" "输入然后shell脚本退出。例如:

  1. 您要安装新更新是或否? 如果用户输入yes,则运行以下脚本( ./ install.sh
  2. 目前的日期是什么时候?或者与 rundate.sh 文件匹配的上一个日期。如果用户输入" 201707 "然后运行( ./ rundate201707.sh

  3. 您想要运行补丁吗?是还是不是? 如果用户输入" "然后运行 ./ patch.sh

  4. 非常感谢任何建议。

    编辑:添加代码。我真正的问题是在输入时将日期添加到shell脚本的末尾。

    #!/bin/bash
    
    while true; do
        read -p "do you want to install the new update?[Y/n]: " yn
        case $yn in
            [Yy]* ) ./install.sh; break;;
            [Nn]* ) break;;
            * ) echo "Please answer yes or no.";;
        esac
    done
    while true; do
        echo -n "Enter the date as YYYYMMDD:> " 
          read date
          if [ ${#date} -eq 8 ]; then
    

1 个答案:

答案 0 :(得分:2)

使用利用bashread -sN1-sN1开关的函数,(yn() { echo -n "$1: " while read -sN1 x ; do x=${x,} case $x in [yn]) break ;; *) : ;; esac done echo $x [ $x = y ] ; } yn "Do you want to install the new update? [Y/n]" || exit ./install.sh echo "Pick a rundate file: " select x in ./rundate????????.sh ; do $x ; break ; done yn "Would you like to run the patch? [Y/n]" || exit ./patch.sh 不打印任何内容,只读取1个字符):

$x

注意:

  1. 使用x=${x,}yn转换为小写可以简化测试。
  2. [yYnN]不响应任何 yn,因此无需提示提示。
  3. select返回 true / false 退出代码,简化了测试。
  4. AppController命令返回 rundate 文件名,然后运行它。