2017-12-01 16 views
0

xmlファイルを読み取るアプリケーションのリリースバージョンを特定しようとしています。シェルスクリプトを使用して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 

が、これは、スクリプト(コードスニペット)で使用されている方法です

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.xxxの他の組み合わせをリリース13として識別する必要があるように、スクリプトの可変マッチング部分を絞り込むのに役立ちます。別のリリースとみなされます。たとえば、11.11.x.x.xまたは11.12.x.x.xまたは11.10.x.x.x 12.11.x.x.xに似た値は、スクリプトの「Release 13 Skip Patching Not」に移動する必要があります。彼らが言うように、XMLファイルの

あなたの答えてくれてありがとう

はカットと同じように使用されるが、ここで更新するのを忘れ、

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" 
+0

このxmlファイルの関連コンテンツを投稿できますか? – R4F6

+0

実際のXMLパーサーで読むのに十分な完全なファイルの例を提供できますか?xmlstarlet、xmllint、xsltproc、および実際にXML *を理解するコマンドラインツールを使用して回答を作成できますか? –

+0

BTW - all-caps変数名は、シェル自体やPOSIX定義のツール*との意味を持つシェル変数や環境変数*に使用されます。 POSIX標準では、アプリケーションの使用時に小文字の名前が予約されているので、スクリプトは偶然にシェルの動作を変更することを心配せずに小文字の名前を使用できます。 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html第4段落を参照してください。 –

答えて

0

あなたの構文解析は、勇敢です。それがどのように作成されているか知っているのでうまくいくかもしれませんが、その質問に対しては無関係です。

version=$(echo REL_VER| cut-d. -f1) 
release=$(echo REL_VER| cut-d. -f2) 
#etcetera 

あなたのバージョン番号のフィールドが異なります。

+0

カットと同じ方法で使用しますが、ここで更新することを忘れないでください。 – akbharath

+0

@ charles-duffyご回答ありがとうございます。カットと同じ方法で使用しましたが、ここで更新するのを忘れてください。新しいコードスニペットがその質問で更新されました。 – akbharath

0

解析に役立つ質問には不十分な情報がありますが、ファイルから解析されたバージョンを識別するのに最適な方法は簡単です:caseステートメントを使用してください。

case $version in 
    11.13.*) echo "Release 13; proceeding" >&2 ;; 
    *)  echo "Release not from 11.13.x series; aborting"; exit 1;; 
esac 
関連する問題