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.