Shell脚本-检查XML标记是否与版本匹配



我对shell脚本很陌生,需要制作一个脚本来检查不同xml文件和不同xml层次结构中的xml标记,并检查不同文件中的版本是否匹配。

但还有一个额外的步骤,我只需要这个标签中的版本号,有些标签可能有更多信息(参见示例-快照、发布(。

我对此很陌生,我已经使用了这个sed命令来获得版本,但不能再进一步了。。。。

成功与失败示例:

Hello, I am quite new to shell scripting and need to make a script that checks xml tag within diferent xml files and diferent xml hierarchy and checks if version matches in different files.

但还有一个额外的步骤,我只需要这个标签中的版本号,有些标签可能有更多信息(参见示例-快照、发布(。

我对此很陌生,我已经使用了这个sed命令来获得版本,但不能再进一步了。。。。

成功与失败示例:

示例1-处理

File1.xml
<project>
<version>1.2.4-SNAPSHOT</version>
</project>
File2.xml
<project>
<parent>
<version>1.2.4</version>
</parent>
</project>
File3.xml
<project>
<parent>
<child>
<version>1.2.4-RELEASE</version>
</parent>
</child>
</parent>
</project>
OUTPUT - Versions Match - 1.0.4

示例2-错误

File1.xml
<project>
<version>1.2.4-SNAPSHOT</version>
</project>
File2.xml
<project>
<parent>
<version>2.2.2</version>
</parent>
</project>
File3.xml
<project>
<parent>
<child>
<version>1.2.2-RELEASE</version>
</parent>
</child>
</parent>
</project>
OUTPUT - Version Mismatch - Check Version

由于您处理的是xml文件,因此应该使用适当的xml解析器读取文件并使用xpath进行搜索。

顺便说一句,File3.xml(在这两种情况下(的格式都不好。因此,例如,假设这个特定的文件内容是:

<project>
<parent>
<child>
<version>1.2.2-RELEASE</version>
</child>
</parent>
</project>

例如,您可以使用xmlstarlet:

xmlstarlet sel -T -t -m "//project//version" -v . File3.xml

或者xidel(我个人更喜欢它,因为它支持xpath>1.0(:

xidel File3.xml -e '//project//version'

在任何一种情况下,输出都应该是

1.2.2-RELEASE
#!/bin/bash
VERSIONS=( $(cat file*.xml | grep -E "^<version>.*</version>$" | cut -d '>' -f 2 | cut -d '<' -f1 | cut -d '-' -f1) )
UNIQUE_VERSION=($(echo "${VERSIONS[@]}" | tr ' ' 'n' | sort -u))
if [ "${VERSIONS[0]}" == "${VERSIONS[1]}" ] && [ "${VERSIONS[1]}" == "${VERSIONS[2]}" ];
then
echo "Versions are the same. $UNIQUE_VERSION"
exit 0
else 
echo "ERROR: Versions do not match. $UNIQUE_VERSION"
exit 1
fi

cat文件(假设存在命名模式并且文件直接相同(
使用grepcut筛选版本
仅使用sort -u获取唯一值
命令的输出保存到数组VERSIONS=( $(command) )

比较数组中的值,如果它们匹配或不包括唯一版本号,则输出消息。

成功时输出:
Versions are the same. 1.2.4
失败时输出:
ERROR: Versions do not match. 2.2.2

相关内容

  • 没有找到相关文章

最新更新