Semua yang Perlu Anda Ketahui Tentang Bash For Loops di Linux

Semua yang Perlu Anda Ketahui Tentang Bash For Loops di Linux

Skrip Bash adalah cara yang sangat efisien untuk mengotomatisasi tugas, terutama yang memanfaatkan program lain yang ada. Otomatisasi ini sering membutuhkan pengulangan operasi serupa beberapa kali, di mana tepatnya: untuk lingkaran datang dengan sendirinya.





Administrator sistem Linux dan Mac biasanya akrab dengan skrip melalui terminal, tetapi bahkan pengguna Windows dapat ikut serta beraksi dengan Subsistem Windows untuk Linux .





Bagaimana Skrip Bash Bekerja

Skrip bash hanyalah file teks biasa yang berisi serangkaian perintah yang dapat dibaca dan dijalankan oleh shell bash. Bash adalah shell default di macOS pra-Catalina, dan sebagian besar distribusi Linux.





Jika Anda belum pernah bekerja dengan skrip shell sebelumnya, Anda harus mulai dengan kasus paling sederhana. Ini akan memungkinkan Anda untuk mempraktikkan konsep-konsep kunci termasuk pembuatan skrip dan eksekusinya.

Pertama, buat file berikut di lokasi yang nyaman (idealnya, buka terminal dan navigasikan ke direktori yang diinginkan terlebih dahulu):



#!/bin/bash
echo 'Hello, World'

Baris pertama memberi tahu apa pun yang menjalankan program ini cara menjalankannya (yaitu menggunakan juru bahasa bash). Yang kedua hanyalah perintah seperti yang lain yang mungkin Anda masukkan di baris perintah. Simpan file itu sebagai hello_world.sh , kemudian:

$ chmod +x hello_world.sh
$ ./hello_world.sh

NS chmod perintah pada baris pertama membuat file dapat dieksekusi, artinya dapat dijalankan dengan mengetikkan namanya, seperti pada baris kedua.





Jika Anda melihat kata Halo, Dunia muncul tercetak pada baris di terminal Anda, maka semuanya berfungsi sesuai kebutuhan.

Cara Kerja Loop

Dalam pemrograman umum, ada dua jenis utama perulangan for: numerik dan untuk setiap . Tipe numerik secara tradisional adalah yang paling umum, tetapi dalam penggunaan bash, biasanya sebaliknya.





Numerik untuk loop biasanya fokus pada satu bilangan bulat yang menentukan berapa banyak iterasi yang akan dilakukan, misalnya:

for (i = 0; i <100; i++) {
/* statements to execute repeatedly */
}

Ini adalah perulangan for yang terlihat familier yang akan berulang tepat 100 kali, kecuali i diubah di dalam perulangan, atau pernyataan lain menyebabkan eksekusi perulangan for terhenti.

Loop foreach, sebaliknya, cenderung beroperasi pada struktur seperti daftar atau larik, dan beralih untuk setiap item dalam koleksi itu:

people = [ 'Peter', 'Paul', 'Mary' ]
foreach (people as person) {
if (person == 'Paul') {
...
}
}

Beberapa bahasa menggunakan sintaks yang sedikit berbeda yang menukar urutan koleksi dan item:

people = [ 'Peter', 'Paul', 'Mary' ]
for (person in people) {
if (person == 'Paul') {
...
}
}

Untuk dalam Loop

Di bash, foreach—atau untuk di —loop lebih umum. Sintaks dasarnya adalah, cukup:

for arg in [list]
do
/* statements to execute repeatedly */
/* the value of arg can be obtained using $arg */
done

Misalnya, untuk beralih melalui tiga file yang dinamai secara eksplisit:

menghubungkan iphone ke tv dengan usb
for file in one.c two.c three.c
do
ls '$file'
done

Jika file tersebut ada di direktori saat ini, output dari skrip ini adalah:

one.c
two.c
three.c

Alih-alih satu set file tetap, daftar dapat diperoleh melalui pola glob (satu termasuk wildcard – karakter khusus yang mewakili karakter lain). Dalam contoh berikut, for loop berulang di semua file (di direktori saat ini) yang namanya diakhiri dengan '.xml':

for file in *.xml
do
ls -l '$file'
done

Berikut beberapa contoh output:

$ -rw-r--r-- 1 bobby staff 2436 3 Nov 2019 feed.xml
$ -rw-r--r-- 1 bobby staff 6447 27 Oct 16:24 sitemap.xml

Ini mungkin terlihat seperti cara yang bertele-tele:

$ ls -l *.xml

Tetapi ada perbedaan yang signifikan: loop for mengeksekusi ls program 2 kali terpisah, dengan satu nama file diteruskan ke sana setiap kali. Dalam contoh ls terpisah, pola glob (*.xml) mencocokkan nama file terlebih dahulu dan kemudian mengirimkan semuanya, sebagai parameter baris perintah individual, ke satu instance ls .

Berikut adalah contoh yang menggunakan toilet (jumlah kata) program untuk membuat perbedaan lebih jelas:

$ wc -l *.xml
44 feed.xml
231 sitemap.xml
275 total

NS toilet program menghitung jumlah baris di setiap file secara terpisah, lalu mencetak jumlah total di semua file tersebut. Sebaliknya, jika toilet beroperasi dalam for loop:

for file in *.xml
do
wc -l $file
done

Anda masih akan melihat jumlah untuk setiap file:

44 feed.xml
231 sitemap.xml

Tetapi tidak ada total ringkasan keseluruhan karena toilet dijalankan secara terpisah, setiap kali loop berulang.

Ketika Daftar Bukan Daftar

Ada kesalahan yang sangat mudah dan umum ketika berhadapan dengan for loop, karena cara bash menangani argumen/string yang dikutip. Perulangan melalui daftar file harus dilakukan seperti ini:

for file in one.c two.c

Tidak seperti ini:

for file in 'one.c two.c'

Contoh kedua menyertakan nama file dalam tanda kutip ganda yang menghasilkan daftar hanya dengan satu parameter; for loop hanya akan dijalankan satu kali. Masalah ini dapat dihindari dengan menggunakan variabel dalam kasus seperti ini:

FILES='one.c two.c'
for file in $FILES
do
...
done

Perhatikan bahwa deklarasi variabel itu sendiri perlu menyertakan nilainya dalam tanda kutip ganda!

mbr atau gpt untuk ssd windows 10

Untuk Tanpa Daftar

Tanpa iterasi, for loop beroperasi pada argumen baris perintah apa pun yang diberikan ke skrip saat dipanggil. Misalnya, jika Anda memiliki skrip bernama args.sh berisi sebagai berikut:

#!/bin/sh
for a
do
echo $a
done

Kemudian menjalankan args.sh akan memberi Anda yang berikut:

$ ./args.sh one two three
one
two
three

Bash mengenali kasus ini dan memperlakukannya untuk melakukan sebagai setara dengan untuk $@ lakukan di mana $@ adalah variabel khusus yang mewakili argumen baris perintah.

Meniru Numerik Tradisional Untuk Loop

Skrip Bash sering berurusan dengan daftar file atau baris output dari perintah lain, sehingga perulangan for in adalah umum. Namun, operasi gaya-c tradisional masih didukung:

for (( i=1; i<=5; i++ ))
do
echo $i
done

Ini adalah bentuk klasik dengan tiga bagian di mana:

  1. sebuah variabel diinisialisasi (i=1) ketika loop pertama kali ditemui
  2. loop berlanjut selama kondisi (i<=5) is true
  3. setiap kali di sekitar loop, variabel bertambah (i++)

Pengulangan antara dua nilai adalah persyaratan yang cukup umum sehingga ada alternatif yang lebih pendek dan tidak terlalu membingungkan:

for i in {1..5}
do
echo $i
done

Ekspansi brace yang terjadi secara efektif menerjemahkan loop for di atas menjadi:

for i in 1 2 3 4

Kontrol Loop yang Lebih Baik Dengan Break and Continue

Untuk loop yang lebih kompleks sering kali membutuhkan cara untuk keluar lebih awal atau segera memulai ulang loop utama dengan nilai berikutnya secara bergantian. Untuk melakukannya, bash meminjam pernyataan break dan continue yang umum dalam bahasa pemrograman lain. Berikut adalah contoh yang menggunakan keduanya untuk menemukan file pertama yang panjangnya lebih dari 100 karakter:

#!/bin/bash
for file in *
do
if [ ! -f '$file' ]
then
echo '$file is not a file'
continue
fi
num_chars=$(wc -c <'$file')
echo $file is '$num_chars characters long'
if [ $num_chars -gt 100 ]
then
echo 'Found $file'
break
fi
done

For loop di sini beroperasi pada semua file di direktori saat ini. Jika file tersebut bukan file biasa (misalnya jika itu adalah direktori), pernyataan continue digunakan untuk memulai ulang loop dengan file berikutnya secara bergantian. Jika itu adalah file biasa, blok kondisional kedua akan menentukan apakah itu berisi lebih dari 100 karakter. Jika demikian, pernyataan break digunakan untuk segera meninggalkan perulangan for (dan mencapai akhir skrip).

Kesimpulan

Skrip bash adalah file yang berisi serangkaian instruksi yang dapat dieksekusi. A for loop memungkinkan bagian dari skrip untuk diulang berkali-kali. Dengan penggunaan variabel, perintah eksternal, dan pernyataan break and continue, skrip bash dapat menerapkan logika yang lebih kompleks dan melakukan berbagai tugas.

Membagikan Membagikan Menciak Surel Apakah Layak Mengupgrade ke Windows 11?

Windows telah didesain ulang. Tetapi apakah itu cukup untuk meyakinkan Anda untuk beralih dari Windows 10 ke Windows 11?

Baca Selanjutnya
Topik-topik yang berkaitan
  • Pemrograman
  • Linux
Tentang Penulis Bobby Jack(58 Artikel Diterbitkan)

Bobby adalah penggemar teknologi yang bekerja sebagai pengembang perangkat lunak selama hampir dua dekade. Dia bersemangat tentang game, bekerja sebagai Editor Ulasan di Majalah Switch Player, dan mendalami semua aspek penerbitan online & pengembangan web.

More From Bobby Jack

Berlangganan newsletter kami

Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!

Klik di sini untuk berlangganan