shell 脚本 从xml 判断

如下,我又个xml文件,内容如下:[beijing][neme]张三[neme][age]24[age][/beijing][shanghai][neme]李四[neme... 如下,我又个xml文件,内容如下:
[beijing]
[neme]张三[neme]

[age]24[age]

[/beijing]
[shanghai]
[neme]李四[neme]

[age]28[age]

[/shanghai]
......
还有很多
我想判断一下,如果城市为beijing而且name为张三,则要求年龄在20~28之间,这就是正确的,如果有beijing而且name为张三,年龄不再20~28之间,就是有问题的
请教各位,这个应该怎么写呢?
展开
 我来答
浦疏贤085
2013-07-12 · TA获得超过291个赞
知道答主
回答量:149
采纳率:100%
帮助的人:125万
展开全部
#!/bin/sh
city=$1 
name=$2
age1=$3
age2=$4
n1=`grep -n $city a.xml |awk -F: 'NR==2{print $1}'`
n2=`grep -n $city a.xml |awk -F: 'NR==1{print $1}'`
na=$((n1-n2))
cat a.xml | grep -A${na} "\[${city}\]"    >  /tmp/a.log
age=`grep -A1 $name /tmp/a.log | grep -Po "(?<=e\]).*(?=\[a)"`
echo $age
if [[ $age -ge $age1 ]] && [[ $age -le $age2 ]]; then
        echo "OK"
else
        echo "NG"
fi
rm -rf /tmp/a.log

age1 年龄下限

age2 年龄上限

 

正确 OK  有问题 NG

不知道是不是你要的效果,抛砖。

options_mark
2013-07-05 · TA获得超过168个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:133万
展开全部

代码

-bash-4.1$ cat l.sh 
#!/bin/bash
name="$2"
age="$3"
case $1 in 
  beijing)
       if [[ $name == "zhangSan"  && $age -ge 20 && $age -le 28 ]]
       then
          echo " beijing right"
       else
          echo " beijing error"
       fi
       ;;
  shanghai)
       if [[ $name == "zhangSan"  && $age -ge 20 && $age -le 28 ]]
       then
          echo " beijing right"
       else
          echo " beijing error"
       fi
       ;;
  *) 
        echo "no match"
       ;;
esac
-bash-4.1$

执行结果:

sh l.sh beijing zhangSan 19

 beijing error

-bash-4.1$ sh l.sh beijing zhangSan 25

 beijing right

-bash-4.1$

读取xml文件中的值,可采取python 来生成一个文件 ,尔后传递给l.sh脚本文件.

 

可做参考.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式