GNU/Linux >> Belajar Linux >  >> Linux

Bash Seri Pemula #8:Loop di Bash

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

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.


Linux
  1. Cara menulis loop di Bash

  2. Skrip Linux:3 cara untuk while loop di Bash

  3. Bash Seri Pemula #9:Menggunakan Fungsi di Bash

  1. Bash melanjutkan:Cara Melanjutkan Loop

  2. RHCE Ansible Series #5:Ansible Loops

  3. Contoh Bash untuk loop

  1. Bash sementara Loop

  2. Bash Untuk Loop

  3. Bash sampai Loop