Hati-hati dengan infinite loop!
Kemampuan untuk mengulang adalah fitur yang sangat kuat dari skrip bash. Loop memiliki berbagai kasus penggunaan.
Dalam tutorial ini, Anda akan menjelajahi tiga struktur loop bash yang berbeda. Anda juga akan belajar bagaimana menggunakan loop untuk melintasi elemen array.
Selanjutnya, Anda akan belajar cara menggunakan pernyataan break dan continue untuk mengontrol loop, dan terakhir, Anda akan belajar cara membuat infinite loop.
Untuk Pengulangan di Bash
For loop adalah salah satu dari tiga jenis struktur loop yang dapat Anda gunakan di bash. Ada dua gaya berbeda untuk menulis perulangan for.
- Gaya C untuk loop
- Menggunakan for loop pada daftar/rentang item
C-style Untuk Loop di Bash
Jika Anda terbiasa dengan bahasa pemrograman seperti C atau C++, maka Anda akan mengenali sintaks loop for berikut:
for ((initialize ; condition ; increment)); do
[COMMANDS]
done
Menggunakan sintaks gaya-C yang disebutkan di atas, loop for berikut akan mencetak “Hello Friend” sepuluh kali:
for ((i = 0 ; i < 10 ; i++)); do
echo "Hello Friend"
done
Perulangan for pertama-tama menginisialisasi variabel integer i ke nol kemudian menguji kondisi (i <10); jika benar, maka loop mengeksekusi baris echo “Hello Friend” dan menambah variabel i oleh 1 , dan kemudian loop berjalan lagi dan lagi sampai i tidak lebih dari 10 .
[email protected]:~$ bash hello.sh
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Daftar/Rentang Untuk Perulangan di Bash
Variasi sintaks lain dari for loop juga ada yang sangat berguna jika Anda bekerja dengan daftar file (atau string), rentang angka, larik, output dari suatu perintah, dll. Sintaks daftar/rentang untuk loop mengambil bentuk berikut :
for item in [LIST]; do
[COMMANDS]
done
Misalnya, loop for berikut melakukan hal yang persis sama dengan loop for gaya-C yang telah Anda buat di bagian sebelumnya:
for i in {1..10}; do
echo "Hello Friend"
done
var.sh script di bawah ini akan menampilkan semua file dan direktori yang ada di bawah /var direktori:
#!/bin/bash
for i in /var/*; do
echo $i
done
Di bawah ini adalah contoh keluaran saat Anda menjalankan skrip var.sh:
[email protected]:~$ ./var.sh
/var/backups
/var/cache
/var/crash
/var/lib
/var/local
/var/lock
/var/log
/var/mail
/var/metrics
/var/opt
/var/run
/var/snap
/var/spool
/var/tmp
While Loop di Bash
Perulangan while adalah perulangan populer dan intuitif lainnya yang dapat Anda gunakan dalam skrip bash. Sintaks umum untuk perulangan while adalah sebagai berikut:
while [ condition ]; do
[COMMANDS]
done
Misalnya, 3x10.sh berikut ini skrip menggunakan loop while yang akan mencetak sepuluh kelipatan pertama dari angka tiga:
#!/bin/bash
num=1
while [ $num -le 10 ]; do
echo $(($num * 3))
num=$(($num+1))
done
Berikut adalah output dari script di atas:
[email protected]:~$ ./3x10.sh
3
6
9
12
15
18
21
24
27
30
Ini pertama kali menginisialisasi num variabel menjadi 1; kemudian, loop while akan berjalan selama num kurang dari atau sama dengan 10 . Di dalam badan perulangan while, perintah echo mencetak num dikalikan dengan tiga dan kemudian menambah num oleh 1 .
Sampai Loop di Bash
Jika Anda berasal dari latar belakang C/C++, Anda mungkin mencari loop do-while tetapi loop tersebut tidak ada di bash.
Ada jenis loop lain yang ada di bash. Perulangan hingga mengikuti sintaks yang sama dengan perulangan while:
until [ condition ]; do
[COMMANDS]
Done
Perbedaan utama antara perulangan hingga dan perulangan while adalah pada kondisi pengujian. Perulangan while akan terus berjalan selama kondisi pengujian benar; di sisi lain, perulangan hingga akan terus berjalan selama kondisi pengujian salah!
Misalnya, Anda dapat dengan mudah membuat 3x10.sh skrip dengan loop hingga alih-alih loop sementara; triknya di sini adalah untuk meniadakan kondisi pengujian:
#!/bin/bash
num=1
until [ $num -gt 10 ]; do
echo $(($num * 3))
num=$(($num+1))
done
Perhatikan bahwa negasi dari kondisi pengujian [ $num -le 10 ]; adalah [ $num -gt 10 ];
Selengkapnya tentang pengulangan dalam skrip bash
Sekarang Anda sudah familiar dengan loop dalam skrip bash
Mencetak konten array di bash
Jika Anda mengikuti seri tutorial ini dari awal, Anda harus terbiasa dengan array di bash.
For loop sering kali merupakan pilihan paling populer dalam hal iterasi pada elemen array.
Misalnya, berikut prime.sh skrip mengulangi dan mencetak setiap elemen dalam larik utama:
#!/bin/bash
prime=(2 3 5 7 11 13 17 19 23 29)
for i in "${prime[@]}"; do
echo $i
done
Ini adalah output dari skrip prime.sh:
[email protected]:~$ ./prime.sh
2
3
5
7
11
13
17
19
23
29
Menggunakan Break dan Continue di bash loop
Terkadang Anda mungkin ingin keluar dari loop sebelum waktunya atau melewatkan pengulangan loop. Untuk melakukan ini, Anda dapat menggunakan pernyataan break dan continue.
Pernyataan break mengakhiri eksekusi loop dan mengubah kontrol program ke perintah atau instruksi berikutnya setelah loop.
Misalnya, loop berikut hanya akan mencetak angka dari satu hingga tiga:
for ((i=1;i<=10;i++)); do
echo $i
if [ $i -eq 3 ]; then
break
fi
done
Anda juga dapat menggunakan lanjutkan pernyataan untuk melewatkan iterasi loop. Loop berlanjut dan berpindah ke iterasi berikutnya tetapi perintah setelah pernyataan continue dilewati dalam iterasi tertentu.
Misalnya, odd.sh berikut ini skrip hanya akan mencetak angka ganjil dari satu hingga sepuluh karena melewati semua angka genap:
#!/bin/bash
for ((i=0;i<=10;i++)); do
if [ $(($i % 2)) -ne 1 ]; then
continue
fi
echo $i
done
Berikut output yang mencetak angka ganjil:
[email protected]:~$ ./odd.sh
1
3
5
7
9
Loop Tak Terbatas di bash
Perulangan tak terbatas adalah perulangan yang terus berjalan selamanya; ini terjadi ketika kondisi pengujian loop selalu benar.
Dalam kebanyakan kasus, infinite loop adalah produk dari kesalahan logika manusia.
Misalnya, seseorang yang mungkin ingin membuat loop yang mencetak angka 1 hingga 10 dalam urutan menurun mungkin akhirnya membuat loop tak terbatas berikut secara tidak sengaja:
for ((i=10;i>0;i++)); do
echo $i
done
Masalahnya adalah bahwa loop terus menambah variabel i oleh 1 . Untuk memperbaikinya, Anda perlu mengubah i++ dengan i-- sebagai berikut:
for ((i=10;i>0;i--)); do
echo $i
done
Dalam beberapa kasus, Anda mungkin ingin dengan sengaja membuat loop tak terbatas untuk menunggu kondisi eksternal terpenuhi pada sistem. Anda dapat dengan mudah membuat infinite for loop sebagai berikut:
for ((;;)); do
[COMMANDS]
done
Jika Anda ingin membuat loop while tak terbatas, Anda dapat membuatnya sebagai berikut:
while [ true ]; do
[COMMANDS]
done
Luar biasa! Ini membawa kita ke akhir tutorial ini di Bash Beginner Series. Saya harap Anda menikmati membuat perulangan di bash!
Sekarang berlatih perulangan dengan beberapa latihan sederhana. Anda juga mendapatkan solusinya dalam PDF di bawah ini.
Bash Bab 8 Latihan PertanyaanMasalah dan solusinya untuk mempraktikkan apa yang baru saja Anda pelajari di bab iniBash-Bab-8-Pertanyaan-Latihan-Buku Pegangan-Linux.pdf28 KB
Lihat bab berikutnya karena Anda akan mempelajari cara menggunakan kembali kode di skrip bash Anda dengan membuat fungsi.