游戏搭服自动化脚本shell
#!/bin/bash
#10.117.1.199 120.26.198.243 ;g=6006c= 10.168.187.39: 10.168.187.39: 10.168.187.39: 178pop_s10 rm-bp1gy2r82o607w4v8.mysql.rds.aliyuncs.com
# basedir=/data/jzadmin
scripts=$basedir/scripts
rootgamedir=$basedir/game
sourcegame=${PWD}/game
sourcecross=${PWD}/game/Source_cross
sourceworld=${PWD}/game/Source_world
gamelist=${PWD}/create_game_list.txt
tmpdir=${PWD}/tmp
ansiblehost=/etc/ansible/hosts
checklist=$scripts/bak/beifen.txt
checklist2=$scripts/bak/Cross.txt
[ -d $tmpdir ] || mkdir -p $tmp &> /dev/null createmenu(){
echo -e "\033[32;1m<<=====SUBMENU=====>>\033[35;0m
\[;1m1\[;0m) CreateGame
\[;1m2\[;0m) CreateCross
\[;1m3\[;0m) CreateWorld
\[;1m4\[;0m) EXIT"
} login(){
exec_cmd=$
expect << EOF
set timeout -
log_user
spawn $exec_cmd
sleep
expect "*(yes/no)?" {
send "yes\r"
exp_continue
} "password:" {
send "JGyou(20170206)$\r"
}
expect "*total size*"
expect eof
EOF
} login2()
{
_host_ip="$1"
_host_cmd="$2"
tag=$
expect << EOF
set timeout -
log_user $tag
spawn ssh root@$_host_ip "$_host_cmd"
expect "*(yes/no)?" {
send "yes\r"
exp_continue
} "password:" {
send "JGyou(20170206)$\r"
}
expect eof
EOF
} select a in "CreateGame" "CreateCross" "CreateWorld" "EXIT"
do
echo "select create:"
case $a in
CreateGame)
for uid in `awk '{print $7}' $gamelist`
do
platform=`echo $uid|cut -d_ -f1`
daqushu=`echo $uid|cut -d_ -f2 |cut -d"s" -f2`
gamedirSource=${platform}cq_lycqly_source
dbip=`awk '/\<'''$uid'''\>/{print $8}' $gamelist`
array=($(awk '/\<'''$uid'''\>/{print}' $gamelist))
cwlan_ip=`awk '/\<'''$uid'''\>/{print $1}' $gamelist`
cwwan_ip=`awk '/\<'''$uid'''\>/{print $2}' $gamelist`
gport=`awk '/\<'''$uid'''\>/{print $3}' $gamelist|cut -d"=" -f2|cut -b -`
cport=`awk '/\<'''$uid'''\>/{print $3}' $gamelist|cut -d";" -f1`
for i in {..}
do
daqushuN=$(($daqushu+i-))
gamedir=${platform}cq_lycqly_s${daqushuN}
sid=${platform}_s${daqushuN}
dbname=${platform}cq_s$daqushu
lanip=`echo ${array[i]}|cut -d: -f1`
gameip=`awk '/\<'''$lanip'''\>/{print $1}' ${ansiblehost}`
waiip=`ansible $gameip -m command -a 'ip addr'|grep eth1| sed -n "2,1p" | awk '{print $2}' | cut -d"/" -f1`
port=`echo ${array[i]}|cut -d: -f2`
echo -e ">>> $gamedir creating..\c"
[ $? -ne ] && echo "copy center_db.cfg to source game failed and exit." && exit
exec_cmd="rsync -aP --delete --exclude=lord.cfg $sourcegame/$platform/$gamedirSource/ root@$lanip:$rootgamedir/$gamedir"
login "$exec_cmd"
cp -af $sourcegame/$platform/$gamedirSource/lord.cfg $tmpdir/lord_${gamedir}.cfg
sed -i "/\[lord\]/,/\[Paysys\]/ s/Port=[0-9]\{4\}/Port=$port/" $tmpdir/lord_${gamedir}.cfg
sed -i "s/PID_SID=\(.*\)/PID_SID=$sid/" $tmpdir/lord_${gamedir}.cfg
sed -i "/\[DBSecure\]/,/\[SCC\]/ s/HostName=rm-.*com$/HostName=$dbip/" $tmpdir/lord_${gamedir}.cfg
sed -i "/\[DBSecure\]/,/\[SCC\]/ s/DBName=\(.*\)/DBName=$dbname/" $tmpdir/lord_${gamedir}.cfg
sed -i "/\[WorldServer\]/,/\[CrossServer\]/ s/HostName=[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/HostName=$cwlan_ip/" \
$tmpdir/lord_${gamedir}.cfg
sed -i "/\[WorldServer\]/,/\[CrossServer\]/ s/Port=[0-9]\{4\}/Port=$gport/" $tmpdir/lord_${gamedir}.cfg
sed -i "/\[CrossServer\]/,+3 s/InternetIp=[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/InternetIp=$cwwan_ip/" $tmpdir/lord_${gamedir}.cfg
sed -i "/\[CrossServer\]/,+3 s/Port=[0-9]\{4\}/Port=$cport/" $tmpdir/lord_${gamedir}.cfg
exec_cmd="rsync -aP --delete $tmpdir/lord_${gamedir}.cfg root@$lanip:$rootgamedir/$gamedir/lord.cfg"
login "$exec_cmd"
[ $? -eq ] && echo -e "\r>>> $gamedir created \e[01;32m [ ok ]\e[0m" || exit
echo "$lanip $waiip $port $gamedir lord_${platform}_s$daqushuN ${platform}_s$daqushuN $dbname $dbip" >> ${PWD}/gamecontral.txt
# gamecontral=($lanip $waiip $port $gamedir lord_${platform}_s$daqushuN ${platform}_s$daqushuN $dbname $dbip)
# echo ${gamecontral[*]} >> ${PWD}/gamecontral.txt
done
done
createmenu
;;
CreateCross)
for uid in `awk '{print $7}' $gamelist`
do
platform=`echo $uid|cut -d_ -f1`
daqushu=`echo $uid|cut -d_ -f2 |cut -d"s" -f2`
crossdir=${platform}cq_croserver_s$daqushu
crossdirSource=${platform}cq_croserver_source
dbip=`awk '/\<'''$uid'''\>/{print $8}' $gamelist`
cwlan_ip=`awk '/\<'''$uid'''\>/{print $1}' $gamelist`
cwwan_ip=`awk '/\<'''$uid'''\>/{print $2}' $gamelist`
gport=`awk '/\<'''$uid'''\>/{print $3}' $gamelist|cut -d"=" -f2|cut -b -`
cport=`awk '/\<'''$uid'''\>/{print $3}' $gamelist|cut -d";" -f1`
c2port=`awk '/\<'''$uid'''\>/{print $3}' $gamelist|cut -d"=" -f3`
echo -e ">>> Cross $crossdir creating..\c"
exec_cmd="rsync -aP --delete --exclude=lord.cfg $sourcegame/$platform/$crossdirSource/ root@${cwlan_ip}:$rootgamedir/$crossdir"
login "$exec_cmd"
cp -af $sourcegame/$platform/$crossdirSource/lord.cfg $tmpdir/lord_${crossdir}.cfg
sed -i "/\[Paysys\]/,/\[DBSecure\]/ s/PID_SID=\(.*\)/PID_SID=$dbname/" $tmpdir/lord_${crossdir}.cfg
sed -i "/\[lord\]/,/\[Paysys\]/ s/Port=[0-9]\{4\}/Port=$cport/" $tmpdir/lord_${crossdir}.cfg
sed -i "/\[DBSecure\]/,/\[SCC\]/ s/HostName=rm-.*com$/HostName=$dbip/" \
$tmpdir/lord_${crossdir}.cfg
sed -i "/\[DBSecure\]/,/\[SCC\]/ s/DBName=\(.*\)/DBName=$dbname/" $tmpdir/lord_${crossdir}.cfg
#World cross config
sed -i "/\[WorldServer\]/,/\[CrossServer\]/ s/HostName=[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/HostName=$cwlan_ip/"\
$tmpdir/lord_${crossdir}.cfg
sed -i "/\[WorldServer\]/,/\[CrossServer\]/ s/Port=[0-9]\{4\}/Port=$c2port/" $tmpdir/lord_${crossdir}.cfg
sed -i "/\[CrossServer\]/,+3 s/InternetIp=[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/InternetIp=$cwwan_ip/" \
$tmpdir/lord_${crossdir}.cfg
sed -i "/\[CrossServer\]/,+3 s/Port=[0-9]\{4\}/Port=$cport/" $tmpdir/lord_${crossdir}.cfg
exec_cmd="rsync -aP --delete $tmpdir/lord_${crossdir}.cfg root@$cwlan_ip:$rootgamedir/$crossdir/lord.cfg"
login "$exec_cmd"
[ $? -eq ] && echo -e "\r>>> Cross $dbname created \e[01;32m [ ok ]\e[0m" || exit
echo "$cwlan_ip $cwwan_ip $cport $crossdir lord_${platform}cros_s$daqushu ${platform}cros_s$daqushu ${platform}cq_s$daqushu 127.0.0.1" >> ${PWD}/gamecontral.txt
# crosscontral=($cwlan_ip $cwwan_ip $cport $crossdir lord_${platform}cros_s$daqushu ${platform}cros_s$daqushu ${platform}cq_s$daqushu 127.0.0.1)
# echo ${crosscontral[*]} >> ${PWD}/gamecontral.txt
done
createmenu
;;
CreateWorld)
for uid in `awk '{print $7}' $gamelist`
do
platform=`echo $uid|cut -d_ -f1`
daqushu=`echo $uid|cut -d_ -f2 |cut -d"s" -f2`
worlddir=${platform}cq_worldserver_s$daqushu
worlddirSource=${platform}cq_worldserver_source
cwlan_ip=`awk '/\<'''$uid'''\>/{print $1}' $gamelist`
cwwan_ip=`awk '/\<'''$uid'''\>/{print $2}' $gamelist`
gport=`awk '/\<'''$uid'''\>/{print $3}' $gamelist|cut -d"=" -f2|cut -b -`
c2port=`awk '/\<'''$uid'''\>/{print $3}' $gamelist|cut -d"=" -f3`
# port3="g=${gprot}c=${c2port}"
echo -e ">>> World $destdir creating..\c"
exec_cmd="rsync -aP --delete $sourcegame/$platform/$worlddirSource/ root@$cwlan_ip:$rootgamedir/$worlddir"
login "$exec_cmd"
cp -af $sourcegame/$platform/$worlddirSource/Config/WorldServer.Cfg $tmpdir/WorldServer_${worlddir}.cfg
sed -i "s/Ip=[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/Ip=$cwlan_ip/" $tmpdir/WorldServer_${worlddir}.cfg
sed -i "s/LogicServerPort=[0-9]\{4\}/LogicServerPort=$gport/" $tmpdir/WorldServer_${worlddir}.cfg
sed -i "s/CrossServerPort=[0-9]\{4\}/CrossServerPort=$c2port/" $tmpdir/WorldServer_${worlddir}.cfg
exec_cmd="rsync -aP --delete $tmpdir/WorldServer_${worlddir}.cfg root@$cwlan_ip:$rootgamedir/$worlddir/Config/WorldServer.Cfg"
login "$exec_cmd"
[ $? -eq ] && echo -e "\r>>> World $dbname created\e[01;32m [ ok ]\e[0m" || exit
# worldcontral=($cwlan_ip $cwwan_ip g=${gport}c=${c2port} $worlddir lord_${platform}world_s$daqushu ${platform}world_s$daqushu ${platform}cq_s$daqushu 127.0.0.1)
# echo ${worldcontral[*]} >> ${PWD}/gamecontral.txt
echo "$cwlan_ip $cwwan_ip g=${gport}c=${c2port} $worlddir lord_${platform}world_s$daqushu ${platform}world_s$daqushu ${platform}cq_s$daqushu 127.0.0.1" >> ${PWD}/gamecontral.txt done
createmenu
;;
EXIT)
echo "EXIT"
exit
;;
*)
echo "\033[31;1mError\033[31;0m"
createmenu
;;
esac
done
游戏搭服自动化脚本shell的更多相关文章
- 自动化部署--shell脚本--1
传统部署方式1.纯手工scp2.纯手工登录git pull .svn update3.纯手工xftp往上拉4.开发给打一个压缩包,rz上去.解压 传统部署缺点:1.全程运维参与,占用大量时间2.上线速 ...
- Centos环境下部署游戏服务器-自动化
计算机是没有智力的,只会接受指令,运行指令,得出结果.因此就算你让它重复做一件事多少次,它也学不会自动去做这件事.对于重复繁琐的事情,做为一个懒惰的程序员,必须告诉机器去做这件事情,然后就行了,而不是 ...
- appium-desktop录制脚本二次开发,生成我司自动化脚本
目的 通过对appium-desktop脚本录制功能进行二次开发,使录制的java脚本符合我司自动化框架要求. 实现步骤 1.增加元素名称的输入框 由于ATK(我司自动化测试框架)脚本中元素是以“ap ...
- appium1.4+华为8.0执行自动化脚本,报启动session失败,原因是unicode_ime_apk\Uni codeIME-debug.apk在手机上已存在,再次安装失败,导致启动session失败,解决办法:换高版本的appium
最开始做Android自动化测试时,通过执行脚本发现报,已安装UnicodeIME-debug.apk,再次安装失败,当时觉得这个apk对我来说没用,就把D:\Program Files (x86)\ ...
- Linux 服务器系统监控脚本 Shell【转】
转自: Linux 服务器系统监控脚本 Shell - 今日头条(www.toutiao.com)http://www.toutiao.com/i6373134402163048961/ 本程序在Ce ...
- 自动化脚本中click()或sendKeys()没有反应
前提: 排除xpath引用错误或元素的xpath每次都不同的情形. 问题描述 自动化脚本中click()方法和sendKeys()方法报错, 返回异常InvocationTargetException ...
- Jenkins构建自动化脚本执行无界面解决方法
场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...
- 【Zabbix】Zabbix-agent自动化脚本
zabbix-agent自动化脚本 作用:批量部署zabbix-agent.用于上百台虚拟机都可以被Zabbix监控. 脚本名:inst-agent.sh #!/bin/bash echo " ...
- Linux脚本shell字符串处理
Linux脚本shell字符串处理,基本都有了,看着搜吧 TLDP教堂 shell中if条件字符串.数字比对,[[ ]]和[ ]区别 Linux 之 shell 比较运算符 Linux Shell编程 ...
随机推荐
- Java容器解析系列(2) 具体化的第一步——Collection到AbstractCollection
在通向具体化的List,Queue之前,我们需要先了解一下Collection接口和AbstractCollection抽象类,这两个都是处于Collection顶层的存在. Collection接口 ...
- `ifdef、`else、`endif 用法
一般情况下,Verilog HDL源程序中所有的行都参加编译.但是有时候希望对其中的一部份内容只有在条件满足的时候才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足条件 ...
- 史上最简单OpenGL+VS2017环境配置
这里采用 最简单的方法: (1)添加Nuget包管理器(方便我们为项目添加OpenGL的库) (2)新建一个项目 右键我们的项目名 ——> 管理NuGet程序包——>搜索nupengl,然 ...
- node.js安装全攻略
node.js学习也有近一年之久了,自开始以来,能遇到各种问题,就拿安装来说,总能遇到稀奇古怪的问题,但每次谷歌,或者百度,都能找到解决办法,逐渐也就养成了百度或者谷歌的毛病! 正常安装 第一步:下载 ...
- Ubuntu 远程使用ssh 开启服务器终端的方法
首先,加载服务器环境变量$DISPLAY,需要先从服务器获取值 echo $DISPLAY 假如返回值为1001,本地通过sshpass启动终端,假设服务器用户名server,密码passwd, ip ...
- 如何执行Python代码
1.在linux系统中执行代码有两种方法 a.在脚本的当前目录下执行:python test.py b.给脚本赋予可执行权限,然后执行代码 chmod +x test.py test.py 2.在wi ...
- 软件工程 week 05
关于 石墨文档客户端 的案例分析 作业地址:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505 一.调研测评 测试平台:Windows 1 ...
- c——二分查找
思路: 1.输入:数组长度n,待查找的有序数组a[],要找的元素key 2.输出:待查找元素在数组中的位置,若不存在返回-1 3.实现:三个指针,left.mid.right #include< ...
- 常见模块(二) logging模块
logging模块是专门做日志系统的.分为函数版和自定义函数. (一)logging模块初级版 缺点,不能指定字符集,不能把屏幕输出和文件日志同时记录.只能选择其一. 文件记录日志 import lo ...
- 2018.4.28 kvm虚拟机管理
创建虚拟机: virt-install --name wj-v1.4.1.0411 --vcpus=2 --memory=2048 --disk path=/home/wj/os/osgwV1.4.1 ...