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"
Können Sie den relevanten Inhalt dieser XML-Datei posten? – R4F6
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 *)? –
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. –