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 $linedonePada contoh di atas,
test.txt
file diarahkan kewhile
loop danread
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 keduanyaawk
dansed
untuk membersihkan baris kosong sebelum mengulangnya menggunakanwhile
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.txtSeperti 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,ChelseaPada 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"doneCONTOH 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 denganbreak
perintah.$ NUM=5sementara [[ $NUM -ne 0 ]]lakukan printf "Nilai NUM =$NUM \n" jika [[ $NUM -eq 3 ]] lalu break fi ((--NUM))doneKata 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" selesai2. Sampai Putaran
until
loop adalah kebalikan dariwhile
lingkaran.while
loop mengevaluasi kondisi benar untuk mengeksekusi blok kode danuntil
loop mengevaluasi kondisi menjadi false untuk loop yang akan dieksekusi.Sintaksnya sama dengan
while
loop tetapi alih-alih kata kunciwhile
,until
akan digunakan.sampai [[ kondisi ]]lakukan Command 1 Command 2 .... Command 3doneDari contoh di bawah ini, Anda dapat melihat
until
loop mengevaluasi variabelNUM
menjadi lebih besar dari sama dengan lima. Salah karenaNUM
disetel ke nol dan akan bertambah pada iterasi berikutnya menggunakan((++NUM))
. Jadi ketikaNUM
sama dengan lima kondisi dievaluasi benar danuntil
loop akan berhenti dieksekusi.$ NUM=0$ sampai [[ $NUM -ge 5 ]]lakukan echo $NUM ((++NUM))selesaiUntuk membuat loop tak terbatas, Anda dapat menggunakan kata kunci "false" .
$ NUM=0$ sampai falsedo echo $NUM ((++NUM))selesaiUntuk mengontrol aliran loop, Anda dapat menggunakan
break
dancontinue
kata kunci seperti yang ditunjukkan padawhile
lingkaran di atas.Kesimpulan
Dalam artikel ini, kita telah melihat cara menggunakan
while
loop danuntil
loop dalam skrip bash.Until
loop paling jarang digunakan dibandingkan denganfor
danwhile
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