【shell文件处理技巧】处理xml格式的文件

转自:https://blog.csdn.net/panda_bear/article/details/8058259 

最近在项目中,需要用到shell脚本来解析xml文件。在网上搜了一下,发现有xmlsh等可以用,但是都需要下载安装,使用比较麻烦,后来经过查找在stackoverflow上找到了解决方法,将脚本记录如下。

    项目中的主要需求为: 在xml文件中,需要配置连接的服务器的IP和端口号等信息,供游戏逻辑程序作为服务的客户端进行解析使用。但同时,这些IP和端口号也是在进行服务器部署时需要配置的,因而这份配置在两个地方需要用到。

    一开始考虑到服务器部署脚本中解析文本方便一些,因而同一份配置编写了2份。但后来考虑到后续部署的方便和较少人工配置出错的可能性,因而想到直接在部署脚本中使用xml文件来配置服务器的IP和端口号相关信息。具体脚本如下:

  1. #!/bin/sh
  2. Usage()
  3. {
  4. echo "Usage: ./install_all.sh <ranksvr_config.xml>"
  5. exit 1
  6. }
  7. if [ $# -ne 1 ]
  8. then
  9. Usage
  10. fi
  11. if [ ! -e "$1" ]
  12. then
  13. echo "fail to load data from file, file $1 not exist!"
  14. exit 1
  15. fi
  16. attrget()
  17. {
  18. ATTR_PAIR=${1#*$2=\"}
  19. echo "${ATTR_PAIR%%\"*}"
  20. }
  21. install_all_svrs()
  22. {
  23. if [ $# -ne 1 ]
  24. then
  25. echo "Invalid call of function install_all_svrs, no input file!"
  26. exit 1
  27. fi
  28. local IFS=\>
  29. while read -d \ < ENTITY CONTENT
  30. do
  31. TAG_NAME=${ENTITY%% *}
  32. ATTRIBUTES=${ENTITY#* }
  33. if [[ $TAG_NAME == "group" ]]
  34. then
  35. GROUP=`attrget ${ATTRIBUTES} "id"`
  36. HOST=`attrget ${ATTRIBUTES} "host"`
  37. PORT=`attrget ${ATTRIBUTES} "port"`
  38. HTTPPORT=`attrget ${ATTRIBUTES} "httpport"`
  39. echo "./install.sh $GROUP $HOST $PORT $HTTPPORT"
  40. ./install.sh $GROUP $HOST $PORT $HTTPPORT
  41. fi
  42. done < $1
  43. }
  44. install_all_svrs $1
  45. #while read -d
  46. #do
  47. # var=`echo ${line} | awk '$1 ~/^[0-9]+$/ {print $1}'`
  48. # if [ -z ${var} ]
  49. # then
  50. # continue;
  51. # fi
  52. # ./install.sh $line
  53. #done < $1

    其中,xml文件的解析代码主要在install_all_svrs函数中。具体原理主要还是利用shell的字符串处理技巧,下面主要分析几个主要的技巧:

    ${StrName%%TAG*} 表示截取字符串从左向右的第一个TAG之前的字符串;

    ${StrName#*TAG} 表示截取字符串从左向右的第一个TAG分割的之后的字符串,包含TAG;

    ${StrName%%TAG} 表示截取字符串从左向右的第一个TAG分割之前的字符串,不包含TAG;

针对具体开发中的应用:

https://github.com/feifeiyuan/features/tree/master/shell/shell%E5%A4%84%E7%90%86xml%E6%96%87%E4%BB%B6

猜你喜欢

转载自blog.csdn.net/feifei_csdn/article/details/80858216
今日推荐