Cara memperbaiki masalah
Shell (atau test
perintah) menggunakan =
untuk kesetaraan string dan -eq
untuk persamaan numerik. Beberapa versi shell mendukung ==
sebagai sinonim untuk =
(tetapi =
didefinisikan oleh POSIX test
memerintah). Sebaliknya, Perl menggunakan ==
untuk kesetaraan numerik dan eq
untuk persamaan string.
Anda juga perlu menggunakan salah satu perintah pengujian:
if [ "$a" = "AC adapter : online" ]
then echo "ONLINE"
else echo "OFFLINE"
fi
Atau:
if [[ "$a" = "AC adapter : online" ]]
then echo "ONLINE"
else echo "OFFLINE"
fi
Dengan [[
operator, Anda dapat menghapus tanda kutip di sekitar "$a"
.
Mengapa Anda menerima pesan kesalahan
Saat Anda menulis:
if $a -eq "AC adapter : online"
shell memperluasnya ke:
if AC adapter : online -eq "AC adapter : online"
yang merupakan permintaan untuk mengeksekusi perintah AC
dengan 5 argumen yang ditampilkan, dan bandingkan status keluar dari perintah dengan 0 (mengingat 0 - sukses - sebagai benar dan apa pun yang bukan nol sebagai salah). Jelas, Anda tidak memiliki perintah bernama AC
di sistem Anda (yang tidak terlalu mengejutkan).
Ini berarti Anda dapat menulis:
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
Jika Anda ingin menguji string, Anda harus menggunakan test
perintah atau [[ ... ]]
operator. test
perintahnya sama dengan [
perintah kecuali jika nama perintah adalah [
, argumen terakhir harus ]
.
Masukkan perbandingan dalam tanda kurung siku dan tambahkan tanda kutip ganda di sekitar $a
:
if [ "$a" == "AC adapter : online" ]; then
...
Tanpa tanda kurung siku bash
mencoba mengeksekusi ekspresi dan mengevaluasi nilai kembalian.
Sebaiknya tempatkan substitusi perintah dalam tanda kutip ganda:
a="$(acpitool -a)"
Silakan coba ini -
#!/bin/bash
a="$(acpitool -a)"
echo "$a"
if [ "$a" == 'AC adapter : online' ]
then
echo "ONLINE"
else
echo "OFFLINE"
fi
Penjelasan: -eq
terutama digunakan untuk kesetaraan untuk ekspresi bilangan bulat. Jadi, ==adalah cara untuk pergi! Dan, gunakan tanda kutip ganda di $a atau $(acpitool -a) untuk mencegah pemisahan kata. Argumen yang dilampirkan dalam tanda kutip ganda menampilkan dirinya sebagai satu kata, meskipun berisi pemisah spasi putih.