Ada banyak kali dalam skrip shell ketika Anda ingin berulang kali mengeksekusi pernyataan atau sekelompok pernyataan sampai beberapa kondisi tertentu terjadi. Selain itu, Anda mungkin ingin mengeksekusi sekelompok pernyataan untuk setiap elemen dalam daftar tertentu. Shell menyediakan tiga konstruksi perulangan untuk situasi ini:konstruksi for, while, dan hingga.
Perulangan for memungkinkan Anda untuk menentukan daftar nilai. Sekelompok pernyataan dieksekusi untuk setiap nilai dalam daftar.
Untuk sintaks loop
Loop for di shell mengambil daftar kata (string) sebagai argumen. Jumlah kata dalam daftar menentukan berapa kali pernyataan dalam perulangan for dieksekusi. Sintaks untuk perulangan for adalah:
for variable in element1 element2 element3 do commands done
dimana:
- variabel :Ini adalah nama variabel apa saja.
- elemen (argument_list) :Ini bisa berupa daftar kata, string, atau angka apa saja, dan bisa literal atau dihasilkan dengan menggunakan perintah shell atau metakarakter baris perintah shell.
- perintah :Perintah dapat berupa perintah sistem operasi, program pengguna, skrip shell, atau pernyataan shell yang mengembalikan (menghasilkan) daftar.
Nilai variabel var diatur ke kata pertama dalam daftar pertama kali melalui loop. Kali kedua melalui loop, nilainya diatur ke kata kedua dalam daftar, dan seterusnya. Loop berakhir ketika var mengambil masing-masing nilai dari daftar argumen, secara bergantian, dan tidak ada argumen yang tersisa.
Daftar Argumen for Loop
Daftar argumen dalam for loop dapat berupa daftar kata any , string , atau angka . Buat daftar argumen menggunakan salah satu metode berikut (atau kombinasi metode):
- Gunakan daftar eksplisit
- Gunakan konten variabel
- Gunakan argumen baris perintah
- Gunakan substitusi perintah
- Gunakan nama file dalam substitusi perintah
Contoh 1 :Untuk perulangan menggunakan Daftar Eksplisit untuk Menentukan Argumen
Ketika argumen didaftar untuk perulangan for, mereka disebut daftar eksplisit. Daftar eksplisit adalah bentuk paling sederhana dari daftar argumen. Loop dieksekusi sekali untuk setiap elemen daftar. Contoh berikut adalah perulangan for yang menggunakan daftar elemen eksplisit:
#!/bin/bash for fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit" done
Output dari perulangan for ini adalah:
Value of fruit is: apple Value of fruit is: orange Value of fruit is: banana Value of fruit is: peach Value of fruit is: kiwi
Contoh 2:Untuk loop menggunakan Konten Variabel untuk Menentukan Argumen
Ketika argumen berada dalam variabel dan pernyataan dieksekusi, isi variabel diganti. Dalam contoh berikut, teks yang dimasukkan pada prompt menjadi nilai dari variabel INPUT. Variabel ini mewakili daftar argumen dari konstruk for. Oleh karena itu, teks dalam INPUT dipecah menjadi kata-kata atau token berdasarkan spasi.
$ cat ex1.sh #!/bin/bash # Script name: ex1.sh echo "Enter some text: \c" read INPUT for var in $INPUT do echo "var contains: $var" done
$ ./ex1.sh Enter some text: I like the Bash shell. var contains: I var contains: like var contains: the var contains: Korn var contains: shell.
Contoh 3 :Untuk loop menggunakan Argumen Baris Perintah untuk Menentukan Argumen
Dalam contoh berikut, teks yang dimasukkan pada baris perintah menjadi daftar argumen dari konstruksi for. Oleh karena itu, teks baris perintah dipecah menjadi kata-kata atau token berdasarkan spasi.
$ cat ex2.sh #!/bin/bash # Script name: ex2.sh for var in $* do echo "command line contains: $var" done
$ ./ex2.sh I am The Geek. command line contains: I command line contains: am command line contains: The command line contains: Geek.
Contoh 4 :Untuk loop Menggunakan Substitusi Perintah untuk Menentukan Argumen
Sintaks untuk substitusi perintah di shell Bash adalah:
for var in `cmd_sub`
Contoh berikut menggunakan output dari perintah cat sebagai daftar argumen.
$ cat fruit1 apple orange banana peach kiwi
$ cat ex4.sh #!/bin/bash # Script name: ex4.sh for var in `cat fruit2` do echo "var contains: $var" done
$ ./ex4.sh var contains: Apple var contains: Orange var contains: Banana var contains: Peach var contains: Kiwi
Jika file yang berisi daftar itu dalam format berikut, apa hasil dari perulangan for.
$ cat fruit3 Apple Orange Banana Peach Kiwi
$ cat ex5.sh #!/bin/bash # Script name: ex5.sh for var in `cat fruit3` do echo "$var" done
$ ./ex5.sh Apple Orange Banana Peach Kiwi
Pada contoh di atas, hasilnya tidak berubah. Variabel IFS adalah sembarang spasi, jadi carriage return dan spasi atau tab memisahkan setiap bidang dalam file.
Contoh 5:Untuk loop menggunakan Nama File di Substitusi Perintah untuk Menentukan Argumen
Beberapa perintah memberikan nama file dan nama direktori sebagai outputnya. Pada contoh berikut, shell menggantikan output dari perintah, ls /etc/p*(/etc/passwd/etc/profiledan seterusnya), sebagai daftar argumen untuk loop for.
$ cat ex7.sh #!/bin/bash # Script name: ex7.sh for var in `ls /etc/p*` do print "var contains: $var" done
# ./x.sh var contains: /etc/passwd var contains: /etc/passwd- var contains: /etc/printcap var contains: /etc/profile ....Contoh bash if loop (jika maka fi, jika maka elif fi, jika maka else fi)