Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 执行安装时提示“是”或“否”的Shell脚本_Linux_Bash_Shell_Prompt - Fatal编程技术网

Linux 执行安装时提示“是”或“否”的Shell脚本

Linux 执行安装时提示“是”或“否”的Shell脚本,linux,bash,shell,prompt,Linux,Bash,Shell,Prompt,我正在尝试创建一个shell脚本,它会提示一组问题,并根据答案运行一个命令。如果在任何时候输入“否”,则shell脚本退出。例如: 是否要安装新的更新?是或否? 如果用户输入yes,则运行以下脚本(./install.sh) 现在几号?或与rundate.sh文件匹配的上一个日期。如果用户输入“201707”,则运行(./rundate201707.sh) 是否要运行该修补程序?是还是不是? 如果用户输入“是”,则运行。/patch.sh 如有任何建议,将不胜感激 编辑:添加代码。我真正的问题是

我正在尝试创建一个shell脚本,它会提示一组问题,并根据答案运行一个命令。如果在任何时候输入“否”,则shell脚本退出。例如:

  • 是否要安装新的更新?是或否? 如果用户输入yes,则运行以下脚本(./install.sh)
  • 现在几号?或与rundate.sh文件匹配的上一个日期。如果用户输入“201707”,则运行(./rundate201707.sh)

  • 是否要运行该修补程序?是还是不是? 如果用户输入“是”,则运行。/patch.sh

  • 如有任何建议,将不胜感激

    编辑:添加代码。我真正的问题是在输入时将日期添加到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
    

    使用利用
    read
    版本的
    -sN1
    开关的
    bash
    函数,(
    -sN1
    不打印任何内容,只读取1个字符):

    注:

  • 使用
    x=${x,}
    $x
    转换为小写,简化了测试
  • yn
    只响应
    [yYnN]
    ,因此不需要提醒提示
  • yn
    返回一个正确/错误的退出代码,简化了测试
  • select
    命令返回rundate文件名,然后运行它

  • 使用利用
    read
    版本的
    -sN1
    开关的
    bash
    函数,(
    -sN1
    不打印任何内容,只读取1个字符):

    注:

  • 使用
    x=${x,}
    $x
    转换为小写,简化了测试
  • yn
    只响应
    [yYnN]
    ,因此不需要提醒提示
  • yn
    返回一个正确/错误的退出代码,简化了测试
  • select
    命令返回rundate文件名,然后运行它

  • 从谷歌开始:。因此,正如@mklement0所说,当您有特定问题的特定代码时,效果最好。谢谢@John1024和mklement0我添加了代码。我以前应该提到这一点。我真正的问题是在第二次提示时,用户被要求输入日期和输入的内容。get附加到“run date”脚本末尾,并使用google:。因此,正如@mklement0所说,当您有特定问题的特定代码时,效果最好。谢谢@John1024和mklement0我添加了代码。我以前应该提到这一点。我真正的问题是在第二次提示时,用户被要求输入日期,输入的内容会附加到“运行日期”脚本末尾。谢谢@agc!我希望为该日期提升用户的唯一原因是,他们可以选择要添加到脚本名称的上一个日期。它并不总是会成为潮流date@connollyc4,重新“选择上一个日期”:假设没有太多这样的文件,一个
    select
    语句应该可以工作。请参阅答案中的新代码。谢谢@agc!我希望为该日期提升用户的唯一原因是,他们可以选择要添加到脚本名称的上一个日期。它并不总是会成为潮流date@connollyc4,重新“选择上一个日期”:假设没有太多这样的文件,一个
    select
    语句应该可以工作。请参阅答案中的新代码。
    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