交互式脚本
前言:
最近写了个服务部署脚本,为了简化操作,我把脚本的执行命令全部封装到脚本中,这样在部署的时候,小伙伴只需要通过输入不同的选择,就可以完成部署,这样也避免操作失误,对环境产生影响;
准备
首先我们来看一下,写一个交互式脚本需要了解shell哪些知识?
-变量;
-参数传递;
-流程控制;
-函数;
-输入输出;
-文件读取;
-结束指令;
简单的交互
choose_environment() {
# 重新选择
reselect=${1}
if [ $reselect == 0 ];then
echo '请选择要操作的环境: '
elif [ $$reselect == 1 ];then
echo '请重新选择要操作的环境: '
fi
echo '1.开发环境'
echo '2.测试环境'
echo 'q.结束'
# 获取用户的输入
read -p '请输入序号, 选择环境: ' -n 1 environmentnum
echo '\n'
# 这里注意,判断空必须加双引号,双引号识别为没有内容;主要处理没有输入指令直接回车
if [ -z "$environmentnum" ];then
choose_environment 0
elif [ $environmentnum == 1 ];then
echo '进入开发环境操作'
elif [ $environmentnum == 2 ];then
echo '进入测试环境操作'
elif [ $environmentnum == 'q' ];then
echo '欢迎再次使用'
# 结束脚本执行
exit 1
else
echo '不支持的序号'
echo $environmentnum
choose_environment 1
fi
}
choose_environment 0
上面部分代码写了注释:
我们对上面用到的指令进行一一解释它的作用:
: 是接受传递进来的第一个参数的变量;通过 ${数字} 的语法去接受参数;
, elif, else, fi: 是流程控制指令;
- [ $reselect == 0 ] 是用来做判断;在脚本中使用变量,要使用 $ 变量名的方式;
- 判断语句必须和中括号之间存在一个空格;
- == 是做值判断;
- 分号是判断语句结束标志;
- [ -z “$environmentnum” ] 这里的 -z 是判断变量值是否为空;
- then 后面跟进入判断语句的执行内容;
- fi 是流程控制语句的结束标志,在一个流程控制中必须存在,和 if 成对出现;
一般是做内容输出到命令行;
4.(read -p '请输入序号, 选择环境: ’ -n 1 environmentnum):
- read 是用来读取用户在命令行的输入;
- -p 后面跟的是提示文案;
- -n 后面跟的是限定输入字符个数;
- environmentnum 是用来接受用户在命令行输入的内容
5.choose_environment
- choose_environment(): 是定义的函数
- choose_environment 0: 是调用函数代码,其中 0 是第一个传递参数的值;