GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wandeln Sie eine Ausgabe in einen String um

So beheben Sie das Problem

Die Shell (oder die test Befehl) verwendet = für Stringgleichheit und -eq für numerische Gleichheit. Einige Versionen der Shell unterstützen == als Synonym für = (aber = wird durch den POSIX test definiert Befehl). Im Gegensatz dazu verwendet Perl == für numerische Gleichheit und eq für String-Gleichheit.

Sie müssen auch einen der Testbefehle verwenden:

if [ "$a" = "AC adapter : online" ]
then echo "ONLINE"
else echo "OFFLINE"
fi

Oder:

if [[ "$a" = "AC adapter : online" ]]
then echo "ONLINE"
else echo "OFFLINE"
fi

Mit dem [[ Operator, könnten Sie die Anführungszeichen um "$a" herum weglassen .

Warum Sie die Fehlermeldung erhalten haben

Als Sie geschrieben haben:

if $a -eq "AC adapter : online"

die Shell hat es erweitert zu:

if AC adapter : online -eq "AC adapter : online"

Dies ist eine Aufforderung zur Ausführung des Befehls AC mit den 5 angezeigten Argumenten und vergleichen Sie den Beendigungsstatus des Befehls mit 0 (betrachten Sie 0 – Erfolg – ​​als wahr und alles, was nicht Null ist, als falsch). Offensichtlich haben Sie keinen Befehl namens AC auf Ihrem System (was nicht sehr überraschend ist).

Das heißt, Sie können schreiben:

if grep -q -e 'some.complex*pattern' $files
then echo The pattern was found in some of the files
else echo The pattern was not found in any of the files
fi

Wenn Sie Zeichenfolgen testen möchten, müssen Sie den test verwenden Befehl oder den [[ ... ]] Operator. Die test Befehl ist derselbe wie [ Befehl, außer wenn der Befehlsname [ ist , muss das letzte Argument ] sein .


Setzen Sie den Vergleich in eckige Klammern und setzen Sie doppelte Anführungszeichen um die $a :

if [ "$a" == "AC adapter : online" ]; then
  ...

Ohne die eckigen Klammern bash versucht den Ausdruck auszuführen und den Rückgabewert auszuwerten.

Es kann auch eine gute Idee sein, die Befehlsersetzung in doppelte Anführungszeichen zu setzen:

a="$(acpitool -a)"

Bitte versuchen Sie dies -

    #!/bin/bash
    a="$(acpitool -a)"

    echo "$a"

    if [ "$a" == 'AC adapter : online' ]
    then
    echo "ONLINE"
    else
    echo "OFFLINE"
    fi

Erklärung: -eq wird hauptsächlich zur Äquivalenz für ganzzahlige Ausdrücke verwendet. Also, ==ist der richtige Weg! Verwenden Sie außerdem doppelte Anführungszeichen zwischen $a oder $(acpitool -a), um eine Worttrennung zu verhindern. Ein in doppelte Anführungszeichen eingeschlossenes Argument stellt sich als einzelnes Wort dar, auch wenn es Leerzeichen als Trennzeichen enthält.


Linux
  1. So weisen Sie einer Variablen die Ausgabe eines Linux-Befehls zu

  2. Ausgabe des Befehls in Shell-Variable speichern?

  3. Konvertieren Sie die Ausgabe des Baumbefehls in das Json-Format?

  4. Beispiele für Linux-Zeitbefehle

  5. tee-Befehlsbeispiele in Linux

Ccat – Cat-Befehlsausgabe einfärben

iftop-Befehl unter Linux

lsblk-Befehl unter Linux

Ausgabe welchen Befehls für die Eingabe auf CD verwendet?

Beispiele für Linux-Echo-Befehle

Konvertieren Sie die Zeichenfolge in der Befehlszeile in Hexadezimal