GNU/Linux >> Belajar Linux >  >> Linux

Jika, selain itu berdasarkan perintah disalurkan ke grep

Masalahnya adalah Anda memasukkan semuanya ke dalam [ , yaitu test memerintah. Selain itu, penggunaan grep Anda rusak.

Yang Anda butuhkan hanyalah:

if prlctl list --info ubuntu-vm | grep -q "State: running"; then
   echo 'machine is running'
else
   echo 'machine is not running'
fi

Perhatikan penggunaan -q sebagai argumen untuk grep . Itu tidak menulis apa pun ke STDOUT dan keluar dengan status 0 jika kecocokan ditemukan, dan bukan nol jika tidak.


Pemeriksaan alternatif, kurang "bersih" tetapi lebih dekat dengan apa yang ingin dicapai oleh pertanyaan tersebut.

Ingat bahwa [ pada intinya hanyalah sebuah perintah. Itu selalu menerima sejumlah parameter tertentu, dan keluar dengan status keluar 0 (sukses) atau 1 (gagal), seperti semua perintah lainnya. Misalnya, saat Anda membandingkan dua string, sintaksnya adalah [ , string 1, == , string 2, ] .

Saat ini Anda menggunakan ini sebagai if kondisi:

[ prlctl list --info ubuntu-vm | grep State == "State: running" ]

Tapi itu ambigu dalam beberapa hal. Bagaimana [ tahu bahwa di sebelah kiri Anda memiliki perintah untuk dijalankan dan bukan string tetap? Bagaimana ia tahu bahwa == adalah operator pembanding string, bukan hanya argumen untuk grep ? Bagaimana ia tahu bahwa | adalah bagian dari nilai sebelah kiri, daripada memisahkan perintah menjadi [ prlctl list --info ubuntu-vm dan grep State == "State: running" ] ?

Jadi sisi kiri perlu dikutip juga. Juga, karena Anda ingin membandingkan output dari perintah itu, daripada dunia "prctl list --info..." itu sendiri, Anda memerlukan $(…) operator:

[ "$(prlctl list --info ubuntu-vm | grep State)" == "State: running" ]

Linux
  1. Cara Menggunakan Perintah Grep untuk Menemukan Teks di File

  2. Dalam Urutan Apa Perintah Pipa Dijalankan?

  3. Gunakan Perintah Grep Dan Cari?

  1. Cara menggunakan perintah grep Linux

  2. Gunakan perintah grep Linux

  3. grep:perintah tidak ditemukan

  1. 10 Contoh Perintah Grep Praktis untuk Pengembang

  2. Perintah grep Linux

  3. Opsi warna default Grep