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.