Bash 脚本变量带有 if else 语句但带有循环

Bash 脚本变量带有 if else 语句但带有循环

我对 bash 脚本编写不太有经验。但我试图用目录中相应的 xsd 文件验证各个 xml 文件。起始名称不变,但日期发生变化。

例如:

  • 文件1.xsd
  • 文件2.xsd
  • 文件3.xsd

  • File1_random_date.xml(随机日期时间可以是2016_06_12_10_38_13)
  • 文件2_随机_日期.xml
  • 文件2_随机_日期.xml
  • 文件3_随机_日期.xml


我想根据 File2.xsd 验证所有 File2*.xml 文件,并根据 File1.xsd 验证所有 File1*.xml 等


就像是:

xmllint --noout --schema File2.xsd File2_*.xml
xmllint --noout --schema File1.xsd File1_*.xml

但我不确定如何使用正则表达式字符串来表示日期,并说如果 File2_*.xml 存在,则根据 File2.xsd 验证每个文件。

有什么帮助吗?

答案1

zsh

list=(file*_*.xml)
for prefix (${(u)list%%_*})
  xmllint --noout --schema $prefix.xsd ${prefix}_*.xml

答案2

像这样的事情可能会有所帮助(使用bash):

# Iterate across the XSD files
for xsdfile in *.xsd
do
    test -f "$xsdfile" || continue

    # Strip the ".xsd" suffix and search for XML files matching this prefix
    prefix="${xsdfile%.xsd}"
    for xmlfile in "$xsdfile"_*.xml
    do
        test -f "$xmlfile" || continue
        xmllint --noout --schema "$xsdfile" "$xmlfile"
    done
done

如果您想在一次操作中检查所有匹配的 XML 文件,可以这样做:

# Iterate across the XSD files
for xsdfile in *.xsd
do
    test -f "$xsdfile" || continue

    # Strip the ".xsd" suffix and search for XML files matching this prefix
    prefix="${xsdfile%.xsd}"
    for xmlfile in "$xsdfile"_*.xml
    do
        # Skip if no files, else do it just once
        test -f "$xmlfile" || continue
        xmllint --noout --schema "$xsdfile" "$xsdfile"_*.xml
        break
    done       
done

相关内容