工作所用的模块回滚脚本

简介:

俗话说的好:“真男人从来不回滚”,但是家中常备一个回滚脚本也是很有必要的,我所在公司的服务器模块名都是在初始化的时候写进/etc/role_install这个文件里,如下图的这个服务器就是fss服务器:

wKioL1lcicDTHuIEAAAc35tj_Kw536.png


再比如下面这个服务器,虽然包含nginx的组件但是httpproxy的服务器:

wKiom1lcijzy4_9MAAAloN3Ijck735.png


那么有了这样的前提,整个回滚的脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
#Written by ChrisChan @July-4th-2017
#Desription:这是一个回滚的脚本。
 
module=$( cat  /etc/role_install  | grep  - v  zkclient| grep  - v  nginx)
echo  -e  '\033[31m现在将执行回滚操作,本次回滚只回滚普通模块,不包含nginx和zkclient!\033[0m' 
echo  "回滚的模块名称:" $module
echo  -e  '\033[33m如果想取消回滚操作,请ctrl+c立即停止本脚本...\033[0m'
sleep  5
 
cd  /dxpbackup/hswx/ $module && zip $module.zip -x  "*og*"  -r .     #到备份的文件夹里去压缩
mv  /dxpbackup/hswx/ $module/$module.zip  /mnt/hswx    
echo  $module ".zip文件已经生成!"
 
until  "$decision"  ==  "Y"  -o  "$decision"  ==  "y"  -o  "$decision"  ==  "N"  -o  "$decision"  ==  "n"  ]
do
         read  -p  "请问是否用回滚的压缩包覆盖到/mnt/hswx下?(y/n)"  decision
         echo  "您的选择是:" $decision
         if  [ $decision == Y -o $decision == y ]
                 then
                         echo  "现在已经开始覆盖..."
                         rm  -rf  /mnt/hswx/ $module     #先把原来的内容删除
                         unzip  /mnt/hswx/ $module.zip -d  /mnt/hswx/ $module     #重新解压缩进去
                         echo  -e  '\033[32m覆盖已经完成,可以直接执行/startall脚本!\033[0m'
         elif  [ $decision == N -o $decision == n ]
                 then
                         echo  -e  '\033[32m生成的' $module '.zip文件保存在/root文件夹里\033[0m'
         else
                 echo  -e  '\033[31m输入字符不符合!请重新输入!\033[0m'
         fi
done


新的知识点!

1)zip在压缩文件夹的时候要过滤掉某些文件使用“-x”参数,比如说要在AAA文件夹里面过滤掉abc和jqk这两个文件,那么语句就是#zip AAA.zip -x "abc" -x "jqk" -r . 或者是 #zip -r -x=abc -x=jqk AAA.zip . 这样两个语句。


如果你要过滤掉的是一个文件夹,比如那么就要在文件夹后面名字加上一个*,下图就是要压缩整个auc文件夹为456.zip但是又不想要lib这个文件夹,就使用了#zip 456.zip -x "lib*" -r .

wKiom1lck3ny7e5DAAFedrqgs0I255.png

不过如果文件夹里还有其他lib开头的文件夹也会被过滤掉,这一点要注意。


2)本shell里面涉及了逻辑判断,而[[ 和 [ 的区别如下图:

wKiom1lcmF3hhIlVAAAqj1jTU9U969.gif


3)如果if语句中出现报错“[: too many arguments”,很有可能就是字符串变量中可能存在空格,shell解析时将其认为是多个参数,再进行判断时,无法知道该获取哪个值,所以最好都用双引号括起来; 


4)如果是“变量a等于aa且变量b等于bb  或者 变量c等于cc且变量d等于dd ” 这样的判断句怎么写?答曰:

[ $a = "aa" -a $b = "bb" ] || [$c = "cc" -a $d = "dd" ]


参考资料:https://zhangge.net/4776.html



最后的最后,如果您觉得本文对您升职加薪迎娶白富美有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多优秀的博文!

wKioL1l16m3BMYDKAACPHEqd55Q687.jpg


 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1944756



相关文章
|
4月前
【浅谈软件执行日志】
【浅谈软件执行日志】
24 0
|
11月前
|
BI
|
安全 API Android开发
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
402 0
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
|
SQL 机器学习/深度学习 关系型数据库
Shell变量的作用、类型,及如何利用脚本配合任务计划远程备份mysql数据库
Shell变量的作用、类型,及如何利用脚本配合任务计划远程备份mysql数据库
124 0
Shell变量的作用、类型,及如何利用脚本配合任务计划远程备份mysql数据库
|
前端开发
前端工作小结12-工具里面代码提交
前端工作小结12-工具里面代码提交
56 0
前端工作小结12-工具里面代码提交
|
JSON JavaScript 前端开发
前端工作小结18-报错简单记录
前端工作小结18-报错简单记录
89 0
|
前端开发 测试技术
|
安全 小程序 数据可视化
要不要方便前先了解下公厕环境?
现在厕所都长这样了?会自洁,会说话,还会赚钱?!看视频里的小姐姐一顿神操作!
192 0
要不要方便前先了解下公厕环境?