shell脚本生成xml文件

说来也巧了,作为一个刚刚毕业半年的菜鸟,进入公司后,听公司的大牛推荐学习linux--”鸟哥的私房菜“,基本上是从去年8月份开始到了今年的1月份,基本上是把基础篇看完了,开始了解shell脚本的相关知识。刚好公司有了一个shell脚本的案件给我了,时间上也没有多紧。然后就一边学习一边开始做,虽然中途客户反映先前的业务逻辑有问题耽搁了两周,但总算是到最后完成了,自己学习的东西能用到很开心,今天闲了,把代码整理了一下,分享给大家


  具体是这样:


  要求是写一个shell脚本,安装要求查询数据,将符合条件的数据按照客户给定的xml样式进行组装,然后加入到crontab中,定时执行通过scp或者ftp放到客户服务器上。


  具体实现步骤:


  一、编写生成xml文档的代码


     网上搜索了一篇博客:http://blog.csdn.net/dengzhaoqun/article/details/7262271   拿来学习了一下,感觉好用,自己就根据自己的实际情况修改了一下:


复制代码
 1 #! /bin/bash
 2 # filename: create_xml.sh
 3 # create_wangxb_20150123
 4 #
 5 # 从外部传入的第一个参数作为xml的文件名
 6 outfile=$1
 7 # xml中的缩进位
 8 tabs=0
 9 
10 # ++++++++++++++++++++++++++++
11 # 组装一个节点,输出到文件
12 # 说一说传参数时的这几个区别:假如有下面这个脚本执行的命令
13 # /path/to/scriptname  opt1  opt2  opt3  opt4 
14 # $0: 的值是默认是脚本的名字,从$1-$4 开始就是参数的值
15 # $# :代表后接的参数『个数』
16 # $@ :代表『 "$1" "$2" "$3" "$4" 』之意,每个变量是独立的(用双引号括起来); 
17 # $* :代表『 "$1c$2c$3c$4" 』,其中 c 为分隔字节,默认为空白键, 所以本例中代表『 "$1 $2 $3 $4" 』之意。
18 # 在shell中我们可以也可以使用${}包含变量名,来调用变量
19 # ++++++++++++++++++++++++++++
20 put(){
21     echo '<'${*}'>' >> $outfile
22 }
23 
24 # 这里也是输出一个xml的节点,只是比上面的节点有更多的设置
25 # ${@:2} 的意思:它的值就是由第二个参数开始到最后一个参数,为什么要这样?有时可能你的第二个参数中有空格,shell接受参数是以空格计算的
26 put_tag() {
27     echo '<'$1'>'${@:2}'</'$1'>' >> $outfile
28 }
29 # 同样是一个输出节点函数,但是添加了CDATA,防止特殊字符造成xml解析失败
30 put_tag_cdata() {
31     echo '<'$1'><![CDATA['${@:2}']]></'$1'>' >> $outfile
32 }
33 
34 put_head(){
35     put '?'${1}'?'
36 }
37 # 这是一个缩进的算法,自行理解
38 out_tabs(){
39     tmp=0
40     tabsstr=""
41     while [ $tmp -lt $((tabs)) ]
42     do
43         tabsstr=${tabsstr}'\t'
44         tmp=$((tmp+1))
45     done
46     echo -e -n $tabsstr >> $outfile
47 }
48 
49 tag_start(){
50     out_tabs
51     put $1
52     tabs=$((tabs+1))
53 }
54 
55 tag() {
56     out_tabs
57     if [ "$1" == 0 ]
58     then
59         put_tag $2 $(echo ${@:3})
60     elif [ "$1" == 1 ]
61     then
62         put_tag_cdata $2 $(echo ${@:3})
63     fi
64 }
65 
66 tag_end(){
67     tabs=$((tabs-1))
68     out_tabs
69     put '/'${1}
70 }
复制代码
  这里有一些基础知识: 


  关于参数:


  假如有下面这个脚本执行的命令


     /path/to/scriptname opt1 opt2 opt3 opt4 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值