Bash for loop adalah alat serba guna yang dapat bekerja dengan angka, kata, array, variabel baris perintah, atau keluaran perintah lainnya. Perulangan for sederhana dapat digunakan dengan daftar numerik atau daftar kata, memungkinkan Anda mengulangi bagian kode untuk setiap nilai dalam daftar. Perulangan for juga dapat digunakan dengan rentang angka, nama file, parameter baris perintah, susunan kata, dan susunan asosiatif, memberikan fleksibilitas dalam tugas pembuatan skrip.
Perulangan Bash for yang serbaguna melakukan lebih dari sekadar perulangan beberapa kali. Kami menjelaskan banyak variannya sehingga Anda dapat menggunakannya dengan sukses di skrip Linux Anda sendiri.
The for Loop
Semua skrip dan bahasa pemrograman memiliki beberapa cara untuk menangani loop. Perulangan adalah bagian kode yang ingin Anda jalankan berulang kali. Daripada mengetikkan serangkaian instruksi yang sama ke dalam skrip Anda, berulang kali, sebuah loop akan mengulangi satu bagian kode berulang kali untuk Anda.
Perulangan Bash for sangat fleksibel. Ini dapat bekerja dengan angka, kata, array, variabel baris perintah, atau output dari perintah lainnya. Ini digunakan di header loop. Header menentukan apa yang sedang dikerjakan oleh loop—angka atau string, misalnya—dan kondisi akhir yang akan menghentikan perulangan.
Badan loop berisi kode yang ingin Anda ulangi. Ini menampung apa yang Anda ingin loop lakukan. Badan perulangan dapat berisi perintah skrip apa pun yang valid.
Variabel yang disebut penghitung perulangan atau iterator digunakan untuk menelusuri rentang nilai atau daftar item data. Untuk setiap loop, iterator mengambil nilai dari angka berikutnya, string, atau tipe data apa pun yang diulangi oleh loop tersebut. Hal ini memungkinkan loop untuk bekerja dengan nilai masing-masing item data secara bergantian, atau bahkan dalam beberapa kasus memanipulasi item data itu sendiri.
Simple for Loops
Jika Anda ingin menulis loop for pertama Anda, contoh sederhana berikut akan diperoleh Anda memulai.
for Loops menggunakan Daftar Numerik
Anda dapat menjalankan loop for pada baris perintah. Perintah ini membuat dan mengeksekusi perulangan for sederhana. Iterator adalah variabel yang disebut i. Kita akan menetapkan i sebagai masing-masing nilai dalam daftar angka, secara bergantian. Badan perulangan akan mencetak nilai itu ke jendela terminal. Kondisi yang mengakhiri perulangan ini adalah ketika i telah melakukan iterasi pada seluruh daftar angka.
untuk i dalam 1 2 3 4 5; lakukan gema $i; selesai
Penting untuk dicatat di sini bahwa variabel i bertambah satu setiap kali putaran berputar, tetapi itu karena daftar angka bertambah satu setiap kali.
Daftar angka ini dimulai dari 3 dan naik dalam langkah dua , lalu sembarang melompat ke 44.
untuk i dalam 3 5 7 9 11 44; lakukan gema $i; selesai
Tidak ada bedanya dengan loop for. Ini dimulai dari salah satu ujung daftar dan menggunakan setiap nilai secara bergantian, hingga semua nilai dalam daftar telah digunakan. Nbsp
Nomornya juga tidak perlu dalam urutan menaik. Mereka bisa dalam urutan apa pun.
untuk saya dalam 3 43 44 11 9; lakukan gema $i; selesai
untuk Loop Menggunakan Daftar Kata
Kita dapat dengan mudah melakukan hal yang sama dengan kata-kata. Salin teks skrip ke dalam editor dan simpan sebagai “word-list.sh.”
#!/bin/bashfor word di Ini adalah rangkaian kata-katado echo $worddone
Anda harus menggunakan chmod agar skrip dapat dieksekusi , dan skrip lain yang Anda salin dari artikel ini. Ganti saja nama skrip setiap kali Anda menggunakan perintah chmod.
chmod +x word-list.sh
Mari kita jalankan skripnya.
./word-list.sh
Sama seperti yang terjadi pada angka, iterator—dalam contoh ini , variabel word—berfungsi menelusuri daftar item data hingga mencapai akhir daftar. Badan perulangan mengakses nilai dalam variabel kata sehingga setiap kata dalam daftar diproses.
untuk Perulangan dengan Rentang Angka
Jika Anda ingin perulangan for dijalankan 100 kali, akan sangat melelahkan jika harus mengetikkan urutan 100 angka di header loop. Rentang angka memungkinkan Anda menentukan angka pertama dan terakhir saja.
Skrip ini adalah “number-range.sh.”
#!/bin/bashfor i in {1..10}do echo”Loop spin:” $idone
Rentang angkanya adalah didefinisikan dalam tanda kurung kurawal “{}” dengan dua titik “..” yang memisahkan angka yang mengawali dan mengakhiri rentang. Pastikan Anda tidak menyertakan spasi apa pun dalam definisi rentang.
Beginilah cara kerjanya:
./number-range.sh
Anda dapat menyertakan nomor lain yang menentukan ukuran langkah yang harus digunakan iterator untuk menelusuri angka-angka dalam rentang tersebut. Skrip ini, “number-range2.sh” akan menggunakan rentang 0 hingga 32, dan ukuran langkah 4.
#!/bin/bashfor i di {0..32..4}do echo”Loop spin: ” $idone
Iterator menelusuri rentang angka dalam lompatan empat.
./number-range2.sh
for Loop Menggunakan Nama File
Karena kita dapat memproses daftar kata, kita dapat membuat skrip kita berfungsi dengan nama file. Skrip ini disebut “filenames.sh.”
#!/bin/bashforfileinword-list.shnumber-range.shnumber-range2.shfilenames.shdo ls -lh “$file”done
Tidak ada gunanya memiliki skrip yang hanya berfungsi apa yang ls dapat lakukan, tetapi ia mendemonstrasikan cara mengakses nama file di dalam badan loop.
./namafile.sh
Dengan cara yang mirip dengan menggunakan rentang angka, kita dapat menggunakan pola file di header loop untuk menentukan file yang ingin kita proses. Hal ini menghindari banyak pengetikan dan berarti kita tidak perlu mengetahui terlebih dahulu nama filenya.
Skrip ini disebut “nama file2.sh.” Kami telah mengganti daftar nama file dengan pola nama file “*.sh” agar skrip melaporkan semua file skrip di direktori saat ini.
#!/bin/bashforfilein *.shdo ls -lh “$file”done
Berikut ini output.
./filenames2.sh
for Loop Menggunakan Parameter Baris Perintah
Kita dapat menambahkan lebih banyak fleksibilitas dengan meneruskan pola nama file pada baris perintah. Variabel $* mewakili semua parameter baris perintah yang diteruskan ke skrip.
Ini adalah “namafile3.sh.”
#!/bin/bashfor file di $*do ls -lh “$file”done
Kami akan meminta nama file yang dimulai dengan “n” dan memiliki ekstensi SH.
./filenames3.sh n*.sh
Kami juga dapat meneruskan lebih dari satu pola sekaligus.
./filenames3.sh n*.sh .bashrc
File variabel iterator mengambil alih nilai masing-masing parameter baris perintah. Pola nama file diperluas, dan semua nama file diproses di badan perulangan. For Loops seperti C
Bash mendukung perulangan for tiga istilah klasik, seperti yang ditemukan dalam bahasa pemrograman C. Mereka disebut perulangan for tiga istilah karena ada tiga istilah di header perulangan.
Nilai awal dari iterator perulangan. Tes apakah perulangan berlanjut atau berakhir. Kenaikan—atau penurunan—dari iterator.
Skrip ini adalah “c-like.sh.”
Iterator I disetel ke 1 pada awal perulangan, dan perulangan akan berjalan selama pernyataan ” i<=10 ” benar. Segera setelah i mencapai 11, perulangan for akan berhenti. Iterator bertambah satu, setiap putaran loop.
#!/bin/bashfor (( i=1; i<=10; i++ ))do echo”Loop number:” $idone
Ayo jalankan skrip ini.
. /c-like.sh
Perulangan for seperti C memungkinkan pembuatan loop for dengan mudah yang memiliki persyaratan sedikit aneh. Perulangan ini dimulai pada 15, dan dihitung mundur dalam langkah 3. Ini adalah “c-like2.sh”
#!/bin/bashfor (( i=15; i>0; i-=3 ))do echo”Loop number:” $idone
Saat kita menjalankannya, ia akan melompat mundur dalam langkah tiga.
./c-like2.sh
Infinite for Loops
Anda juga dapat menggunakan format loop for ini untuk membuat loop tak terbatas. Yang perlu Anda lakukan hanyalah menghapus semua elemen dari header loop, seperti ini. Ini adalah “infinite.sh.”
#!/bin/bashfor (( ; ; ))do echo”Tekan Ctrl+C untuk menghentikan…” sleep 1done
Anda harus menekan Ctrl+C untuk menghentikan loop.
./infinite.sh
for Loop Menggunakan Array Kata
Kita dapat dengan mudah melakukan iterasi melalui array kata. Kita perlu memberikan nama array di header loop, dan iterator akan menelusuri semua entri dalam array. Ini adalah “word-array.sh.”
#!/bin/bashdistributions=(“Ubuntu Fedora Manjaro Arch EndeavourOS Garuda”) untuk distro di $distributionsdo echo $distrodone
Semua distribusi terdaftar untuk kami.
./word-array. sh
Perintah lanjutkan
Jika Anda ingin loop melewati entri tertentu, uji apakah iterator cocok dengan entri itu dan gunakan perintah lanjutkan. Perintah continue mengabaikan perputaran loop saat ini. Ini menambah iterator dan memulai putaran loop berikutnya—dengan asumsi entri yang ingin Anda lewati bukanlah item terakhir dalam daftar.
Ini adalah “word-array2.sh.” Ini melangkahi entri larik “Arch” tetapi memproses semua anggota larik lainnya.
#!/bin/bashdistributions=(“Ubuntu Fedora Manjaro Arch EndeavourOS Garuda”) untuk distro di $distributionsdo if[[ “$distro” == “Arch ” ]] ; lalu lanjutkan fi echo $distrodone
“Arch” tidak muncul di jendela terminal.
./word-array2.sh
Perintah break
Perintah break keluar dari loop dan mencegah pemrosesan lebih lanjut.
Ini adalah “word-array3.sh. ” Sama seperti skrip sebelumnya dengan continue diganti dengan break.
#!/bin/bashdistributions=(“Ubuntu Fedora Manjaro Arch EndeavourOS Garuda”) untuk distro di $distributionsdo if[[ “$distro” == “Arch” ]] ; kemudian break fi echo $distrodone
Ketika iterator berisi “Arch”, loop for mengabaikan pemrosesan lagi.
./word-array3.sh
for Loop Menggunakan Array Asosiatif
Dalam Bash 4 dan yang lebih tinggi, array asosiatif memungkinkan Anda membuat daftar pasangan nilai kunci yang dapat dicari berdasarkan kunci atau nilainya. Karena hubungan dua arah antara kunci dan nilai, mereka juga disebut kamus data.
Kita dapat melakukan iterasi melalui array asosiatif menggunakan for loop. Skrip ini adalah “associative.sh.” Ini mendefinisikan array asosiatif dengan empat entri di dalamnya, satu untuk masing-masing “dog”, “cat”, “robin” , dan “human.” Ini adalah kuncinya. Nilainya adalah (default) jumlah kaki yang dimiliki masing-masing.
#!/bin/bashdeclare -A animal=( [anjing]=Berkaki empat [kucing]=Berkaki empat [robin]=Berkaki dua [manusia] =Berkaki dua )untuk kaki di${!animals[@]}lakukan jika [ ${animals[$legs]} == “Berkaki dua” ]; lalu echo${legs} fidone
Iteratornya disebut Legs . Perhatikan bahwa header loop berisi tanda “!” tanda seru. Ini tidak bertindak sebagai operator logika NOT, ini adalah bagian dari sintaksis array asosiatif. Diperlukan untuk mencari melalui array.
Badan loop melakukan tes perbandingan string. Jika nilai anggota array adalah “Berkaki Dua”, ia akan mencetak nilai kunci ke jendela terminal. Saat kita menjalankannya, skrip mencetak makhluk berkaki dua.
./associative.sh
Iterate Atas keluaran Perintah
Jika Anda memiliki perintah atau urutan perintah yang menghasilkan daftar sesuatu, seperti nama file, Anda dapat mengulanginya dengan perulangan for. Anda harus berhati-hati terhadap perluasan nama file yang tidak terduga, tetapi dalam kasus sederhana tidak masalah.
Skrip ini adalah “command.sh.” ia menggunakan ls dan wc untuk menyediakan daftar nama file skrip yang diurutkan, bersama dengan jumlah baris, kata, dan byte.
#!/bin/bashfor i in $(ls *.sh | sort);do echo $(wc $i)done
Saat kami menjalankannya, kami mendapatkan statistik untuk setiap file, dengan file terdaftar dalam urutan abjad.
./command.sh
The Dazzling for Loop
For loop adalah alat skrip yang serbaguna dan mudah dipahami. Namun sefleksibel apa pun itu, jangan lupa bahwa loop lain ada karena suatu alasan. Jangan terpesona dengan pemikiran bahwa hanya perulangan for yang Anda perlukan.
Terkait: Cara Memproses File Baris demi Baris dalam Skrip Bash Linux
Perulangan while, misalnya, jauh lebih cocok untuk hal-hal tertentu daripada perulangan for , seperti membaca baris dari suatu file.
Menulis skrip yang baik berarti menggunakan alat yang paling sesuai untuk tugas yang ada. Perulangan for adalah alat yang hebat untuk dimiliki di kotak peralatan trik Anda.