Saya ingin memahami status layanan tertentu ( tomcat8.service
).
Hanya jika string itu ditemukan, saya ingin menjalankan beberapa logika.
Masalah: bahkan jika saya menjalankan skrip pada nama layanan yang tidak ada ("asd" dalam contoh ini), if $status
masih cocok dan dicetak. Tapi kenapa?
status = $(systemctl status asd.service | grep 'active')
echo $status
if $status
then
echo "$SERVICE was active"
exit 0
fi
exit 0
Hasil keluaran adalah:, asd.service was active
yang tentu saja tidak benar.
The echo $status
cetakan:status: Unknown job: =
Jawaban:
Anda dapat menggunakan status pengembalian grep.
atau bahkan lebih mudah:
atau jika Anda lebih suka
if
:Anyways, mengurus tentang kata kunci
inactive
,not active
,active (exited)
atau sama. Ini juga akan cocok dengangrep
pernyataan Anda . Lihat komentarnya. Terima kasih @ Terrance untuk petunjuknya.Memperbarui:
Tidak perlu grep.
systemctl
sudahis-active
termasuk perintah .atau:
sumber
if
menggunakan kode pengembalian, Anda hanya dapat menggunakanif systemctl status asd.service | grep 'active'; then ...
grep 'active'
adalah bahwa ia akan menemukaninactive
jugaactive
.grep -w active
hanya akan menemukanactive
dan mengabaikaninactive
.systemctl is-active
?Beberapa komentar ulasan kode:
var=value
- tidak ada spasi di sekitar=
yang diizinkan. ( dokumentasi )status=$(some command)
- variabel status menahan output dari perintah, bukan status keluar. Status keluar dalam$?
variabelyang
if
bertindak pernyataan di status keluar dari perintah berikutnya ( dokumentasi )Paling sering, perintahnya adalah
[
atau[[
untuk menguji beberapa kondisi.Namun,
grep
memiliki status keluar yang jelas: 0 jika pola ditemukan, 1 sebaliknya. Jadi, Anda menginginkan ini:sumber