2017-12-01 6 views
0

Versuchen, Release-Version der Anwendung zu identifizieren, eine XML-Datei zu lesen.Versuchen, Release-Version einer Anwendung zu identifizieren Lesen einer XML-Datei mit Shell-Skript

Datei: /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 

Eine andere Version

grep -Po '(?<=VER=)[^ ]*' /u01/app/inventory/ContentsXML/comps.xml |head -1 |sed -e 's/^"//' -e 's/"$// 
11.12.0.0.0 

dies ist, wie es im Skript (Code-Schnipsel) verwendet wird

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} 

In einigen Fällen wird die Version genau erkannt und die Installationsskripte werden gestartet, in einigen Fällen jedoch nicht zB: 11.12.1.0.0

Experten anfordern hilft, den variablen Übereinstimmungsteil im Skript zu verfeinern, so dass 11.13.17.08.0 und jede andere Kombination von 11.13.xxx als Release 13 identifiziert werden muss und alle anderen haben als unterschiedliche Freisetzung genommen werden. zum Beispiel sollten alle Werte, die 11.11.x.x.x oder 11.12.x.x.x oder 11.10.x.x.x 12.11.x.x.x ähneln, im Skript auf "Kein Release 13 Skipping Patching" gehen.

Vielen Dank für Ihre Antworten

die gleiche Art und Weise mit Schnitt gebraucht, aber hier zu aktualisieren vergessen,

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

Können Sie den relevanten Inhalt dieser XML-Datei posten? – R4F6

+0

Können Sie ein Beispiel für die Datei angeben, die tatsächlich vollständig genug ist, um mit einem echten XML-Parser gelesen zu werden? Dann könnten Antworten erstellt werden, die xmlstarlet, xmllint, xsltproc und andere Befehlszeilentools verwenden, die * XML wirklich verstehen *)? –

+0

BTW - Großbuchstaben-Variablennamen werden für Shell- und Umgebungsvariablen * mit Bedeutung für die Shell selbst oder für POSIX-definierte Werkzeuge * verwendet. Der POSIX-Standard reserviert Kleinbuchstaben für die Anwendungsnutzung, sodass Skripte Kleinbuchstaben verwenden können, ohne dass das Shell-Verhalten durch Zufall verändert werden muss. siehe http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html, vierter Absatz. –

Antwort

0

Ihre Parsen der XML-Datei ist, wie sie sagen, mutig. Es könnte funktionieren, weil Sie wissen, wie es erstellt wird, aber es ist auch irrelevant für die Frage.

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

gibt Ihnen die verschiedenen Felder in Ihrer Versionsnummer.

+0

Verwendet den gleichen Weg mit Schnitt, aber vergessen, hier zu aktualisieren, – akbharath

+0

@ Charles-Duffy danke für die Antworten/Vorschläge. Verwendet den gleichen Weg mit Schnitt, aber vergessen, hier zu aktualisieren, Neues Code-Snippet in der Frage aktualisiert. – akbharath

0

Es gibt nicht genügend Informationen in der Frage, um das Parsen zu erleichtern. Aber wie man die Version am besten identifiziert, wenn sie aus der Datei herausgefiltert wird, ist einfach genug: Verwenden Sie eine case Anweisung.

case $version in 
    11.13.*) echo "Release 13; proceeding" >&2 ;; 
    *)  echo "Release not from 11.13.x series; aborting"; exit 1;; 
esac 
Verwandte Themen