【发布时间】:2018-05-15 17:01:11
【问题描述】:
试图识别读取 xml 文件的应用程序的发布版本。
文件:/u01/app/inventory/ContentsXML/comps.xml
grep -Po '(?<=VER=)[^ ]*' /u01/app/inventory/ContentsXML/comps.xml |head -1 |sed -e 's/^"//' -e 's/"$//'
11.13.17.08.0
另一个版本
grep -Po '(?<=VER=)[^ ]*' /u01/app/inventory/ContentsXML/comps.xml |head -1 |sed -e 's/^"//' -e 's/"$//
11.12.0.0.0
这就是它在脚本中的使用方式(代码 sn-p)
REL_VER=`grep -Po '(?<=VER=)[^ ]*' /u01/app/inventory/ContentsXML/comps.xml |head -1 |sed -e 's/^"//' -e 's/"$//'`
if [[ $REL_VER =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\.[0]{1,}$ ]]; then
echo "Identified as Release 13" | tee -a ${OUT_FILE}
${ROOT}/r13patch.sh >>${OUT_FILE} 2>&1
else
echo "Not a Release 13 Skipping Patching" | tee -a ${OUT_FILE}
在某些情况下,它会准确检测版本并且安装脚本正在启动,但在某些情况下,它不是,例如:11.12.1.0.0
请求专家帮助优化脚本中的变量匹配部分,以便必须将 11.13.17.08.0 和 11.13.x.x.x 的任何其他组合标识为版本 13,而所有其他版本必须视为不同的版本。例如,任何类似于 11.11.x.x.x 或 11.12.x.x.x 或 11.10.x.x.x 12.11.x.x.x 的值都应转到脚本中的“不是第 13 版跳过补丁”。
感谢您的回答
和cut一样用,但是这里忘记更新了,
REV_FILE1=/u01/app/inventory/ContentsXML/comps.xml
REV_FILE2=/u01/APPLTOP/app/inventory/ContentsXML/comps.xml
if [ -f ${REV_FILE1} ]; then
REL_VER=`grep -Po '(?<=VER=)[^ ]*' ${REV_FILE1} |head -1 |sed -e 's/^"//' -e 's/"$//'|cut -d"." -f1-2`
elif [ -f ${REV_FILE2} ]; then
REL_VER=`grep -Po '(?<=VER=)[^ ]*' ${REV_FILE2} |head -1 |sed -e 's/^"//' -e 's/"$//'|cut -d"." -f1-2`
else
log_warn "Unable to identify release version"
fi
if [[ ! -z ${REL_VER} && ${REL_VER} == 11.13 ]]; then
log_info "Identified as R13"
${ROOT}/r13patch.sh >>${OUT_FILE} 2>&1
if [ $? -eq 0 ] ; then
log_info "R13 APP Patching finished successfully"
else
log_crit "R13 APP Patching failed"
fi
else
log_info "Not a Release 13 Skipping Patching"
【问题讨论】:
-
能把这个xml文件的相关内容贴出来吗?
-
您能否提供一个实际完整的文件示例,可以使用真正的 XML 解析器读取(因此可以使用 xmlstarlet、xmllint、xsltproc 和其他命令行工具构建答案)真的懂XML)?
-
顺便说一句——全大写变量名用于 shell 和环境变量对 shell 本身或 POSIX 定义的工具有意义。 POSIX 标准保留小写名称供应用程序使用,因此脚本可以使用小写名称,而不必担心意外修改 shell 行为;见pubs.opengroup.org/onlinepubs/9699919799/basedefs/…,第四段。