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

本文介绍了一种通过编写Shell脚本来实现Subversion (SVN) 客户端的高效更新方法。该脚本能够自动处理版本更新过程中的各种细节问题,如版本号管理、增量更新、文件备份等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前我们更新客户端的方法是,一个脚本,把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


unix 的网络操作系统实训 包含: 一、 实验目的 1. 掌握UNIX系统的目录和文件管理命令。 2. 掌握shell的输入输出重定向操作符。 3. 编shell脚本文件,并调试、执行它。 二、 实验要求 1. 要求每人能独立完成实验。能独立搭建UNIX操作系统,掌握OpenSolaris的安装、运行和使用。 2. 使用自己的账号登录UNIX 系统, 用户名为:学号和姓名汉语拼音全拼。在用户主目录下,新建子目录,子目录名为:专业和班级(可以是拼音)。 3. 在新建的子目录下完成全部练习,所有的操作练习均要截图显示。 4. 所有的实验内容必须在命令行方式下进行操作。 5. 纸制版的封面单面打印,其他页面必须双面打印。全班刻一张光盘。 三、 实验内容 1. 用uname -a命令显示操作系统的版本。 2. 用pwd命令显示用户主目录的路径名。 3. 用date命令查看当前日期和时间。分别比较%a和%w,%D和%d。 4. 用who命令查看当前登录在系统中的用户列表。比较$who –H与$who –s显示的结果区别。用hostid命令和id命令查看主机信息和用户信息。 5. 用vi编辑器,先在子目录中创建名为one的文件,编辑one文件,再把one文件中2-6行的内容到文件two中。给出复制3行和删除10个字符的操作。(说明one文件内容不能以数字和简单的字母组成,必须是一段有内容的英文,至少是10行以上的描述) 6. 用重定向符和cat命令创建一个电话簿telephone文件。假定收集你班上10位同学的姓名、学号、email和电话号码存在这个文件中。使用sort命令对这个文件进行排序,按名、按姓、按email、按电话号码及反序排序等。使用grep命令及其选项在你的电话簿中查找一个名字。 7. 用重定向符和cat命令创建一个ums脚本文件完成如下功能。并运行它。 a. 显示当前日期和时间。 b. 显示当前用户名。 c. 输入若干用户名作为参数,判断用户是:(1)教师或博士后;(2)博士研究生;(3)硕士研究生;(4)本科生。 d. 用户名规则:教师用户名以j开头,博士后用户名以bh开头,博士研究生用户名以yb 开头,硕士研究生用户名以ys开头,本科生用户名以x开头。 8. 编C程序,编译和运行程序。给出年、月、日,计算该日是该年的第几天。 9. 编Java程序,编译和运行程序。将给定的一个字符串中的所有字符逆序输出。 7、8和9题说明:要求有源程序清单和目标文件的截图,还要有运行结果的截屏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值