9 Contoh for Loops di Linux Bash Script

Diterbitkan: 2022-08-19
Baris perintah Linux pada laptop dengan latar belakang biru.
fatmawati achmad zaenuri/Shutterstock.com

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.

9 Contoh Bash Script untuk Memulai Anda di Linux
9 Contoh Skrip Bash TERKAIT untuk Memulai di Linux

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 

a untuk loop menghitung dari 1 hingga 5

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 

a for loop menghitung melalui daftar angka yang tidak berurutan

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 

a for loop menghitung melalui daftar angka yang tidak disortir

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 

Membuat skrip dapat dieksekusi dengan chmod

Mari kita jalankan skripnya.

 ./daftar-kata.sh 

A for loop bekerja melalui daftar kata

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 

A untuk loop menggunakan rentang angka

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 

A for loop menggunakan langkah iterator 4

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 

A for loop menggunakan daftar nama file

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 

A for loop menggunakan pola file *.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 

A for loop mengambil pola file sebagai parameter baris perintah

Kami juga dapat melewati lebih dari satu pola pada satu waktu.

 ./namafile3.sh n*.sh .bashrc 

A for loop mengambil pola file dan parameter baris perintah nama file

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 

Sebuah tiga-istilah atau C-seperti untuk loop

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 

Seperti C untuk loop menghitung mundur

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 

Perulangan for seperti C tak terhingga

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 

A for loop menggunakan array kata

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 

A for loop melewatkan entri dalam larik kata karena perintah continue

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 

A for loop meninggalkan pemrosesan lebih lanjut karena perintah break

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.

Apa Itu Kamus Bash di Linux, dan Bagaimana Cara Menggunakannya?
TERKAIT Apa Itu Kamus Bash di Linux, dan Bagaimana Anda Menggunakannya?

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 

Menggunakan for loop untuk mengekstrak item dari array asosiatif

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 

Menggunakan for loop untuk mengulangi output dari dua perintah yang disalurkan

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.

Cara Memproses File Baris demi Baris dalam Skrip Bash Linux
TERKAIT Cara Memproses File Baris demi Baris dalam Script Bash Linux

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.