歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> 用Shell寫的游戲客戶端更新腳本

用Shell寫的游戲客戶端更新腳本

日期:2017/3/1 10:27:07   编辑:SHELL編程

之前我們更新客戶端的方法是,一個腳本,把svn的客戶端版本檢出來。但是每次都重復檢出。

由於現在客戶端已經有800+M,每次檢出基本都需要等待5分鐘左右。因此應測試要求,寫了個腳本,每次只檢出更新部分。其實只是利用了svn的update命令。

腳本實現功能:

1、如果首次使用該腳本,在制定目錄中創建一個用於保存版本的文件。然後檢出項目。

2、如果不是首次使用,那麼更新步驟1檢出的項目。然後修改步驟1的版本號(遞增),將版本號寫入加載flash的jsp配置中。

其中還涉及一些對額外情況的處理,比如如果檢出的目標位置已經存在同名文件,那麼打包備份這個文件,然後再繼續執行正常操作等細微邏輯。

剛看Shell不久,也只是利用零散時間看的。寫的不好,歡迎提出。

  1. #!/bin/sh
  2. ##########################################
  3. # 客戶端版本更新系統
  4. ##########################################
  5. # CLIENT_INIT_VERSION 客戶端新版本,默認是0
  6. # CLIENT_OLD_VERSION 客戶端舊版本(存放在VERSION_FILE指定的文件中),當沒有時取CLIENT_INIT_VERSION
  7. # CLIENT_NEW_VERSION 客戶端新版本,www.linuxidc.com默認是CLIENT_OLD_VERSION+1
  8. # VERSION_FILE 存放上次版本的文件
  9. CLIENT_INIT_VERSION='0'
  10. CLIENT_OLD_VERSION='0'
  11. CLIENT_NEW_VERSION=''
  12. VERSION_FILE='client_version.txt'
  13. # CLIENT_BASE_PATH 放置前端的目錄
  14. # VERSION_CONFIG_FILE 服務器前端版本配置文件
  15. # SVN_PATH 前端SVN地址
  16. CLIENT_BASE_PATH='/data/ylzj_test/img/'
  17. VERSION_CONFIG_FILE='/data/ylzj_test/sljweb/version.jsp'
  18. SVN_PATH='http://192.168.14.138:8080/svn/slj_release/ylzj'
  19. CLIENT_NEW_PATH=''
  20. CLIENT_OLD_PATH=''
  21. #更新是否成功
  22. IF_SUCC=''
  23. initVersionFileIfNoExist(){
  24. if [ -f $VERSION_FILE ];then
  25. echo '[INFO] Welcome to use Client Update System.'
  26. else
  27. echo '[INFO] Welcome to use Client Update System.'
  28. echo $CLIENT_INIT_VERSION > $VERSION_FILE
  29. if [ -f $VERSION_FILE ];then
  30. echo '[SUCC] CREATE VERSION FILE '$VERSION_FILE
  31. else
  32. echo '[FAIL] CREATE VERSION FILE '$VERSION_FILE
  33. fi
  34. fi
  35. }
  36. initClientNewVersion(){
  37. CLIENT_OLD_VERSION=$(cat $VERSION_FILE)
  38. echo "[INFO] The old client version is : "$CLIENT_OLD_VERSION
  39. CLIENT_NEW_VERSION=$(expr $(cat $VERSION_FILE) + 1)
  40. echo '[INFO] The new client version is : '$CLIENT_NEW_VERSION
  41. CLIENT_NEW_PATH=$CLIENT_BASE_PATH$CLIENT_NEW_VERSION
  42. CLIENT_OLD_PATH=$CLIENT_BASE_PATH$CLIENT_OLD_VERSION
  43. }
  44. checkIfFileExistAndDoSomething(){
  45. tmpvar=$1
  46. subpath=${tmpvar%/*}
  47. existFile=${tmpvar##*/}
  48. TMP_BACKUP_FLASH_TAR=''
  49. if [ -f $1 -o -d $1 ];then
  50. echo '[WARN] Flash dir '$1' has exists, it will be tar and backup.'
  51. TMP_BACKUP_FLASH_TAR=$existFile'.tar'
  52. cd $subpath
  53. echo '[INFO] Archieving '$existFile' to '$TMP_BACKUP_FLASH_TAR
  54. tar -zcvf $TMP_BACKUP_FLASH_TAR $existFile
  55. echo '[INFO] Removing dir '$existFile
  56. rm -rf $existFile
  57. cd -
  58. fi
  59. unset tmpvar
  60. unset subpath
  61. unset existFile
  62. unset TMP_BACKUP_FLASH_TAR
  63. }
  64. prepareClientDir(){
  65. checkIfFileExistAndDoSomething $CLIENT_NEW_PATH
  66. if [ $CLIENT_INIT_VERSION -eq $CLIENT_OLD_VERSION ];then
  67. #第一次使用
  68. #創建目錄
  69. echo '[INFO] First create the flash dir '$CLIENT_NEW_PATH
  70. mkdir -p $CLIENT_NEW_PATH
  71. else
  72. #非第一次使用,修改flash名字
  73. echo '[INFO] Copying '$CLIENT_OLD_PATH' to '$CLIENT_NEW_PATH
  74. mv $CLIENT_OLD_PATH $CLIENT_NEW_PATH
  75. fi
  76. if [ -d $CLIENT_NEW_PATH ];then
  77. IF_SUCC='TRUE'
  78. fi
  79. }
  80. storeThisVersionIfSucc(){
  81. if [ -n $IF_SUCC ]; then
  82. echo $CLIENT_NEW_VERSION > $VERSION_FILE
  83. echo "<%String version = \"$CLIENT_NEW_VERSION\";%>" > $VERSION_CONFIG_FILE
  84. fi
  85. }
  86. createClient(){
  87. echo '[INFO] Checking out flash version...'
  88. svn co $SVN_PATH $CLIENT_NEW_PATH --username=bqli --password=123456
  89. echo '[INFO] Checking out has finished.'
  90. }
  91. updateClient(){
  92. echo '[INFO] Updating flash version...'
  93. svn update $CLIENT_NEW_PATH
  94. echo '[INFO] Updating has finished.'
  95. }
  96. createOrUpdateClient(){
  97. if [ $CLIENT_INIT_VERSION -eq $CLIENT_OLD_VERSION ];then
  98. createClient
  99. else
  100. updateClient
  101. fi
  102. }
  103. echoStartInfo(){
  104. echo '#################################################'
  105. echo '# 歡迎使用客戶端版本更新系統V1.0'
  106. echo '#################################################'
  107. }
  108. echoEndInfo(){
  109. echo '[SUCC] Finished.'
  110. }
  111. clear
  112. echoStartInfo
  113. initVersionFileIfNoExist
  114. initClientNewVersion
  115. prepareClientDir
  116. createOrUpdateClient
  117. storeThisVersionIfSucc
  118. echoEndInfo
Copyright © Linux教程網 All Rights Reserved