用Shell写的游戏客户端更新脚本

之前我们更新客户端的方法是,一个脚本,把svn的客户端版本检出来。但是每次都重复检出。

由于现在客户端已经有800+M,每次检出基本都需要等待5分钟左右。因此应测试要求,写了个脚本,每次只检出更新部分。其实只是利用了svn的update命令。

脚本实现功能:

1、如果首次使用该脚本,在制定目录中创建一个用于保存版本的文件。然后检出项目。

2、如果不是首次使用,那么更新步骤1检出的项目。然后修改步骤1的版本号(递增),将版本号写入加载flash的jsp配置中。

其中还涉及一些对额外情况的处理,比如如果检出的目标位置已经存在同名文件,那么打包备份这个文件,然后再继续执行正常操作等细微逻辑。

刚看Shell不久,也只是利用零散时间看的。写的不好,欢迎提出。

#!/bin/sh      ##########################################   # 客户端版本更新系统   ##########################################         # CLIENT_INIT_VERSION 客户端新版本,默认是0   # CLIENT_OLD_VERSION  客户端旧版本(存放在VERSION_FILE指定的文件中),当没有时取CLIENT_INIT_VERSION   # CLIENT_NEW_VERSION  客户端新版本,默认是CLIENT_OLD_VERSION+1   # VERSION_FILE        存放上次版本的文件   CLIENT_INIT_VERSION='0'   CLIENT_OLD_VERSION='0'   CLIENT_NEW_VERSION=''   VERSION_FILE='client_version.txt'      # CLIENT_BASE_PATH    放置前端的目录   # VERSION_CONFIG_FILE 服务器前端版本配置文件   # SVN_PATH            前端SVN地址   CLIENT_BASE_PATH='/data/ylzj_test/img/'   VERSION_CONFIG_FILE='/data/ylzj_test/sljweb/version.jsp'   SVN_PATH='http://192.168.14.138:8080/svn/slj_release/ylzj'      CLIENT_NEW_PATH=''   CLIENT_OLD_PATH=''      #更新是否成功   IF_SUCC=''      initVersionFileIfNoExist(){       if [ -f $VERSION_FILE ];then           echo '[INFO] Welcome to use Client Update System.'       else           echo '[INFO] Welcome to use Client Update System.'           echo $CLIENT_INIT_VERSION > $VERSION_FILE           if [ -f $VERSION_FILE ];then               echo '[SUCC] CREATE VERSION FILE '$VERSION_FILE           else               echo '[FAIL] CREATE VERSION FILE '$VERSION_FILE           fi       fi   }      initClientNewVersion(){       CLIENT_OLD_VERSION=$(cat $VERSION_FILE)       echo "[INFO] The old client version is : "$CLIENT_OLD_VERSION       CLIENT_NEW_VERSION=$(expr $(cat $VERSION_FILE) + 1)       echo '[INFO] The new client version is : '$CLIENT_NEW_VERSION       CLIENT_NEW_PATH=$CLIENT_BASE_PATH$CLIENT_NEW_VERSION       CLIENT_OLD_PATH=$CLIENT_BASE_PATH$CLIENT_OLD_VERSION   }      checkIfFileExistAndDoSomething(){           tmpvar=$1           subpath=${tmpvar%/*}           existFile=${tmpvar##*/}           TMP_BACKUP_FLASH_TAR=''                   if [ -f $1 -o -d $1 ];then                           echo '[WARN] Flash dir '$1' has exists, it will be tar and backup.'                           TMP_BACKUP_FLASH_TAR=$existFile'.tar'               cd $subpath                           echo '[INFO] Archieving '$existFile' to '$TMP_BACKUP_FLASH_TAR                           tar -zcvf $TMP_BACKUP_FLASH_TAR $existFile                           echo '[INFO] Removing dir '$existFile                           rm -rf $existFile               cd -                   fi           unset tmpvar           unset subpath           unset existFile                   unset TMP_BACKUP_FLASH_TAR   }      prepareClientDir(){       checkIfFileExistAndDoSomething $CLIENT_NEW_PATH       if [ $CLIENT_INIT_VERSION -eq $CLIENT_OLD_VERSION ];then           #第一次使用           #创建目录           echo '[INFO] First create the flash dir '$CLIENT_NEW_PATH           mkdir -p $CLIENT_NEW_PATH       else           #非第一次使用,修改flash名字           echo '[INFO] Copying '$CLIENT_OLD_PATH' to '$CLIENT_NEW_PATH           mv $CLIENT_OLD_PATH $CLIENT_NEW_PATH       fi       if [ -d $CLIENT_NEW_PATH ];then           IF_SUCC='TRUE'       fi   }      storeThisVersionIfSucc(){       if [ -n $IF_SUCC ]; then           echo $CLIENT_NEW_VERSION > $VERSION_FILE           echo "<%String version = \"$CLIENT_NEW_VERSION\";%>" > $VERSION_CONFIG_FILE       fi   }      createClient(){       echo '[INFO] Checking out flash version...'       svn co $SVN_PATH $CLIENT_NEW_PATH --username=bqli --password=123456       echo '[INFO] Checking out has finished.'   }      updateClient(){       echo '[INFO] Updating flash version...'       svn update $CLIENT_NEW_PATH       echo '[INFO] Updating has finished.'   }      createOrUpdateClient(){       if [ $CLIENT_INIT_VERSION -eq $CLIENT_OLD_VERSION ];then           createClient       else           updateClient       fi   }      echoStartInfo(){       echo '#################################################'       echo '# 欢迎使用客户端版本更新系统V1.0'       echo '#################################################'   }      echoEndInfo(){       echo '[SUCC] Finished.'   }      clear   echoStartInfo   initVersionFileIfNoExist   initClientNewVersion   prepareClientDir   createOrUpdateClient   storeThisVersionIfSucc   echoEndInfo  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wywgxs.html