工作所用的模块回滚脚本

前言与脚本内容

部署中常备一个回滚脚本也是很有必要的,我所在公司的服务器模块名都是在初始化的时候写进/etc/role_install这个文件里,如下图的这个服务器就是fss服务器:
akb48

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

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

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 .`:
akb48

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

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

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

-------------This article is over!Thanks for reading!-------------
感谢您请我喝咖啡!(o´ω`o)
0%