Cara yang berbeza untuk membaca fail dalam skrip bash menggunakan semasa gelung
- 2763
- 739
- Clarence Powlowski
Artikel ini adalah mengenai cara membaca fail dalam skrip bash menggunakan a Semasa gelung. Membaca fail adalah operasi biasa dalam pengaturcaraan. Anda harus biasa dengan kaedah yang berbeza dan kaedah mana yang lebih efisien untuk digunakan. Di Bash, satu tugas dapat dicapai dalam banyak cara tetapi selalu ada cara yang optimum untuk menyelesaikan tugas dan kita harus mengikutinya.
Sebelum melihat cara membaca kandungan fail menggunakan Semasa gelung, Primer cepat mengenai bagaimana gelung berfungsi. Sementara gelung menilai keadaan dan berulang di atas satu set kod yang diberikan apabila keadaan itu benar.
sementara [keadaan] melakukan blok kod yang dilakukan
Mari Pecah Semasa gelung sintaks.
- Semasa gelung harus bermula dengan kata kunci sementara diikuti dengan keadaan.
- A keadaan harus dilampirkan di dalam [] atau [[]]. Keadaan ini harus selalu kembali untuk gelung yang akan dilaksanakan.
- Blok sebenar kod akan diletakkan di antara lakukan dan selesai.
Nombor = 0 sementara [[$ nombor -le 10]] do echo "selamat datang $ nombor kali" ((nombor ++)) selesaiSemasa gelung
Ini adalah contoh yang sangat mudah, di mana gelung melaksanakan sehingga Nombor tidak lebih besar daripada 10 dan mencetak pernyataan echo.
Bersama dengan manakala Kami akan menggunakan Baca Perintah untuk membaca kandungan baris fail mengikut baris. Berikut adalah sintaks bagaimana manakala dan Baca Perintah digabungkan. Sekarang ada cara yang berbeza untuk lulus fail sebagai input dan kita akan melihat mereka semua.
# Sintaks semasa baca pembolehubah lakukan kod selesai
Piping di Linux
Biasanya kami akan menggunakan perintah kucing untuk melihat kandungan fail dari terminal. Juga, kami akan menanam output perintah kucing kepada arahan lain seperti grep, sort, dll.
Begitu juga, kita akan menggunakan perintah kucing di sini untuk membaca kandungan fail dan paip ke a manakala gelung. Untuk demonstrasi, saya menggunakan /etc/passwd fail tetapi tidak dinasihatkan untuk mengacaukan fail ini jadi ambil salinan sandaran fail ini dan mainkan dengannya jika anda menginginkannya.
kucing /etc /passwd | Semasa membaca lread lakukan echo $ lread selesaiPiping di Linux
Mari kita pecahkan apa yang akan berlaku apabila kod di atas dihantar.
- kucing /etc /passwd akan membaca kandungan fail dan lulus sebagai input melalui paip.
- Baca Perintah membaca setiap baris yang diluluskan sebagai input dari perintah kucing dan menyimpannya di Lread pembolehubah.
- Baca Perintah akan membaca kandungan fail sehingga Eol ditafsirkan.
Anda juga boleh menggunakan arahan lain seperti kepala, ekor, dan paip ke semasa gelung.
kepala -n 5 /etc /passwd | Semasa membaca lread lakukan echo $ lread selesaiPerintah kepala
Pengalihan input di Linux
Kita boleh mengalihkan kandungan fail ke Semasa gelung Menggunakan pengendali pengalihan input (<)
.
Semasa membaca lread lakukan echo $ lread selesai < /etc/passwd | head -n 5Pengalihan input
Anda juga boleh menyimpan nama fail ke pembolehubah dan melewatinya melalui pengendali pengalihan.
Filename = "/etc/passwd" semasa membaca lread do echo $ lread selesai < $FILENAMESimpan nama fail dalam pembolehubah
Anda juga boleh lulus nama fail sebagai hujah pada skrip anda.
Semasa membaca lread lakukan echo $ lread selesai < $1 | head -n 5Simpan nama fail sebagai hujah
Pemisah medan dalaman
Anda boleh bekerja dengan pelbagai jenis format fail (CSV, Txt, Json) dan anda mungkin mahu membahagikan kandungan fail berdasarkan pembatas tersuai. Dalam kes ini, anda boleh menggunakan "Pemisah medan dalaman (IFS)"Untuk membahagikan kandungan fail dan simpan dalam pembolehubah.
Izinkan saya menunjukkan bagaimana ia berfungsi. Lihatlah /etc/passwd fail yang mempunyai kolon (:)
sebagai pembatas. Anda kini boleh memecah setiap perkataan dari garis dan menyimpannya dalam pemboleh ubah yang berasingan.
Dalam contoh di bawah, saya berpecah /etc/passwd fail dengan kolon sebagai pemisah saya dan menyimpan setiap perpecahan ke dalam pembolehubah yang berbeza.
sementara ifs = ":" Baca A B C D E F G DO ECHO $ A echo $ b echo $ c echo $ d echo $ e echo $ f echo $ g yang selesai selesai < /etc/passwdPemisah medan dalaman
Saya memaparkan hanya satu baris yang berpecah dalam tangkapan skrin di atas memandangkan saiz tangkapan skrin.
Garis kosong di Linux
Garis kosong tidak diabaikan semasa anda gelung melalui kandungan fail. Untuk menunjukkan ini saya telah membuat fail sampel dengan kandungan di bawah. Terdapat 4 baris dan beberapa garisan kosong, ruang putih terkemuka, mengangkut ruang putih, watak tab dalam baris 2, dan beberapa watak melarikan diri (\ n dan \ t).
Fail dengan garis kosongSemasa membaca lread lakukan echo $ lread selesai < testfileGaris kosong tidak diabaikan
Lihat hasilnya, garis kosong tidak diabaikan. Juga, perkara yang menarik untuk diperhatikan ialah bagaimana ruang putih dipangkas oleh Baca perintah. Cara mudah untuk mengabaikan baris kosong apabila membaca kandungan fail adalah dengan menggunakan pengendali ujian dengan -z
bendera yang memeriksa jika panjang tali adalah sifar. Sekarang mari kita ulangi contoh yang sama tetapi kali ini dengan pengendali ujian.
Semasa membaca lread lakukan jika [[ ! -z $ lread]] kemudian echo $ lread fi selesai < testfileGaris kosong diabaikan
Sekarang dari output, anda dapat melihat garis kosong diabaikan.
Watak melarikan diri
Melarikan diri watak seperti \ n
, \ t
, \ c
tidak akan dicetak semasa membaca fail. Untuk menunjukkan ini saya menggunakan fail sampel yang sama yang mempunyai sedikit watak melarikan diri.
Semasa membaca lread lakukan echo $ lread selesai < testfileWatak Melarikan diri di Linux
Anda dapat melihat dari watak melarikan diri output telah kehilangan makna dan hanya n dan t dicetak bukan \ n
dan \ t
. Anda boleh menggunakan -r
untuk mengelakkan tafsiran backslash.
Walaupun membaca -r lread lakukan echo $ lread selesai < testfileMencegah tafsiran backslash
Itu sahaja untuk artikel ini. Kami ingin mendengar dari anda jika ada maklum balas atau petua. Maklum balas anda adalah yang membantu kami membuat kandungan yang lebih baik. Terus membaca dan terus menyokong.
- « LFCA Belajar Perintah Pengurusan Fail Asas di Linux - Bahagian 2
- Cara yang berbeza untuk menggunakan arahan lajur di linux »