如何方便的使用shell脚本来解析xml文件

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

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

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

#!/bin/sh

Usage()
{
        echo "Usage: ./install_all.sh <ranksvr_config.xml>"
        exit 1
}

if [ $# -ne 1 ]
then
        Usage
fi

if [ ! -e "$1" ]
then
        echo "fail to load data from file, file $1 not exist!"
        exit 1
fi

attrget()
{
        ATTR_PAIR=${1#*$2=\"}
        echo "${ATTR_PAIR%%\"*}"
}

install_all_svrs()
{
        if [ $# -ne 1 ]
        then
                echo "Invalid call of function install_all_svrs, no input file!"
                exit 1
        fi

        local IFS=\>

        while read -d \< ENTITY CONTENT
        do
                TAG_NAME=${ENTITY%% *}
                ATTRIBUTES=${ENTITY#* }

                if [[ $TAG_NAME == "group" ]]
                then
                        GROUP=`attrget ${ATTRIBUTES} "id"`
                        HOST=`attrget ${ATTRIBUTES} "host"`
                        PORT=`attrget ${ATTRIBUTES} "port"`
                        HTTPPORT=`attrget ${ATTRIBUTES} "httpport"`

                        echo "./install.sh $GROUP $HOST $PORT $HTTPPORT"
                        ./install.sh $GROUP $HOST $PORT $HTTPPORT
                fi
        done < $1
}

install_all_svrs $1

#while read -d
#do
#       var=`echo ${line} | awk '$1 ~/^[0-9]+$/ {print $1}'`
#       if [ -z ${var} ]
#       then
#               continue;
#       fi

#       ./install.sh $line

#done < $1

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

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

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

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


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值