2016-07-11 10 views
1

Ich muss vergleichen, wenn die zweite Zeile der Eingabedatei die Zeichenfolge premium-world-check.xsd enthält. Wenn es vorhanden ist, muss ich nichts tun. Wenn es nicht vorhanden ist, muss ich einer anderen Datei vorangehen.Wildcard-Ausdruck Vergleich funktioniert nicht

I unter Eingabedatei haben,

<?xml version="1.0" encoding="UTF-8"?> 
<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd"> 
<record category="INDIVIDUAL"> 
<tag1> 
<tag2> 
.... 
</tag2> 
</tag1> 

Unten ist mein Code,

xsdFlag=`sed -n '2p' ${myInputFile}` 
if [ $xsdFlag == *"premium-world-check.xsd"* ] 
then 
    echo "Prepending not required" 
else 
    echo "<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">" | cat - ${myInputFile} > wcTemp.xml && mv wcTemp.xml ${myInputFile} 
    echo "<?xml version="1.0" encoding="UTF-8"?>" | cat - ${myInputFile} > wcTemp.xml && mv wcTemp.xml ${myInputFile} 
    echo "PREPENDING:" 
fi 

ich in meinem if Zustand unbekannt Operator bin immer.

+0

Versuchen Sie [Shellcheck] (http://shellcheck.net). Es weist darauf hin, dass "[..] [keine Globs] (https://github.com/koalaman/shellcheck/wiki/SC2081). Verwenden Sie [[..]] oder grep." –

Antwort

3

Versuchen Sie es so; Ich habe ein paar Korrekturen vorgenommen.

xsdFlag=`sed -n '2p' "$myInputFile"` 

if [[ "$xsdFlag" == *"premium-world-check.xsd"* ]]; then 
    echo "Prepending not required" 
else 
    echo '<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">' | cat - "$myInputFile" > wcTemp.xml && mv wcTemp.xml "$myInputFile" 
    echo '<?xml version="1.0" encoding="UTF-8"?>' | cat - "$myInputFile" > wcTemp.xml && mv wcTemp.xml "$myInputFile" 
    echo "PREPENDING:" 
fi 

Ein Problem war, unter Verwendung von Standard-POSIX [ ... ] statt Bash [[ ... ]], die Sie benötigen Platzhalter zu verwenden.

Das andere Problem war, dass Sie nicht Ihre Anführungszeichen in Ihrer XML-Zeichenfolge entkommen. Ich habe die äußeren Anführungszeichen von doppelten Anführungszeichen in einfache Anführungszeichen geändert, um dies zu beheben.

Sie haben auch nicht Ihre Dateinamen angegeben, die benötigt wird, um Fehler zu verhindern, wenn sie Leerzeichen enthalten.

+1

Ihr Update funktioniert so, wie ich es erwartet hatte. Danke für die anderen Fixes auch! – user2488578

+0

Kein Problem, froh zu helfen! :) – Will

+0

Es ist nicht unbedingt notwendig, in "[[...]]]" -Parameterexpansionen zu zitieren, aber es tut nicht weh. – chepner

Verwandte Themen