GNU/Linux >> Tutoriales Linux >  >> Linux

Convertir una salida a cadena

Cómo solucionar el problema

El caparazón (o el test comando) usa = para igualdad de cadenas y -eq para la igualdad numérica. Algunas versiones del shell admiten == como sinónimo de = (pero = está definido por POSIX test dominio). Por el contrario, Perl usa == para igualdad numérica y eq para la igualdad de cadenas.

También necesita usar uno de los comandos de prueba:

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

O:

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

Con el [[ operador, puede soltar las comillas alrededor de "$a" .

Por qué recibió el mensaje de error

Cuando escribiste:

if $a -eq "AC adapter : online"

el caparazón lo expandió a:

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

que es una solicitud para ejecutar el comando AC con los 5 argumentos que se muestran, y compare el estado de salida del comando con 0 (considerando 0 (éxito) como verdadero y todo lo que no sea cero como falso). Claramente, no tienes un comando llamado AC en su sistema (lo cual no es muy sorprendente).

Esto significa que puedes escribir:

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 desea probar cadenas, debe usar el test comando o el [[ ... ]] operador. El test el comando es el mismo que el [ comando excepto que cuando el nombre del comando es [ , el último argumento debe ser ] .


Ponga la comparación entre corchetes y agregue comillas dobles alrededor del $a :

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

Sin los corchetes bash intenta ejecutar la expresión y evaluar el valor devuelto.

También puede ser una buena idea poner la sustitución del comando entre comillas dobles:

a="$(acpitool -a)"

Intente esto -

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

    echo "$a"

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

Explicación: -eq se utiliza principalmente para la equivalencia de expresiones enteras. ¡Entonces, ==es el camino a seguir! Y use comillas dobles en $a o $(acpitool -a) para evitar la división de palabras. Un argumento encerrado entre comillas dobles se presenta como una sola palabra, incluso si contiene separadores de espacios en blanco.


Linux
  1. Ejemplos de comandos de tiempo de Linux

  2. ¿Cómo convertir la salida de shell de Linux a HTML?

  3. Visualización de la salida completa del comando PS

  4. Número de dispositivo en la salida del comando stat

  5. Redirigir la salida del comando en la ventana acoplable

Cómo asignar la salida de un comando de Linux a una variable

Ccat – Colorear la salida del comando Cat

Comando iftop en Linux

Comando lsblk en Linux

Ejemplos de comandos echo de Linux

Convierta una cadena de texto en bash en una matriz