求助!unix shell脚本,检查xml配置文件完整性,急急急!感谢各位老师帮忙







我想用unix shell (ksh)写一个xml配置文件完整新检查脚本,主要原因:当一个xml配置文件内容过多的时候,很容易在修改过程中因为手误,增加或者误删了一个尖括号<, >," 等其他的符号,导致整个配置文件在运行过程中是非法的。
目的:在需要时候,可以用例如:check.sh gateway02.xml 检查一个文件的语句合法性。
或者在文件很多的时候,使用check.sh /config/xml/ 来检查/config/xml/下面众多xml文件的语句合法性。
我个人思路:针对每个文件,先将内容按照参数模块分割,并重定向到不同的临时文件中,然后对临时文件分别做检查处理。
分割文件内容模块到子文件中的过程:
#! /bin/sh
arr_tags="ROOT X_DEFINE CPC SGC ENUM_GROUP WILD_GROUP SRVDDR CLTDDR TCL TPP" #关键模块标签
cat $1 | sed -e '/^$/d' > config.tmp
cat config.tmp | awk –F'[<>]' '{
if(NF=3 && $1==$3 && $3=="")
{
if($2=="X_DEFINE")
{
tag=$2
echo $line >>$tag.tmp #将模块对应的行内容全部重定向到对应模块标签名的临时文件中
}
else if($2=="TPP")
{
tag=$2
echo $line >>$tag.tmp
}
else if($2=="/X_DEFINE")
{
tag=$2
echo $line >>$tag.tmp
}
else if($2=="/TPP")
{
tag=$2
echo $line >>$tag.tmp
}
else
{
str=substr("$2",1,3)
if("!--"==$str) #处理注释行,被忽略,最好能全部注释行重定向到特定文件,以便检查格式<!-- -->
continue
else if($tag != "")
echo $line >> $tag.tmp
else
continue
}
}'
针对每个临时文件中模块内容的检查:
#! /bin/sh
if [ -e "$myfile" ]
then
cat myfile | awk -F'[<>]' '{
if(NF==3)
{
if($2=="SRVDDR")
printf("开始检查:%s \n",$2);
else if($2=="/SRVDDR")
printf("完成检查:%s\n",$2);
}
else if(NF==5)
{
if($4=="/"$2)
{
if($2=="RouterType")
printf("检测到:%s \n",$2);
else if($2=="/RouterType")
printf("检测到:%s \n",$2);
else
{
printf("警告-未知参数项:%s \n",$2);
continue;
}
}else{
printf("警告:参数内容配置格式。\n%s\n",$line);
exit -1;
}
}else{
printf("警告:参数内容配置格式。\n%s\n",$line);
exit -1;
}
}'
遇到的问题:
① 数组在awk内外定义和使用;
② 逐行读取文件,鉴定标签为配置块标签之后,将两个<tag> </tag>
<tag...>
</tag>等结构之间的整行内容都返回到tag.tmp文件中做独立处理。
③想同时实现单个文件,或者某个文件夹下全部文件检查。
说明:
① arr_tags 是个数组,里面存放的是所有子模块的名称,在使用尖括号和空格分隔后,如果是唯一,且是数组成员将会被赋予给tag变量,形成tag.tmp 临时文件名称,以便存储对应模块的内容,做后续检查。
② ROOT 是个整个根节点标签,这里可以不做处理。
③ 每个子模块中都可能随时增加或者删减不同的配置参数,是否可以在其中使用数组实现灵活检查。
④ 配置文件如图片1,2,3,4,5,6,7顺序所示。
十分感谢大家关注和帮助,期盼高手老师能帮忙解答,谢谢!
相关推荐
20、脚本编程:从Shell脚本到设计模式的应用
本文探讨了从Shell脚本编程到设计模式应用的全过程。内容涵盖了Shell脚本的基础知识、类路径问题的解决、Java应用的简化、系统管理中的脚本应用,以及脚本编程在设计模式中的具体应用和优缺点分析。通过实际代码示例,展示了如何利用Groovy、BeanShell等脚本语言提高系统的灵活性和可维护性,并结合Quartz调度器实现任务自动化。文章还提供了脚本编程在策略模式和模板方法模式中的实际应用流程,并展望了其未来的发展潜力。
Ubuntu零基础入门到精通【6.1讲】:什么是 Shell?一文带你搞透!
🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。
Shell脚本自动化创建DB2数据库指南
DB2是IBM开发的关系型数据库管理系统(RDBMS),它最早在1980年代初期以OS/2平台上的Database Manager产品形式推出。随着时间的推移,DB2经历了不断的升级与改进,形成了一个广泛应用于大型企业环境中的成熟数据库解决方案。DB2以其高可靠性、安全性、和强大的并发处理能力,在金融、电信、政府等领域拥有广泛的用户基础。创建实例时,DB2允许使用默认配置,这样会使用一组预设的参数,适合快速部署。默认配置提供了基本的性能和稳定性,但是可能不会满足所有的业务需求。
高校技术转移办公室如何实现技术成果的智能推荐与精准路演?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
麻烦了熠哥,麻烦了熠哥麻烦了哈
麻烦了熠哥,麻烦了熠哥麻烦了哈。麻烦了熠哥,麻烦了熠哥麻烦了哈。麻烦了熠哥,麻烦了熠哥麻烦了哈


UNIX文化
