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