关于shell脚本函数、数组、字符串截取、svn更新发布实例
#/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更新发布实例的更多相关文章
- Shell脚本8种字符串截取方法总结
Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 代码如下: echo ${va ...
- shell 脚本获取数组字符串长度
#!/bin/sh source /etc/init.d/functions funOne() { array=(I am dfh kjlhfjksdf sdfj jdkfhaskl mjjoldfu ...
- 学习Linux shell脚本中连接字符串的方法
这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...
- shell脚本函数与数组
前言 之前写过一篇关于shell脚本流程控制总结,这次继续写关于shell脚本的问题.本篇文章主要包含shell脚本中的函数以及数组的用法介绍.同时也涵盖了一些字符串处理以及shell脚本比较使用的小 ...
- Shell基础(四):字符串截取及切割、字符串初值的处理、基使用Shell数组、expect预期交互、使用正则表达式
一.字符串截取及切割 目标: 使用Shell完成各种Linux运维任务时,一旦涉及到判断.条件测试等相关操作时,往往需要对相关的命令输出进行过滤,提取出符合要求的字符串. 本案例要求熟悉字符串的常见处 ...
- shell脚本函数及数组
函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...
- PHP 函数(数组字符串)
函数四要素: 参数 变量 返回值 函数体 函数分类: 1.有参数的函数: function Show() { echo "hello"; } Show(); 2. 有返回 ...
- shell脚本--函数
shell的函数和Javacript和php的函数声明一样,只不过shell在调用函数的时候,只需要写函数名就可以调用函数,注意不要在函数名后面加括号 创建并使用函数 #!/bin/bash #文件名 ...
- Thinkphp 模板中直接对数据处理 模板中使用函数 中文字符串截取
1.Thinkphp 模板中直接对数据处理:{$data.name|substr=0,3} 2.中文字符串截取函数:mb_substr=0,14,'utf-8' 3.中文字符串统计:iconv_str ...
随机推荐
- java学习——平台的安装与部署
Java 平台安装与部署 jre,jdk安装与部署 1)jre,jdk安装过程(略) 2)部署过程 新建(JAVA_HOME) 变量名:JAVA_HOME 变量值:E:\Program Files ( ...
- 每天一个JS 小demo之新建文件夹。主要知识点:DOM方法的综合运用
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...
- DllImport 自动选择x64或x86 dll
前言 标题不知道怎么确切地命名,在.net的托管世界里,有时不得不使用c的某个动态库,比如ocr.opencv等,如果幸运,有前人已经包装出.net版本,但有些不非常流行的库,只能自己使用pinvok ...
- 聊聊vue组件开发的“边界把握”和“状态驱动”
vue有着完整的组件化开发机制,但是官网只给了开发的方式,对于开发规范以及组件化开发的最佳实践,还需要我们来摸索.本文就平时开发中的经验来谈谈“把握边界”和“状态驱动”这两个话题. 边界把握 边界把握 ...
- 解决laydate时间日期插件定位溢出
laydate是一款比较好用的网页时间日期插件,不过用起来有一些细节问题需要我们手动去解决!例如:laydate兼容bootstrap 1. 默认情况 laydate弹出层默认对齐input左边框 2 ...
- maven 的docker插件
首先你得配置一个带有认证的docker私有仓库. 本机要安装maven和jdk vi pom.xml <plugin> <groupId>com.spotify</gro ...
- 【踩坑记录】记一次MySQL主从复制延迟的坑
最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误. 情景 一个活动信息需要审批,审批之后才能生效.因为之后活动要编辑,编辑后也可能触发审批,审批中展示的是编辑前的活动内容, ...
- mysql update 批量更新
UPDATE cntheater SET title = (SELECT title FROM cntheater_copy WHERE cntheater.id = cntheater_copy.i ...
- Visual Studio 中指定自定义生成事件
自定义生成事件打开方式 通过指定自定义生成事件,可以在生成开始之前或在它完成之后自动运行命令.在Visual Studio中通过右键项目->属性 进入项目属性菜单. 自定义生成事件的语法 生成事 ...
- jquery按钮倒计时
<html> <head> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"> ...