Berbagai cara untuk membaca file dalam skrip bash menggunakan saat loop

Berbagai cara untuk membaca file dalam skrip bash menggunakan saat loop

Artikel ini semua tentang cara membaca file dalam skrip bash menggunakan a Saat loop. Membaca file adalah operasi umum dalam pemrograman. Anda harus terbiasa dengan metode yang berbeda dan metode mana yang lebih efisien untuk digunakan. Dalam Bash, satu tugas dapat dicapai dalam banyak hal tetapi selalu ada cara yang optimal untuk menyelesaikan tugas dan kita harus mengikutinya.

Sebelum melihat cara membaca konten file menggunakan Saat loop, primer cepat tentang cara kerja loop. Saat loop mengevaluasi suatu kondisi dan berulang kali atas satu set kode yang diberikan saat kondisi tersebut benar.

Sedangkan [kondisi] melakukan blok kode selesai 

Ayo Hancurkan Saat loop sintaksis.

  • Saat loop harus mulai dengan kata kunci sementara diikuti oleh suatu kondisi.
  • A kondisi harus tertutup di dalam [] atau [[]]. Kondisi harus selalu kembali benar agar loop dieksekusi.
  • Blok kode yang sebenarnya akan ditempatkan di antara Mengerjakan Dan Selesai.
Nomor = 0 sementara [[$ number -le 10]] do echo "Welcome $ number kali" ((angka ++)) selesai 
Saat loop

Ini adalah contoh yang sangat sederhana, di mana lingkaran mengeksekusi sampai NOMOR tidak lebih besar dari 10 dan mencetak pernyataan gema.

Bersama ketika Kami akan menggunakan membaca Perintah untuk membaca konten baris file demi baris. Di bawah ini adalah sintaks bagaimana cara ketika Dan membaca Perintah digabungkan. Sekarang ada berbagai cara untuk meneruskan file sebagai input dan kita akan melihat semuanya.

# Sintaks saat membaca variabel do code selesai 

Piping di Linux

Biasanya kami akan menggunakan perintah CAT untuk melihat konten file dari terminal. Juga, kami akan menyalurkan output dari Perintah kucing ke perintah lain seperti grep, sort, dll.

Demikian pula, kami akan menggunakan Perintah kucing di sini untuk membaca konten file dan menyalurkannya ke a ketika lingkaran. Untuk demonstrasi, saya menggunakan /etc/passwd file tetapi tidak disarankan untuk mengacaukan file ini jadi ambil salinan cadangan file ini dan mainkan jika Anda mau.

Cat /etc /passwd | Saat membaca Lread do Echo $ lread selesai 
Piping di Linux

Mari kita hancurkan apa yang akan terjadi saat kode di atas dikirimkan.

  • kucing /etc /passwd akan membaca isi file dan meneruskannya sebagai input melalui pipa.
  • membaca Perintah membaca setiap baris yang dilewati sebagai input dari perintah CAT dan menyimpannya di Lread variabel.
  • membaca Perintah akan membaca konten file sampai EOL ditafsirkan.

Anda juga dapat menggunakan perintah lain seperti kepala, ekor, dan pipa untuk saat loop.

head -n 5 /etc /passwd | Saat membaca Lread do Echo $ lread selesai 
Perintah kepala

Input pengalihan di Linux

Kami dapat mengarahkan kembali konten file Saat loop Menggunakan operator pengalihan input (<).

Saat membaca Lread do Echo $ lread selesai < /etc/passwd | head -n 5 
Pengalihan input

Anda juga dapat menyimpan nama file ke variabel dan meneruskannya melalui operator pengalihan.

FileName = "/etc/passwd" saat membaca lread do echo $ lread selesai < $FILENAME 
Simpan nama file di variabel

Anda juga dapat meneruskan nama file sebagai argumen untuk skrip Anda.

Saat membaca Lread do Echo $ lread selesai < $1 | head -n 5 
Simpan nama file sebagai argumen

Pemisah bidang internal

Anda dapat bekerja dengan berbagai jenis format file (CSV, txt, Json) dan Anda mungkin ingin membagi konten file berdasarkan pembatas khusus. Dalam hal ini, Anda dapat menggunakan "Pemisah Lapangan Internal (IFS)”Untuk membagi konten file dan menyimpannya dalam variabel.

Izinkan saya mendemonstrasikan cara kerjanya. Lihatlah /etc/passwd file yang memiliki usus besar (:) sebagai pembatas. Anda sekarang dapat membagi setiap kata dari baris dan menyimpannya dalam variabel terpisah.

Dalam contoh di bawah ini, saya berpisah /etc/passwd File dengan usus besar sebagai pemisah saya dan menyimpan setiap perpecahan menjadi variabel yang berbeda.

while ifs = ":" Baca a b c d e f g do echo $ a echo $ b echo $ c echo $ d echo $ e echo $ f echo $ g selesai < /etc/passwd 
Pemisah bidang internal

Saya hanya menampilkan satu garis split pada tangkapan layar di atas mempertimbangkan ukuran tangkapan layar.

Garis kosong di Linux

Garis kosong tidak diabaikan saat Anda lingkaran melalui konten file. Untuk menunjukkan ini, saya telah membuat file sampel dengan konten di bawah ini. Ada 4 baris dan beberapa garis kosong, spasi putih terkemuka, ruang putih tertinggal, karakter tab di baris 2, dan beberapa karakter pelarian (\N Dan \T).

File dengan baris kosong
Saat membaca Lread do Echo $ lread selesai < testfile 
Garis kosong tidak diabaikan

Lihat hasilnya, garis kosong tidak diabaikan. Juga, hal yang menarik untuk dicatat adalah bagaimana ruang putih dipangkas oleh membaca memerintah. Cara sederhana untuk mengabaikan baris kosong saat membaca konten file adalah dengan menggunakan operator uji dengan -z Bendera yang memeriksa apakah panjang string nol. Sekarang mari kita ulangi contoh yang sama tetapi kali ini dengan operator uji.

Saat membaca lread do jika [[ ! -z $ lread]] kemudian gema $ lread fi selesai < testfile 
Garis kosong diabaikan

Sekarang dari output, Anda dapat melihat garis kosong diabaikan.

Escape Character

Escape Character Like \N, \T, \C tidak akan dicetak saat membaca file. Untuk menunjukkan ini, saya menggunakan file sampel yang sama yang memiliki beberapa karakter pelarian.

File dengan karakter Escape
Saat membaca Lread do Echo $ lread selesai < testfile 
Escape Character in Linux

Anda dapat melihat dari output, karakter pelarian telah kehilangan maknanya dan hanya N Dan T dicetak bukannya \N Dan \T. Anda dapat gunakan -R untuk mencegah interpretasi backslash.

Sambil baca -r lread do echo $ lread selesai < testfile 
Mencegah interpretasi backslash

Itu untuk artikel ini. Kami akan senang mendengar kabar dari Anda jika ada umpan balik atau tips. Umpan balik Anda adalah apa yang membantu kami membuat konten yang lebih baik. Terus membaca dan terus mendukung.