GNU/Linux >> Linux Esercitazione >  >> Linux

Converti un output in una stringa

Come risolvere il problema

La shell (o il test comando) utilizza = per l'uguaglianza di stringhe e -eq per l'uguaglianza numerica. Alcune versioni della shell supportano == come sinonimo di = (ma = è definito dal POSIX test comando). Al contrario, Perl usa == per l'uguaglianza numerica e eq per l'uguaglianza di stringhe.

Devi anche usare uno dei comandi di test:

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

Oppure:

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

Con il [[ operatore, potresti eliminare le virgolette intorno a "$a" .

Perché hai ricevuto il messaggio di errore

Quando hai scritto:

if $a -eq "AC adapter : online"

la shell lo ha espanso a:

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

che è una richiesta per eseguire il comando AC con i 5 argomenti mostrati e confronta lo stato di uscita del comando con 0 (considerando 0 - successo - come vero e qualsiasi cosa diversa da zero come falsa). Chiaramente, non hai un comando chiamato AC sul tuo sistema (il che non è molto sorprendente).

Ciò significa che puoi scrivere:

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

Se vuoi testare le stringhe, devi usare il test comando o il [[ ... ]] operatore. Il test il comando è lo stesso di [ comando tranne quando il nome del comando è [ , l'ultimo argomento deve essere ] .


Metti il ​​confronto tra parentesi quadre e aggiungi le doppie virgolette attorno al $a :

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

Senza le parentesi quadre bash tenta di eseguire l'espressione e valutare il valore restituito.

Potrebbe anche essere una buona idea mettere la sostituzione del comando tra virgolette:

a="$(acpitool -a)"

Prova questo -

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

    echo "$a"

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

Spiegazione: -eq è utilizzato principalmente per l'equivalenza per le espressioni intere. Quindi, ==è la strada da percorrere! Inoltre, usa le virgolette doppie tra $a o $(acpitool -a) per impedire la suddivisione delle parole. Un argomento racchiuso tra doppi apici si presenta come una singola parola, anche se contiene separatori di spazi bianchi.


Linux
  1. Memorizzazione dell'output del comando nella variabile Shell?

  2. Output dell'"ultimo" comando?

  3. Esempi di comandi temporali di Linux

  4. Come convertire l'output della shell di Linux in HTML?

  5. Visualizzazione dell'output completo del comando PS

Ccat:colora l'output del comando Cat

comando iftop in Linux

Comando lsblk in Linux

Esempi di comandi echo Linux

Converti una stringa di testo in bash in array

Reindirizzamento dell'output del comando nella finestra mobile