我對 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
uj5u.com熱心網友回復:
由于您正在處理 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
uj5u.com熱心網友回復:
#!/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檔案(假設有命名模式并且檔案直接在同一個)
過濾版本 usinggrep和cut
Get the unique value only usingsort -u
命令的輸出保存到陣列中VERSIONS=( $(command) )
比較陣列中的值并輸出訊息,如果它們匹配或不包括唯一版本號。
成功
Versions are the same. 1.2.4
時輸出:失敗時輸出:
ERROR: Versions do not match. 2.2.2
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/365897.html
上一篇:如何驗證變數是否包含影像?
下一篇:如何驗證是否需要物件屬性?
