求助!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允许使用默认配置,这样会使用一组预设的参数,适合快速部署。默认配置提供了基本的性能和稳定性,但是可能不会满足所有的业务需求。
无人机手势控制数据集46176张VOC+YOLO格式.zip
数据集格式:VOC格式+YOLO格式 压缩包内含:3个文件夹,分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计:46176 Annotations文件夹中xml文件总计:46176 labels文件夹中txt文件总计:46176 标签种类数:8 标签名称:["follow","follow_hand","land","land_hand","null","object","takeoff","takeoff-hand"] 每个标签的框数(注意yolo格式类别顺序不和这个对应,而以labels文件夹classes.txt为准): follow 框数 = 22056 follow_hand 框数 = 4038 land 框数 = 7609 land_hand 框数 = 3300 null 框数 = 2642 object 框数 = 2 takeoff 框数 = 3494 takeoff-hand 框数 = 3645 总框数:46786 图片清晰度(分辨率:像素):清晰 图片是否增强:否 标签形状:矩形框,用于目标检测识别 重要说明:暂无 特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注
三相光伏发电系统中MPPT和并网控制策略的研究(Simulink仿真实现)
内容概要:本文系统研究了三相光伏发电系统中的最大功率点跟踪(MPPT)与并网控制策略,深入分析光伏阵列在不同光照和温度条件下的输出特性,设计并实现了基于Simulink的完整仿真模型。该模型涵盖光伏阵列、DC-DC变换器、MPPT控制器、逆变器及锁相环等关键模块,重点验证了系统在动态环境变化下实现高效能量转换的能力,并确保并网电流符合电能质量标准。研究对比了多种MPPT算法的动态响应与稳定性表现,优化了并网控制策略以提升整体系统性能,为光伏系统的设计与控制提供了理论依据与仿真支持。; 适合人群:具备电力电子、自动控制或新能源发电基础知识的高校研究生、科研人员及从事光伏系统设计与仿真的工程技术人员。; 使用场景及目标:①用于教学与科研中深入理解光伏发电系统的MPPT原理与并网控制机制;②指导实际工程项目中光伏逆变器控制策略的设计与仿真验证;③为撰写相关学术论文或完成课程设计提供可复现的Simulink模型与理论支持。; 阅读建议:建议读者结合文中提供的Simulink仿真文件,逐步搭建系统模型,调试MPPT与并网控制参数,观察关键波形如光伏电压、电流、功率及并网电流的变化,加深对控制逻辑的理解。同时可尝试改进算法以进一步提升系统动态响应与鲁棒性。


UNIX文化
