#!/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的更多相关文章

  1. 自动化部署--shell脚本--1

    传统部署方式1.纯手工scp2.纯手工登录git pull .svn update3.纯手工xftp往上拉4.开发给打一个压缩包,rz上去.解压 传统部署缺点:1.全程运维参与,占用大量时间2.上线速 ...

  2. Centos环境下部署游戏服务器-自动化

    计算机是没有智力的,只会接受指令,运行指令,得出结果.因此就算你让它重复做一件事多少次,它也学不会自动去做这件事.对于重复繁琐的事情,做为一个懒惰的程序员,必须告诉机器去做这件事情,然后就行了,而不是 ...

  3. appium-desktop录制脚本二次开发,生成我司自动化脚本

    目的 通过对appium-desktop脚本录制功能进行二次开发,使录制的java脚本符合我司自动化框架要求. 实现步骤 1.增加元素名称的输入框 由于ATK(我司自动化测试框架)脚本中元素是以“ap ...

  4. appium1.4+华为8.0执行自动化脚本,报启动session失败,原因是unicode_ime_apk\Uni codeIME-debug.apk在手机上已存在,再次安装失败,导致启动session失败,解决办法:换高版本的appium

    最开始做Android自动化测试时,通过执行脚本发现报,已安装UnicodeIME-debug.apk,再次安装失败,当时觉得这个apk对我来说没用,就把D:\Program Files (x86)\ ...

  5. Linux 服务器系统监控脚本 Shell【转】

    转自: Linux 服务器系统监控脚本 Shell - 今日头条(www.toutiao.com)http://www.toutiao.com/i6373134402163048961/ 本程序在Ce ...

  6. 自动化脚本中click()或sendKeys()没有反应

    前提: 排除xpath引用错误或元素的xpath每次都不同的情形. 问题描述 自动化脚本中click()方法和sendKeys()方法报错, 返回异常InvocationTargetException ...

  7. Jenkins构建自动化脚本执行无界面解决方法

    场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...

  8. 【Zabbix】Zabbix-agent自动化脚本

    zabbix-agent自动化脚本 作用:批量部署zabbix-agent.用于上百台虚拟机都可以被Zabbix监控. 脚本名:inst-agent.sh #!/bin/bash echo " ...

  9. Linux脚本shell字符串处理

    Linux脚本shell字符串处理,基本都有了,看着搜吧 TLDP教堂 shell中if条件字符串.数字比对,[[ ]]和[ ]区别 Linux 之 shell 比较运算符 Linux Shell编程 ...

随机推荐

  1. wire [7:0] regAddr; 理解

    首先要指出的是wire[7,0]a和wire[8,1]a这样的表达在verilog中是错误的,应该写成wire[7:0]a和wire[8:1]a wire[7:0]a表示定义了一个wire型数据,该数 ...

  2. Msfvenom学习总结

    1.    –p (- -payload-options) 添加载荷payload. 载荷这个东西比较多,这个软件就是根据对应的载荷payload生成对应平台下的后门,所以只有选对payload,再填 ...

  3. 20165326 java实验五

    实验五 网络编程与安全 一.实验内容 任务一: 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 这个代码在 ...

  4. 计时 timeit

    python中的计时器:timeit timeit 通常在一段程序的前后都用上time.time(),然后进行相减就可以得到一段程序的运行时间,不过python提供了更强大的计时库:timeit #导 ...

  5. cin与cout格式化输出

    cin 中“<<”流 输入运算符 ----------------------------------------------------------------------------- ...

  6. laravel 解决session保存不了,取不出的问题

    555  上传服务器的时候 storage下的framework 没有上传啊

  7. 【oracle入门】数据完整性约束

    数据的完整性约束是对数据描述的某种约束条件,关系型数据模型中可以有三类完整性约束:实体完整性.参照完整性和用户定义的完整性. 实体完整性Entity Integrity 一个基本关系通过对应显示世界的 ...

  8. ecmall 学习记录3

    1.在ecmall.php 中 336行有一个函数 function lang_file($file) { return ROOT_PATH . '/languages/' . LANG . '/' ...

  9. 01_Mybaits逆向工程maven版

    1.创建generatorSqlmapCustom工程 2.修改pom文件 <?xml version="1.0" encoding="UTF-8"?&g ...

  10. C程序第三次作业

    6-1 输出月份英文名 PTA提交列表: 1.设计思路 (1)主要描述题目算法 第一步:将十二个月的名称分别赋值给一维数组指针,定义用于返回的数据类型. 第二步:遍历数组,满足若n在1-12范围则将m ...