GNU/Linux >> Tutoriels Linux >  >> Linux

Convertir une sortie en chaîne

Comment résoudre le problème

Le shell (ou le test commande) utilise = pour l'égalité des chaînes et -eq pour l'égalité numérique. Certaines versions du shell supportent == comme synonyme de = (mais = est défini par le POSIX test commande). En revanche, Perl utilise == pour l'égalité numérique et eq pour l'égalité des chaînes.

Vous devez également utiliser l'une des commandes de test :

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

Ou :

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

Avec le [[ opérateur, vous pouvez supprimer les guillemets autour de "$a" .

Pourquoi vous avez reçu le message d'erreur

Lorsque vous avez écrit :

if $a -eq "AC adapter : online"

le shell l'a étendu à :

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

qui est une requête pour exécuter la commande AC avec les 5 arguments affichés, et comparez l'état de sortie de la commande avec 0 (en considérant 0 - succès - comme vrai et tout ce qui n'est pas nul comme faux). De toute évidence, vous n'avez pas de commande appelée AC sur votre système (ce qui n'est pas très surprenant).

Cela signifie que vous pouvez écrire :

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

Si vous voulez tester des chaînes, vous devez utiliser le test commande ou le [[ ... ]] opérateur. Le test la commande est la même que le [ commande sauf que lorsque le nom de la commande est [ , le dernier argument doit être ] .


Mettez la comparaison entre crochets et ajoutez des guillemets doubles autour du $a :

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

Sans les crochets bash essaie d'exécuter l'expression et d'évaluer la valeur de retour.

Il peut également être judicieux de mettre la substitution de commande entre guillemets :

a="$(acpitool -a)"

Veuillez essayer ceci -

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

    echo "$a"

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

Explication : -eq est principalement utilisé pour l'équivalence des expressions entières. Donc, ==est la voie à suivre ! Et, utilisez des guillemets doubles entre $a ou $(acpitool -a) pour empêcher le fractionnement des mots. Un argument entre guillemets doubles se présente comme un seul mot, même s'il contient des séparateurs blancs.


Linux
  1. Exemples de commande de temps Linux

  2. Comment convertir la sortie du shell de Linux en HTML ?

  3. Affichage de la sortie complète de la commande PS

  4. Numéro d'appareil dans la sortie de la commande stat

  5. Convertir la sortie ls en csv

Ccat - Coloriser la sortie de la commande Cat

Commande iftop sous Linux

Commande lsblk sous Linux

Exemples de commandes echo Linux

tee Exemples de commandes sous Linux

Convertir une chaîne en hexadécimal sur la ligne de commande