GNU/Linux >> Belajar Linux >  >> Linux

Ubah output menjadi string

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.


Linux
  1. Bagaimana cara mengubah output shell Linux ke HTML?

  2. Melihat output penuh dari perintah PS

  3. Nomor perangkat dalam keluaran perintah stat

  1. Konversikan string ke heksadesimal pada baris perintah

  2. Konversikan string teks dalam bash ke array

  3. Mengarahkan output perintah di buruh pelabuhan

  1. Cara Menetapkan Output dari Perintah Linux ke Variabel

  2. Menyimpan Output Perintah Dalam Variabel Shell?

  3. Ubah Output Perintah Pohon Ke Format Json?