我尝试创建一个shell脚本,提示一组问题并根据答案运行命令。如果在任何时候" 否"输入然后shell脚本退出。例如:
目前的日期是什么时候?或者与 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
答案 0 :(得分:2)
使用利用bash
版read
-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
注意:
x=${x,}
将yn
转换为小写可以简化测试。[yYnN]
不响应任何但 yn
,因此无需提示提示。select
返回 true / false 退出代码,简化了测试。AppController
命令返回 rundate 文件名,然后运行它。