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.