9 Contoh for Loops di Linux Bash Script
Diterbitkan: 2022-08-19
Bash for
loop yang serbaguna melakukan lebih dari sekadar mengulang beberapa kali. Kami menjelaskan banyak variannya sehingga Anda dapat menggunakannya dengan sukses di skrip Linux Anda sendiri.
untuk loop
Semua bahasa scripting dan pemrograman memiliki beberapa cara untuk menangani loop. Loop adalah bagian dari kode yang ingin Anda jalankan berulang kali. Daripada mengetikkan rangkaian instruksi yang sama ke dalam skrip Anda, lagi dan lagi, sebuah loop akan mengulangi satu bagian kode berulang-ulang untuk Anda.
Bash for
loop sangat fleksibel. Itu dapat bekerja dengan angka, kata, array, variabel baris perintah, atau output dari perintah lain. Ini digunakan di header loop. Header menentukan apa yang bekerja dengan loop — angka atau string, misalnya — dan apa kondisi akhirnya yang akan menghentikan looping.
Tubuh loop berisi kode yang ingin Anda ulangi. Ini memegang apa yang Anda ingin loop lakukan . Badan loop dapat berisi perintah skrip yang valid.
Variabel yang disebut penghitung loop atau iterator digunakan untuk melangkah melalui rentang nilai atau daftar item data. Untuk setiap loop, iterator mengambil nilai angka berikutnya, string, atau tipe data apa pun yang diulangi oleh loop. Hal ini memungkinkan loop untuk bekerja dengan nilai masing-masing item data secara bergantian, atau bahkan dalam beberapa kasus untuk memanipulasi item data itu sendiri.
Sederhana untuk Loop
Jika Anda ingin menulis for loop pertama Anda, contoh sederhana ini akan membantu Anda memulai.
untuk Loop menggunakan Daftar Numerik
Anda dapat menjalankan for
loop pada baris perintah. Perintah ini membuat dan mengeksekusi loop for
sederhana. Iterator adalah variabel yang disebut i
. Kami akan menetapkan i
untuk menjadi masing-masing nilai dalam daftar angka, secara bergantian. Tubuh loop akan mencetak nilai itu ke jendela terminal. Kondisi yang mengakhiri loop ini adalah ketika i
mengulangi seluruh daftar angka.
untuk saya dalam 1 2 3 4 5; lakukan echo $i; selesai
Penting untuk dicatat di sini bahwa variabel i
bertambah satu setiap kali loop berputar, tapi itu karena daftar angka naik satu setiap kali.
Daftar angka ini dimulai dari 3 dan naik dalam langkah dua, lalu melompat ke 44.
untuk saya dalam 3 5 7 9 11 44; lakukan echo $i; selesai
Tidak ada bedanya dengan for
loop. Itu dimulai di salah satu ujung daftar dan menggunakan setiap nilai secara bergantian, sampai semua nilai dalam daftar telah digunakan.
Angka-angka juga tidak perlu dalam urutan menaik. Mereka bisa dalam urutan apa pun.
untuk i dalam 3 43 44 11 9; lakukan echo $i; selesai
untuk Loop Menggunakan Daftar Kata
Kita dapat dengan mudah melakukan hal yang sama dengan kata-kata. Salin teks skrip ke editor dan simpan sebagai "word-list.sh."
#!/bin/bash untuk kata dalam Ini adalah urutan kata-kata melakukan gema $kata selesai
Anda harus menggunakan chmod
untuk membuat skrip dapat dieksekusi, dan skrip lain yang Anda salin dari artikel ini. Ganti saja nama skrip setiap kali Anda menggunakan perintah chmod
.
chmod +x daftar kata.sh
Mari kita jalankan skripnya.
./daftar-kata.sh
Seperti halnya dengan angka, iterator—dalam contoh ini, word
variabel—bekerja melalui daftar item data hingga mencapai akhir daftar. Badan loop mengakses nilai dalam variabel word
sehingga setiap kata dalam daftar akan diproses.
untuk Loop dengan Rentang Angka
Jika Anda ingin perulangan for
berjalan 100 kali, akan sangat melelahkan jika harus mengetikkan urutan 100 angka di header perulangan. Rentang angka memungkinkan Anda menentukan angka pertama dan terakhir saja.
Skrip ini adalah "number-range.sh."
#!/bin/bash untuk saya di {1..10} melakukan echo "Loop berputar:" $i selesai
Rentang angka didefinisikan dalam tanda kurung kurawal “ {}
” dengan dua titik “ ..
” yang memisahkan angka yang memulai dan mengakhiri rentang. Pastikan Anda tidak menyertakan spasi apa pun dalam definisi rentang.
Beginilah cara menjalankannya:
./angka-angka.sh
Anda dapat memasukkan angka lain yang menentukan ukuran langkah yang harus digunakan iterator untuk menelusuri angka-angka dalam rentang. Skrip ini, "number-range2.sh" akan menggunakan rentang 0 hingga 32, dan ukuran langkah 4.
#!/bin/bash untuk saya di {0..32.4} melakukan echo "Loop berputar:" $i selesai
Iterator melangkah melalui rentang angka dalam lompatan empat.
./angka-angka2.sh
untuk Loop Menggunakan Nama File
Karena kita bisa memproses daftar kata, kita bisa membuat skrip kita bekerja dengan nama file. Skrip ini disebut "nama file.sh."
#!/bin/bash untuk file di word-list.sh number-range.sh number-range2.sh nama file.sh melakukan ls -lh "$file" selesai
Akan sangat tidak ada gunanya memiliki skrip yang hanya melakukan apa yang dapat dilakukan ls
, tetapi skrip ini menunjukkan cara mengakses nama file di dalam badan loop.
./nama file.sh
Dengan cara yang mirip dengan menggunakan rentang angka, kita dapat menggunakan pola file di header loop untuk menentukan file yang ingin kita proses. Ini menghindari banyak pengetikan dan berarti kita tidak perlu mengetahui terlebih dahulu nama-nama file.
Skrip ini disebut "nama file2.sh." Kami telah mengganti daftar nama file dengan pola nama file "*.sh" untuk memiliki laporan skrip pada semua file skrip di direktori saat ini.
#!/bin/bash untuk file dalam *.sh melakukan ls -lh "$file" selesai
Berikut outputnya.
./namafile2.sh
untuk 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 "nama file3.sh."
#!/bin/bash untuk file di $* melakukan ls -lh "$file" selesai
Kami akan meminta nama file yang dimulai dengan "n" dan memiliki ekstensi SH.
./namafile3.sh n*.sh
Kami juga dapat melewati lebih dari satu pola pada satu waktu.
./namafile3.sh n*.sh .bashrc

file
variabel iterator mengambil nilai dari setiap parameter baris perintah. Pola nama file diperluas, dan semua nama file diproses di badan loop.
TERKAIT: Cara Bekerja dengan Variabel di Bash
C-seperti untuk Loops
Bash mendukung tiga istilah klasik untuk loop, seperti yang ditemukan dalam bahasa pemrograman C. Mereka disebut tiga istilah untuk loop karena ada tiga istilah di header loop.
- Nilai awal dari iterator loop.
- Tes untuk apakah loop berlanjut atau berakhir.
- Incrementing—atau decrementing—dari iterator.
Skrip ini adalah "c-like.sh."
Iterator I
diatur ke 1 di awal loop, dan loop akan berjalan selama pernyataan ” i<=10
” benar. Segera setelah i
mencapai 11, for
loop akan berhenti. Iterator ditingkatkan satu, setiap putaran loop.
#!/bin/bash untuk (( i=1; i<=10; i++ )) melakukan echo "Nomor lingkaran:" $i selesai
Mari kita jalankan skrip ini.
./c-like.sh
Perulangan for
seperti C memungkinkan pembuatan perulangan for
dengan mudah yang memiliki persyaratan yang sedikit aneh. Loop ini dimulai pada 15, dan menghitung mundur dalam langkah 3. Ini adalah "c-like2.sh"
#!/bin/bash untuk (( i=15; i>0; i-=3 )) melakukan echo "Nomor lingkaran:" $i selesai
Ketika kita menjalankannya, itu harus melompat mundur dalam langkah tiga.
./c-like2.sh
Tak Terbatas untuk Loop
Anda juga dapat menggunakan format for
loop ini untuk membuat infinite loop. Yang perlu Anda lakukan adalah menghapus semua elemen dari header loop, seperti ini. Ini adalah "tak terbatas.sh."
#!/bin/bash untuk (( ; ; )) melakukan echo "Tekan Ctrl+C untuk berhenti..." tidur 1 selesai
Anda harus menekan Ctrl+C untuk menghentikan loop.
./tak terbatas.sh
untuk Loop Menggunakan Word Array
Kita dapat dengan mudah mengulangi 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/bash distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") untuk distro di $distribusi melakukan echo $distro selesai
Semua distribusi terdaftar untuk kami.
./word-array.sh
Perintah lanjutan
Jika Anda ingin loop melangkahi entri tertentu, uji apakah iterator cocok dengan entri itu dan gunakan perintah continue
. Perintah continue
mengabaikan putaran 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 array "Arch" tetapi memproses semua anggota array lainnya.
#!/bin/bash distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") untuk distro di $distribusi melakukan if [[ "$distro" == "Arch" ]] ; kemudian melanjutkan fi echo $distro selesai
"Arch" tidak muncul di jendela terminal.
./word-array2.sh
Perintah istirahat
Perintah break
keluar dari loop dan mencegah pemrosesan lagi.
Ini adalah "word-array3.sh." Sama seperti script sebelumnya dengan continue
diganti dengan break
.
#!/bin/bash distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") untuk distro di $distribusi melakukan if [[ "$distro" == "Arch" ]] ; kemudian merusak fi echo $distro selesai
Ketika iterator berisi "Arch", for loop meninggalkan pemrosesan lagi.
./word-array3.sh
untuk Loop Menggunakan Array Asosiatif
Di 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 mengulangi melalui array asosiatif menggunakan for
loop. Skrip ini adalah “associative.sh.” Ini mendefinisikan array asosiatif dengan empat entri di dalamnya, satu untuk masing-masing "anjing", "kucing", "robin", dan "manusia." Ini adalah kuncinya. Nilainya adalah (default) jumlah kaki yang mereka miliki.
#!/bin/bash mendeklarasikan -A hewan=( [anjing]=Berkaki empat [kucing]=Berkaki empat [robin]=Berkaki dua [manusia]=Berkaki dua ) untuk kaki di ${!animals[@]} melakukan if [ ${animals[$kaki]} == "Berkaki dua" ]; kemudian gema ${kaki} fi selesai
Iterator disebut legs
. Perhatikan bahwa header loop berisi tanda “ !
” tanda seru. Ini tidak bertindak sebagai operator NOT logis, ini adalah bagian dari sintaks array asosiatif. Diperlukan untuk mencari melalui array.
Tubuh loop melakukan tes perbandingan string. Jika nilai anggota array adalah “Two-legged”, nilai kunci akan dicetak ke jendela terminal. Saat kami menjalankannya, skrip mencetak makhluk berkaki dua itu.
./associative.sh
Iterasi Atas output Perintah
Jika Anda memiliki perintah atau urutan perintah yang menghasilkan daftar sesuatu, seperti nama file, Anda dapat mengulanginya dengan for
loop. Anda perlu berhati-hati terhadap ekspansi 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 mereka.
#!/bin/bash untuk saya di $(ls *.sh | sort); melakukan echo $(wc $i) selesai
Ketika kami menjalankannya, kami mendapatkan statistik untuk setiap file, dengan file yang terdaftar dalam urutan abjad.
./command.sh
Yang Menyilaukan untuk Loop
for
loop adalah alat skrip yang serbaguna dan mudah dipahami. Tetapi sefleksibel itu, jangan lupa bahwa loop lain ada karena suatu alasan. Jangan terpukau dengan berpikir bahwa loop for
adalah semua yang Anda perlukan.
Perulangan while
, misalnya, jauh lebih cocok untuk hal-hal tertentu daripada perulangan for
, seperti membaca baris dari file.
Menulis skrip yang baik berarti menggunakan alat yang paling cocok untuk tugas yang ada. for
loop adalah alat yang hebat untuk dimiliki di kotak peralatan trik Anda.