GNU/Linux >> Belajar Linux >  >> Linux

Bash Scripting – Sementara Dan Sampai Loop Dijelaskan Dengan Contoh

Ini adalah artikel lanjutan dalam bash loop dimana pada artikel sebelumnya sudah kami jelaskan tentang for loop . Pada artikel ini, kita akan melihat dua loop bash lagi yaitu, while dan until lingkaran.

while loop sebagian besar digunakan ketika Anda harus membaca konten file dan memprosesnya lebih lanjut. Membaca dan menulis ke file adalah operasi umum saat Anda menulis skrip bash. Kita akan melihat cara membaca file menggunakan while lingkaran.

Kami sudah memiliki artikel yang sangat mendetail tentang cara menulis ke file menggunakan operator pengalihan.

  • Pengalihan Bash Dijelaskan Dengan Contoh

Fungsionalitas while loop mirip dengan for lingkaran. for loop mengulangi daftar item dan menjalankan blok kode N beberapa kali. Di sini, di while loop, kondisi dievaluasi terlebih dahulu, dan jika kondisi benar, blok kode akan dieksekusi sampai kondisi dievaluasi salah.

1. Perulangan sementara

Di bawah ini adalah while sintaks lingkaran. Perulangan dimulai dengan "sementara" kata kunci diikuti dengan kondisi yang harus dievaluasi kebenarannya. Antara do dan done blok adalah tempat kode Anda akan ditempatkan yang akan diulang sebanyak N kali.

sementara [[ kondisi ]]lakukan Command 1 Command 2 .... Command 3done

CONTOH 1 - Evaluasi dan ulangi

Lihatlah contoh di bawah ini. Di sini saya telah membuat variabel "NUM=5" dan kondisi saya ($NUM -ne 0 ) adalah, loop akan dijalankan jika variabel NUM tidak sama dengan nol.

$ NUM=5sementara [[ $NUM -ne 0 ]]lakukan printf "Nilai NUM =$NUM \n" ((--NUM))selesai

Anda harus menggunakan penghitung untuk menambah atau mengurangi nilai yang disimpan dalam variabel saat bekerja dengan while loop. Jika tidak, itu akan menjadi infinite loop dan NUM akan selalu diatur ke lima. Di sini saya mengurangi nilai NUM di setiap iterasi dengan menjalankan ((--NUM)) , jadi ketika variabel saya NUM disetel ke nol, loop keluar.

((++NUM)) → Tingkatkan variabel NUM sebanyak 1, mirip dengan menjalankan NUM=$(( $NUM + 1 ))((--NUM)) → Kurangi variabel NUM sebanyak 1, mirip dengan menjalankan NUM=$(( $NUM - 1 ))

CONTOH 2 - Loop tak terbatas

Perulangan tak terbatas adalah di mana kondisi Anda selalu dievaluasi ke true dan perulangan tidak akan pernah keluar.

Untuk membuat loop tak terbatas, Anda dapat menggunakan true . bawaan bash kata kunci. Juga, gunakan "sleep" perintah saat menguji infinite loop yang akan memberi Anda kendali dalam menghentikan skrip, jika tidak, layar Anda akan dibanjiri dengan output pengguliran cepat.

$ NUM=0sementara truedo printf "Nilai NUM =$NUM \n" ((++NUM)) tidur 2selesai

CONTOH 3 - Pemisah bidang internal (IFS)

IFS adalah variabel shell khusus yang memutuskan bagaimana batasan kata Anda ditangani. Secara default, IFS diatur ke spasi, tab, dan karakter baris baru. Buka terminal dan jalankan perintah berikut:

$ var1="foo:bar foo bar"
$ untuk val di $var1do echo $valdone 

Lihatlah outputnya. for loop mengulangi string dan IFS yang memutuskan batas kata dan menganggap ruang sebagai pemisah bidang.

Sekarang jalankan kembali kode di bawah ini. Di sini IFS disetel ke titik dua .

$ var1="foo:bar foo bar"
$ IFS=":"
$ untuk val di $var1do echo $valdone

Dari output di atas, Anda dapat melihat bahwa titik dua pemisah bidang khusus digunakan sebagai batas kata. Anda dapat mengatur IFS kembali ke status default dengan menjalankan unset perintah.

$ unset IFS

CONTOH 4 - Membaca file menggunakan while loop

while loop direkomendasikan ketika Anda ingin membaca file baris demi baris dan memprosesnya.

Buat file baru bernama test.txt menggunakan konten berikut. Ada baris kosong setelah baris 2 untuk menunjukkan perilaku bagaimana baris kosong ditangani.

14:00 Brighton v Leicester14:00 West Ham v Man Utd16:30 Spurs v Chelsea

Kami akan menggunakan read perintah yang menerima masukan dari pengalihan dan menyimpannya dalam variabel bersama dengan operator pengalihan masukan di mana nama file akan diarahkan ke while lingkaran. read perintah akan menggunakan IFS default untuk mengatur batas pemisahan kata.

$ saat membaca linedo echo $linedone   

Pada contoh di atas, test.txt file diarahkan ke while loop dan read perintah membaca baris demi baris dan menyimpannya dalam variabel "baris" dan diproses lebih lanjut dalam loop. Baris kosong tidak dilewati saat Anda mengikuti metode ini dan ini bukanlah perilaku yang mungkin Anda inginkan. Jadi, Anda harus secara eksplisit membuat baris kosong untuk dilewati.

Ada beberapa opsi untuk memangkas baris kosong dari file input. Anda dapat menggunakan sed , awk , dan pernyataan bersyarat, dll. Saya lebih suka menggunakan keduanya awk dan sed untuk membersihkan baris kosong sebelum mengulangnya menggunakan while lingkaran.

# MENGGUNAKAN SED$ sed -i '/^[[:space:]]*$/d' test.txt14:00 Brighton v Leicester14:00 West Ham v Man Utd16:30 Spurs v Chelsea
# MENGGUNAKAN AWK$ awk 'NF' test.txt

Seperti yang terlihat pada contoh sebelumnya, Anda dapat memodifikasi IFS tergantung pada bagaimana Anda ingin membaca file Anda. Misalnya, jika Anda menangani file CSV, pembatas dapat diatur ke koma. Saya telah memodifikasi file input yang sama menjadi dalam format CSV.

14:00,Brighton,Leicester14:00,West Ham,Man Utd16:30,Spurs,Chelsea

Pada contoh di bawah, IFS diatur ke koma (IFS="," ) dan setiap bidang akan disimpan dalam variabel terpisah (waktu, tim1, tim2).

sementara IFS="," baca waktu team1 team2 do echo "$team1 sedang bermain melawan $team2 pada $time"done   

CONTOH 5 - Kontrol aliran loop dengan Break and Continue

Jika Anda telah membaca artikel bash for loop kami, Anda mungkin tahu apa itu break dan lanjutkan digunakan untuk. Baik break dan continue adalah kata kunci bawaan bash yang akan membantu Anda mengontrol aliran loop Anda.

Kata kunci "break" akan sepenuhnya keluar dari loop dan meneruskan kontrol ke perintah berikutnya dalam skrip. Dalam contoh di bawah ini. Ketika NUM sama dengan tiga, loop akan keluar dengan break perintah.

$ NUM=5sementara [[ $NUM -ne 0 ]]lakukan printf "Nilai NUM =$NUM \n" jika [[ $NUM -eq 3 ]] lalu break fi ((--NUM))done  

Kata kunci "lanjutkan" akan melewati iterasi saat ini dan mengembalikan kontrol ke perulangan while dan memulai iterasi berikutnya.

$ NUM=0sementara [[ $NUM -lt 5 ]]lakukan ((++NUM)) if [[ $NUM -eq 3 ]] maka lanjutkan fi printf "Nilai NUM =$NUM \n" selesai  

2. Sampai Putaran

until loop adalah kebalikan dari while lingkaran. while loop mengevaluasi kondisi benar untuk mengeksekusi blok kode dan until loop mengevaluasi kondisi menjadi false untuk loop yang akan dieksekusi.

Sintaksnya sama dengan while loop tetapi alih-alih kata kunci while , until akan digunakan.

sampai [[ kondisi ]]lakukan Command 1 Command 2 .... Command 3done

Dari contoh di bawah ini, Anda dapat melihat until loop mengevaluasi variabel NUM menjadi lebih besar dari sama dengan lima. Salah karena NUM disetel ke nol dan akan bertambah pada iterasi berikutnya menggunakan ((++NUM)) . Jadi ketika NUM sama dengan lima kondisi dievaluasi benar dan until loop akan berhenti dieksekusi.

$ NUM=0
$ sampai [[ $NUM -ge 5 ]]lakukan echo $NUM ((++NUM))selesai

Untuk membuat loop tak terbatas, Anda dapat menggunakan kata kunci "false" .

$ NUM=0
$ sampai falsedo echo $NUM ((++NUM))selesai

Untuk mengontrol aliran loop, Anda dapat menggunakan break dan continue kata kunci seperti yang ditunjukkan pada while lingkaran di atas.

Kesimpulan

Dalam artikel ini, kita telah melihat cara menggunakan while loop dan until loop dalam skrip bash. Until loop paling jarang digunakan dibandingkan dengan for dan while loop tetapi itu untuk memutuskan skrip Anda dan jenis loop apa yang diperlukan. Nyaman dalam menggunakan ketiga loop.

Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberi tahu kami melalui bagian komentar di bawah.

Bacaan terkait:

  • Bash Scripting – Fungsi Dijelaskan Dengan Contoh
  • Bash Scripting – Variabel Dijelaskan Dengan Contoh
  • Perintah Bash Echo Dijelaskan Dengan Contoh Di Linux
  • Tutorial Bash Heredoc Untuk Pemula
  • Cara Mengulang Perintah Sampai Berhasil Di Linux
  • Perbedaan Antara Mendefinisikan Variabel Bash Dengan Dan Tanpa Ekspor

Linux
  1. Contoh Bash For Loop dan While Loop

  2. Menjaga Anda di Loop – Contoh Bash Untuk, Sementara, Sampai Loop

  3. Menggunakan dan di Bash while loop

  1. Panduan Bash For Loop dan Contohnya

  2. Bash sementara Loop

  3. Perintah Head and Tail di Linux Dijelaskan dengan Contoh

  1. Bash sampai Loop

  2. Bash For Loop dengan contoh praktis

  3. Perintah Bash Echo Dijelaskan Dengan Contoh Di Linux