Saya mulai belajar Bash beberapa hari yang lalu.
Saya mencoba mendapatkan status keluar grep
ekspresi ke dalam variabel seperti ini:
check=grep -ci 'text' file.sh
dan output yang saya dapatkan adalah
No command '-ic' found
Haruskah saya melakukannya dengan perintah pipa?
bash
shell
command-line
grep
exit-status
omri gilhar
sumber
sumber
$?
segera setelah perintah selesai.Jawaban:
Perintahmu,
akan ditafsirkan oleh shell sebagai "jalankan perintah
-ci
dengan argumentext
danfile.sh
, dan atur variabelcheck
ke nilaigrep
di lingkungannya".Shell menyimpan nilai keluar dari perintah yang paling baru dieksekusi dalam variabel
?
. Anda dapat menetapkan nilainya ke salah satu variabel Anda sendiri seperti ini:Jika Anda ingin bertindak berdasarkan nilai ini, Anda bisa menggunakan
check
variabel Anda :atau Anda dapat melewati menggunakan variabel terpisah dan harus memeriksa
$?
semuanya bersama-sama:(perhatikan
-q
, ia memerintahkangrep
untuk tidak mengeluarkan apa pun dan keluar segera setelah sesuatu cocok; kami tidak benar-benar tertarik dengan apa yang cocok di sini)Atau, jika Anda hanya ingin "melakukan sesuatu" ketika polanya tidak ditemukan:
Menyimpan
$?
ke variabel lain hanya diperlukan jika Anda perlu menggunakannya nanti, ketika nilai dalam$?
telah ditimpa, seperti padaDalam cuplikan kode di atas,
$?
akan ditimpa oleh hasil[ "$err" -ne 0 ] && [ ! -d "$dir" ]
tes. Menyimpannya di sini benar-benar hanya perlu jika kita perlu menampilkannya dan menggunakannyaexit
.sumber
Pertanyaan Anda tidak jelas tetapi berdasarkan pada kode yang Anda kirimkan, sepertinya Anda ingin variabel
check
untuk menyimpan status keluar darigrep
perintah. Cara untuk melakukan ini adalah dengan menjalankanSaat menjalankan perintah dari shell, status keluarnya tersedia melalui parameter shell khusus
$?
,.Ini didokumentasikan oleh POSIX (standar untuk sistem operasi mirip Unix) dalam spesifikasinya untuk shell dan implementasi Bash didokumentasikan dalam Parameter Khusus .
Karena Anda seorang pelajar baru, saya sangat menyarankan Anda mulai dengan buku yang bagus dan / atau tutorial online untuk mendapatkan dasar-dasarnya. Rekomendasi sumber daya eksternal tidak disarankan di situs Stack Exchange tapi saya sarankan Lhunath dan GreyCat's Bash Guide .
sumber
Anda telah memberi tahu bash untuk mengatur variabel
check=grep
di lingkungan yang diteruskannya ke perintahtetapi
ci
tidak ada.Saya percaya Anda bermaksud melampirkan perintah itu dalam kutu-belakang, atau dalam tanda kurung yang diawali dengan tanda dolar, yang salah satu dari mereka akan menentukan jumlah berapa banyak baris 'teks' ditemukan pada (case insensitive) dalam file:
Sekarang
$check
harus 0 jika tidak ada yang cocok, atau positif jika ada yang cocok.sumber
Bingung mengapa menggunakan -c saat memeriksa output? Ini digunakan untuk memeriksa berapa kali sesuatu dicocokkan - tidak apakah itu berhasil atau tidak.
tetapi dalam contoh ini
Itu tidak menghasilkan apa pun kecuali kode keluar, yang kemudian digaungkan. Ini adalah output yang digunakan pemeriksaan variabel. Saya juga lebih suka karena itu satu baris.
Anda dapat mengganti --silent dengan -q. Saya menggunakannya karena Anda tidak tertarik dengan output grep, hanya apakah itu berfungsi atau tidak.
sumber
Cara yang benar untuk menetapkan output dari perintah grep ke variabel adalah sebagai @ monty-hard disebutkan:
Meskipun untuk menetapkan status keluar dari perintah ini ke variabel, Anda harus menggunakan parameter shell
$?
tepat setelah menjalankan perintah seperti yang ditunjukkan di bawah ini:sumber