#/bin/bash

#功能:QA服根据模板创建区配置文件并提交到svn上。

SOURCE_PATH=/data/source_code

SVN_PATH=/code/psm   #svn发布目录,要先推送到这个目录,然后更新提交

dir="/data/source_code/configfiles"

default_conf="config.properties"

default_socket_conf="socket.lp"

LOG_FILE='/tmp/log.log'

usage(){

cat <<EOF

echo_error 使用说明:

sh $0 username create_one_zone_config           #根据区参数匹配/data/source_code/configfiles/conf目录下各分区配置信息生成参数指定单个区配置文件

sh $0 username delete_one_zone_config           #根据区参数匹配/data/source_code/configfiles/conf目录下各分区配置信息删除参数指定单个区配置文件

EOF

exit 1

}

if [ $# -eq 0 ] ; then

usage

fi

change_config_file(){

#根据/data/source_code/configfiles/conf目录下各分区配置信息生成区配置文件

ZONE_FILE="$1"

yunyingshang=`echo ${ZONE_FILE}|awk -F'_' '{print $2}'`

source ${dir}/conf/${ZONE_FILE}  #引用模板文件

[ ! -d ${SOURCE_PATH}/zonefile/${yunyingshang}/${ZONE_FILE}/bin/boot ] && mkdir -p ${SOURCE_PATH}/zonefile/${yunyingshang}/${ZONE_FILE}/bin/boot

####生成和修改区配置文件

cp -rf ${dir}/${default_conf} ${SOURCE_PATH}/zonefile/${yunyingshang}/${ZONE_FILE}/bin/

cp -rf ${dir}/${default_socket_conf} ${SOURCE_PATH}/zonefile/${yunyingshang}/${ZONE_FILE}/bin/boot/

sed -i  -e "s#game.serverId=.*#game.serverId=${QA_CONF[0]}#" \

-e "s#game.serverName=.*#game.serverName=${QA_CONF[1]}#" \

-e "s#game.serverIp=.*#game.serverIp=${QA_CONF[2]}#" \

-e "s#game.loginDomain=.*#game.loginDomain=${QA_CONF[3]}#" \

-e "s#redis.host=.*#redis.host=${QA_CONF[6]}#" \

-e "s#mysql.host=.*#mysql.host=${QA_CONF[8]}#" \     ####使用数组功能。

${SOURCE_PATH}/zonefile/${yunyingshang}/${ZONE_FILE}/bin/${default_conf}

sed -i "s#port=.*#port=${QA_CONF[9]}#" ${SOURCE_PATH}/zonefile/${yunyingshang}/${ZONE_FILE}/bin/boot/${default_socket_conf}

echo "one configuration file has been generated"

###从生成目录同步区配置到SVN发布目录。

rsync -avz --exclude=".svn"  ${SOURCE_PATH}/zonefile/${yunyingshang}/* ${SVN_PATH}/zonefile/${yunyingshang}/ >> ${LOG_FILE}

###区文件推到GM目录。

rsync -avz --exclude=".svn"  ${SOURCE_PATH}/zonefile/${yunyingshang}/${ZONE_FILE}/bin/${default_conf}  ${SVN_PATH}/psm_gm/zq/config/subserver/${QA_CONF[0]}.properties >> ${LOG_FILE}

}

change_one_zone_config_file(){

change_config_file "${ZONE_NAME}"

}

delete_one_zone_config_file(){

delete_config_file "${ZONE_NAME}"

}

delete_config_file(){

ZONE_FILE="$1"

yunyingshang=`echo ${ZONE_FILE}|awk -F'_' '{print $2}'`

source ${dir}/conf/${ZONE_FILE}

rm -rf ${dir}/conf/${ZONE_FILE}

rm -rf ${SOURCE_PATH}/zonefile/${yunyingshang}/${ZONE_FILE}

rm -rf ${SVN_PATH}/zonefile/${yunyingshang}/${ZONE_FILE}

rm -rf ${SVN_PATH}/psm_gm/zq/config/subserver/${QA_CONF[0]}.properties

echo "delete_one_zone_config is OK!"

}

update()

{

$SVN update --username ${SVN_NAME}

if [ $? -ne 0 ];then

echo  "svn update failed"

exit 1

fi

VERSION=`$SVN info |awk -F"[ ]+" '/Revision/{print $2}'`

TEMP="`date +%Y%m%d`${VERSION}"

NUM=`echo ${TEMP}+1|bc`

echo -e "####################\nsvn update complete"

}

commit ()

{

#svn commit

echo "cd ${1:-${SVN_PATH}}"

cd ${1:-${SVN_PATH}}

[ ! -d ${LOG_PATH} ] && mkdir -p ${LOG_PATH}

mkdir -p ${LOG_PATH}/${VERSION}

$SVN status |awk '{if($1=="!") print $0}' |cut -b 9- >${LOG_PATH}/${VERSION}/svn_del.log

$SVN status |awk '{if($1=="?") print $0}' |cut -b 9- >${LOG_PATH}/${VERSION}/svn_add.log

$SVN status |awk '{if($1=="M") print $0}' |cut -b 9- >${LOG_PATH}/${VERSION}/svn_change.log

while read line ;do $SVN delete "$line" ;done <${LOG_PATH}/${VERSION}/svn_del.log  && echo "svn delete complete"

while read line ;do $SVN add "$line" ;done <${LOG_PATH}/${VERSION}/svn_add.log   &&  echo "svn add complete"

$SVN commit -m "`date +%Y%m%d%H%M%S`" --username ${SVN_NAME} && echo "svn commit complete"

#删除认证文件

rm -f /root/.subversion/auth/svn.simple/*

}

if [ -n "$2" ];then

SVN_NAME="$1"

case $2 in

create_one_zone_config)

if [ -n "$3" ];then

change_one_zone_config_file

else

echo -e "Please input zone name parameter for change_one_zone_config_file! For example: \c" && echo -e "\033[40;32;1m create_one_zone_config psm_9wee_s0 \c" && echo -e "\033[0m!"

exit 1

fi

update

commit

;;

delete_one_zone_config)

if [ -n "$3" ];then

delete_one_zone_config_file

else

echo -e "Please input zone name parameter for delete_one_zone_config_file! For example: \c" && echo -e "\033[40;32;1m delete_one_zone_config psm_9wee_s0 \c" && echo -e "\033[0m!"

exit 1

fi

update

commit

;;

*)

usage

;;

esac

fi

关于shell脚本函数、数组、字符串截取、svn更新发布实例的更多相关文章

  1. Shell脚本8种字符串截取方法总结

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 代码如下: echo ${va ...

  2. shell 脚本获取数组字符串长度

    #!/bin/sh source /etc/init.d/functions funOne() { array=(I am dfh kjlhfjksdf sdfj jdkfhaskl mjjoldfu ...

  3. 学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  4. shell脚本函数与数组

    前言 之前写过一篇关于shell脚本流程控制总结,这次继续写关于shell脚本的问题.本篇文章主要包含shell脚本中的函数以及数组的用法介绍.同时也涵盖了一些字符串处理以及shell脚本比较使用的小 ...

  5. Shell基础(四):字符串截取及切割、字符串初值的处理、基使用Shell数组、expect预期交互、使用正则表达式

    一.字符串截取及切割 目标: 使用Shell完成各种Linux运维任务时,一旦涉及到判断.条件测试等相关操作时,往往需要对相关的命令输出进行过滤,提取出符合要求的字符串. 本案例要求熟悉字符串的常见处 ...

  6. shell脚本函数及数组

    函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...

  7. PHP 函数(数组字符串)

    函数四要素:  参数  变量   返回值  函数体 函数分类: 1.有参数的函数: function Show() { echo "hello"; } Show(); 2. 有返回 ...

  8. shell脚本--函数

    shell的函数和Javacript和php的函数声明一样,只不过shell在调用函数的时候,只需要写函数名就可以调用函数,注意不要在函数名后面加括号 创建并使用函数 #!/bin/bash #文件名 ...

  9. Thinkphp 模板中直接对数据处理 模板中使用函数 中文字符串截取

    1.Thinkphp 模板中直接对数据处理:{$data.name|substr=0,3} 2.中文字符串截取函数:mb_substr=0,14,'utf-8' 3.中文字符串统计:iconv_str ...

随机推荐

  1. 什么是 html 标签,html 实体

    为什么需要转换 更简了,因为有时候我们需要在浏览器页面中显示 html 标签,然而直接输出<script>alert(1)</script>,在浏览页面时将会被当作 html ...

  2. Python爬虫-爬小说

    用途 用来爬小说网站的小说默认是这本御天邪神,虽然我并没有看小说,但是丝毫不妨碍我用爬虫来爬小说啊. 如果下载不到txt,那不如自己把txt爬下来好了. 功能 将小说取回,去除HTML标签 记录已爬过 ...

  3. Phpcms·二次开发

    PHPCMS V9产品介绍 PHPCMS V9(简称V9)采用PHP5+MYSQL做为技术基础进行开发.V9采用OOP(面向对象)方式进行基础运行框架搭建.模块化开发方式做为功能开发形式.框架易于功能 ...

  4. Spring学习(22)--- AOP之Advice应用(下)

    (六)Advice parameters(advice带参数的情况) 例子: 修改MyAspect(添加around_init方法): package com.aop.schema; import o ...

  5. JavaBean自动生成get和set方法

    用Myeclipse开发java web程序,写javabean的时候,如果字段很多的话,写get和set方法是一件很无语和浪费时间的事情,所以Myeclipse提供了一个自动生成这些方法的功能.   ...

  6. 使用CSS3动画实现绚丽的照片墙效果

    临近毕业了,一大波毕业照又要来袭了!如何使用CSS3属性制作出自己的网页版照片墙呢? 闲话少说,先来看看效果图 效果要求: 1,照片要求有一定的白色边框. 2,照片都要有一定的倾斜角度. 3,鼠标移动 ...

  7. Java基础语法实例(2)——实习第二天

    来到广州实习的第二天,广州好潮湿,这就是我的感觉,手表里面都开始产生了水雾,这就尴尬了...每天不断的雨.好吧,尽管我很喜欢这里的树,但是我以后应该也不会再来广州了,其实也说不准.想起了<谁动了 ...

  8. Python数据类型及其方法详解

    Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...

  9. 微信jssdk分享功能,jssdk成功调用,分享内容自定义失败

    前提:调用微信jssdk分享功能,通过微信开发者工具调试,调用正常,无任何报错信息. 问题:调用成功,且开发者工具正常显示,但是通过真机调试,分享出去后,自定义内容失效,为微信自动获取的默认内容!截止 ...

  10. 增强学习 | AlphaGo背后的秘密

    "敢于尝试,才有突破" 2017年5月27日,当今世界排名第一的中国棋手柯洁与AlphaGo 2.0的三局对战落败.该事件标志着最新的人工智能技术在围棋竞技领域超越了人类智能,借此 ...