So vergleichen Sie Zeichenfolgen in KSH

So vergleichen Sie Zeichenfolgen in KSH

Ich möchte das Ergebnis eines Jobs überprüfen und eine Aktion ausführen FAILED.

Erstens: Ich greppe das letzte Wort der Zeile in meiner Anwendungsprotokolldatei (für die zuletzt verarbeitete Datei ( $processedfilename)):

check1=$(grep "$processedfilename" "$logfile" | grep "anotherword" | \
    grep "FAILED" | tail -1 | awk '{print $NF}')

Das führt zu [FAILED].

Jetzt möchte ich das Ergebnis überprüfen

if [ $check1 -eq "[[FAILED]" ] 
then

oder

if [ $check1 -eq "\[FAILED]" ] 
then

Es gibt immerArithmetiksyntaxfehler.

Was ist die korrekte zu überprüfende Syntax [FAILED]?

Antwort1

Variablen sollten immer in doppelte Anführungszeichen gesetzt werden. Und Sie benötigen =für Zeichenfolgen das Gleiche. Also:

if [ "$check1" = "[FAILED]" ]; then

Antwort2

Sie führen einen arithmetischen Vergleich durch, indem Sie verwenden -eq, was zu dem Fehler führt. Sie müssen den Zeichenfolgenvergleich durch =(oder ==innerhalb [[) durchführen und dafür reicht die Verwendung von Anführungszeichen aus:

[ "$check1" = "[[FAILED]" ]
[[ "$check1" = "[[FAILED]" ]]

verwandte Informationen