Saya sedang menulis skrip shell, dan saya mencoba untuk memeriksa apakah output dari sebuah perintah berisi string tertentu. Saya pikir saya mungkin harus menggunakan grep, tapi saya tidak yakin bagaimana caranya. Apakah ada yang tahu?
116
Jawaban:
Uji nilai kembali grep:
yang dilakukan secara idiomatis seperti ini:
dan juga:
sumber
=
menjadi operator pembanding, bukan==
; lihat pubs.opengroup.org/onlinepubs/9699919799/utilities/test.htmlgrep 'string' &>/dev/null
keduanya tidak sesuai dengan POSIX dan jauh lebih lambat untuk dieksekusi (jikastring
muncul lebih awal dalam aliran keluaran yang panjang) daripadagrep -q string
. [Peringatan ada jika Anda ingin memastikansomecommand
tetap berjalan bahkan setelah memancarkanstring
, dalam hal ini menggunakangrep -q
- dengan menutup stdin dan keluar setelah contoh pertamastring
terlihat - dapat menjadi kontraproduktif]. (Perihal: "non-POSIX-compliant",&>
adalah ekstensi - lihat pubs.opengroup.org/onlinepubs/009695399/utilities/… menjelaskan dukungan pengalihan yang diamanatkan oleh POSIX).Pengujian
$?
adalah anti-polasumber
grep -Fxq
F berarti tetap (tidak ditafsirkan) dan x untuk seluruh baris$?
anti-pola?$?
tidak menyetel perintah sebelumnya sebagai "dicentang" untuk tujuanset -e
atauERR
perangkap, sehingga program Anda dapat keluar jika Anda ingin program tersebut kembali ke jalur sengaja-salah nanti. Di sisi lain,$?
adalah keadaan global yang mudah berubah - mudah untuk membuang nilainya secara tidak sengaja. Misalnya, jika Anda menambahkan baris seperti loggingecho "Exit status is $?"
, nilai baru$?
menjadi status keluar dariecho
.Pilihan lainnya adalah memeriksa ekspresi reguler yang cocok pada keluaran perintah.
Sebagai contoh:
sumber
Skrip shell bersyarat if / else yang bersih:
sumber