Artikel ini akan menjelaskan mengenai bagaimana cara untuk melakukan LOOP alias menjalankan sekumpulan command secara berulang-ulang dengan kondisi tertentu.
FOR loop
FOR loop pada shell Bash sifatnya sama seperti foreach pada keumuman bahasa pemrograman. Yaitu melakukan perulangan tanpa adanya counter, alias suatu perulangan tidaklah diketahui ke-berapa perulangan tersebut sedang terjadi. Atau sederhananya tidak ada indeks pada setiap perulangan.
Namun dengan pengecualian jika FOR loop tersebut dideklarasikan menggunakan indeks. Akan tiba contohnya pada penjelasan di bawah.
Struktur dasar
Variabel $var
dibawah ini adalah variabel yang berisi string-string yang dipisahkan dengan spasi.
|
|
Sebenarnya, sintaks in VARIABEL
adalah opsional. Jika sintaks tersebut tidak disebutkan, maka Bash akan mengambil dari Positional Argument.
|
|
Pada bagian in
juga bisa diberikan suatu command yang outputnya akan digunakan untuk looping.
|
|
Model bahasa C (C-Style FOR loop)
C-style loop sesuai dengan namanya, yaitu model FOR loop menggunakan model bahasa pemrograman C.
|
|
WHILE loop
Sama seperti keumuman bahasa pemrograman, WHILE loop ini akan terus diulang-ulang selama kondisi yang diujikan masih benar.
WHILE loop ini memberikan fleksibilitas yang lebih daripada FOR loop. Ketika FOR loop hanya terbatas pada tiap yang argumen diberikan, WHILE loop bisa digunakan lebih dari itu.
Struktur dasar
Agak mirip secara struktur, yaitu dimulai dari while kondisi; do ...; done
. Setiap loop pada bash, pasti ada sintaks do .. done
.
|
|
Looping terus-menerus
Karena sifat WHILE loop ini yang akan terus melakukan perulangan ketika kondisi yang diujikan bernilai benar, maka jika ia diberikan sintaks yang selalu bernilai benar seperti true misalnya, maka akan dihasilkan infinite loop.
|
|
Mengulang command terus-menerus
Sebagaimana yang telah dicontohkan pada bagian sebelumnya (looping terus-menerus), sebenarnya sintaks true dan : merupakan sebuah command yang valid jika dijalankan pada shell secara langsung. Sehingga, WHILE loop bisa diletakkan padanya suatu command yang memiliki exit status. Jika exit status command tersebut adalah non-zero alias tidak bermasalah, maka loop akan berlanjut.
|
|
Membaca file, variabel atau output command dengan WHILE loop
WHILE loop bisa dimanfaatkan untuk membaca baris tiap baris dari sebuah file atau output suatu command atau pipeline. Ini berguna jika kita hendak memproses tiap baris pada output tersebut.
Loop dari pipe
Melakukan piping semacam dibawah ini bisa dilakukan selama didalam loop tidak ada proses penyematan variabel. Karena, pipeline berlangsung didalam subshell sehingga, variabel yang sama, yang dipanggil dari dalam loop ini, adalah variabel yang berbeda. Namun, jika aktifitas loop tidak ada kegiatan mengisi isi variabel (yang sudah dideklarasi sebelum pipe ini) dan sebagainya, maka loop ini bisa dipakai.
|
|
Loop dengan input dari file, variabel atau process substitution
Process Substitution memungkinkan kita untuk menginputkan serangkaian command (pipeline).
Dalam kasus loop ini, WHILE mendapat input tidak dari pipe sehingga semua yang terjadi didalamnya, tidak berada di dalam subshell. Yang artinya, semua penyematan variabel di dalam loop, akan benar-benar tersematkan.
|
|
UNTIL loop
UNTIL loop adalah kebalikan dari WHILE loop. Yaitu melakukan perulangan selama kondisi yang diberikan tetap bernilai salah.
Struktur dasar
Sama dengan WHILE loop, cukup menggantinya dengan UNTIL
|
|
Contoh penggunaan dalam script:
|
|
Sintaks break dan continue
Sintaks break dan continue tidak terbatas hanya pada WHILE loop saja, tetapi juga bisa digunakan pada UNTIL dan FOR loop juga. Kedua sintaks ini berfungsi untuk mengatur alur suatu loop, baik untuk menghentikan loop (keluar dari loop) atau meloncati suatu iterasi.
Break
Dalam infinite loop, perlu ada kondisi yang dimana dia akan membuat loop tersebut berhenti. Untuk dapat keluar dari loop, gunakan sintaks break. Contoh untuk ini sudah dijelaskan pada bagian WHILE loop sebelumnya. Atau misal pada kasus script interaktif seperti contoh berikut:
|
|
Continue
Sedangkan jika dalam suatu loop ada sebuah kondisi yang jika kondisi tersebut terpenuhi, maka perputaran saat itu diloncati, maka hal tersebut bisa dilakukan dengan sintaks continue.
|
|
Loop non-standar
Pipeline jika dirangkai sedemikian rupa juga akan bisa melakukan loop. Contohnya adalah gabungan dari seq
atau Bash brace expansion yang dipipe kepada xargs
seperti contoh berikut ini:
|
|
Mencari bilangan genap dari 1 sampai 100 :
|
|
Semoga bermanfaat, insyaAllah.