Ada dua jenis bash untuk loop yang tersedia. Satu menggunakan kata kunci “dalam” dengan daftar nilai, yang lain menggunakan pemrograman C seperti sintaks.
Artikel ini adalah bagian dari seri tutorial bash kami yang sedang berlangsung.
Ini menjelaskan kedua metode bash for loop, dan memberikan 12 contoh berbeda tentang cara menggunakan bash for loop dalam skrip shell Anda.
Bookmark artikel ini untuk referensi di masa mendatang, karena ini adalah satu-satunya artikel yang Anda perlu merujuk pada cara menggunakan bash for loops dengan contoh.
Metode 1:Bash For Loop menggunakan “dalam” dan daftar nilai
Sintaks:
for varname in list do command1 command2 .. done
Dalam sintaks di atas:
- untuk, dalam, lakukan, dan selesai adalah kata kunci
- “daftar” berisi daftar nilai. Daftar dapat berupa variabel yang berisi beberapa kata yang dipisahkan oleh spasi. Jika list tidak ada dalam pernyataan for, maka dibutuhkan parameter posisi yang diteruskan ke shell.
- varname adalah nama variabel Bash apa pun.
Dalam formulir ini, pernyataan for mengeksekusi perintah yang diapit oleh badan, sekali untuk setiap item dalam daftar. Misalnya, jika daftar nilai berisi 5 item, perulangan for akan dieksekusi sebanyak 5 kali, sekali untuk setiap item dalam daftar. Item saat ini dari daftar akan disimpan dalam variabel "varname" setiap kali melalui loop. “varname” ini dapat diproses di badan for loop.
Metode 2:Bash For Loop menggunakan sintaks seperti C
Bentuk kedua dari perulangan for mirip dengan perulangan for dalam bahasa pemrograman “C”, yang memiliki tiga ekspresi (inisialisasi, kondisi, dan pembaruan).
for (( expr1; expr2; expr3 )) do command1 command2 .. done
Di bash di atas untuk sintaks perintah,
- Sebelum iterasi pertama, expr1 dievaluasi. Ini biasanya digunakan untuk menginisialisasi variabel untuk loop.
- Semua pernyataan antara do dan done dieksekusi berulang kali hingga nilai expr2 bernilai TRUE.
- Setelah setiap iterasi dari loop, expr3 dievaluasi. Ini biasanya digunakan untuk menambah penghitung loop.
12 contoh berikut menunjukkan cara melakukan bash for loop dengan cara yang berbeda.
1. Nilai statis untuk daftar setelah kata kunci “dalam”
Pada contoh berikut, daftar nilai (Sen, Sel, Rab, Kam, dan Jum) langsung diberikan setelah kata kunci “in” di bash for loop.
$ cat for1.sh i=1 for day in Mon Tue Wed Thu Fri do echo "Weekday $((i++)) : $day" done $ ./for1.sh Weekday 1 : Mon Weekday 2 : Tue Weekday 3 : Wed Weekday 4 : Thu Weekday 5 : Fri
Perhatian: Daftar nilai tidak boleh dipisahkan dengan koma (Sen, Sel, Rab, Kam, Jum). Koma akan diperlakukan sebagai bagian dari nilai. yaitu Alih-alih "Mon", itu akan menggunakan "Mon", sebagai nilai seperti yang ditunjukkan pada contoh di bawah ini.
$ cat for1-wrong1.sh i=1 for day in Mon, Tue, Wed, Thu, Fri do echo "Weekday $((i++)) : $day" done $ ./for1-wrong1.sh Weekday 1 : Mon, Weekday 2 : Tue, Weekday 3 : Wed, Weekday 4 : Thu, Weekday 5 : Fri
Perhatian: Daftar nilai tidak boleh diapit dalam tanda kutip ganda. (“Senin Sel Rab Kam Jum”). Jika Anda menyertakan tanda kutip ganda, itu akan diperlakukan sebagai nilai tunggal (bukan 5 nilai yang berbeda), seperti yang ditunjukkan pada contoh di bawah ini.
$ cat for1-wrong2.sh i=1 for day in "Mon Tue Wed Thu Fri" do echo "Weekday $((i++)) : $day" done $ ./for1-wrong2.sh Weekday 1 : Mon Tue Wed Thu Fri
2. Variabel untuk daftar setelah kata kunci “dalam”
Alih-alih memberikan nilai secara langsung di for loop, Anda dapat menyimpan nilai dalam variabel, dan menggunakan variabel di for loop setelah kata kunci “in”, seperti yang ditunjukkan pada contoh berikut.
$ cat for2.sh i=1 weekdays="Mon Tue Wed Thu Fri" for day in $weekdays do echo "Weekday $((i++)) : $day" done $ ./for2.sh Weekday 1 : Mon Weekday 2 : Tue Weekday 3 : Wed Weekday 4 : Thu Weekday 5 : Fri
Perhatian :Sebagai praktik terbaik, Anda harus selalu mengutip variabel bash saat Anda merujuknya. Ada beberapa pengecualian untuk aturan praktik terbaik ini. Ini adalah salah satunya. Jika Anda mengutip dua kali variabel dalam loop for ini, daftar nilai akan diperlakukan sebagai nilai tunggal. Banyak orang jatuh ke dalam perangkap ini. Hati-hati dan jangan kutip dua kali variabel Anda dalam for loop.
$ cat for2-wrong.sh i=1 weekdays="Mon Tue Wed Thu Fri" for day in "$weekdays" do echo "Weekday $((i++)) : $day" done $ ./for2-wrong.sh Weekday 1 : Mon Tue Wed Thu Fri
3. Jangan tentukan daftarnya; dapatkan dari parameter posisi
Jika Anda tidak menentukan kata kunci “in” diikuti oleh daftar nilai apa pun di bash for loop, itu akan menggunakan parameter posisi (yaitu argumen yang diteruskan ke skrip shell).
$ cat for3.sh i=1 for day do echo "Weekday $((i++)) : $day" done $ ./for3.sh Mon Tue Wed Thu Fri Weekday 1 : Mon Weekday 2 : Tue Weekday 3 : Wed Weekday 4 : Thu Weekday 5 : Fri
Perhatian: Harap berhati-hati jika Anda menggunakan metode ini. Anda tidak boleh memasukkan kata kunci “dalam” dalam perulangan for. Jika Anda membiarkan kata kunci “dalam” tanpa nilai apa pun, itu tidak akan menggunakan parameter posisi seperti yang ditunjukkan di bawah ini. Itu tidak akan masuk ke dalam loop. yaitu for loop tidak akan pernah dieksekusi seperti yang ditunjukkan pada contoh di bawah ini.
$ cat for3-wrong.sh i=1 for day in do echo "Weekday $((i++)) : $day" done $ ./for3-wrong.sh Mon Tue Wed Thu Fri
Catatan :Lihat artikel kami sebelumnya untuk memahami lebih lanjut tentang parameter posisi bash.
4. Output perintah Unix sebagai nilai daftar setelah kata kunci “dalam”
Anda dapat menggunakan output dari perintah UNIX / Linux apa pun sebagai daftar nilai untuk perulangan for dengan menyertakan perintah tersebut dalam tanda centang ` ` seperti yang ditunjukkan di bawah ini.
$ cat for4.sh i=1 for username in `awk -F: '{print $1}' /etc/passwd` do echo "Username $((i++)) : $username" done $ ./for4.sh Username 1 : ramesh Username 2 : john Username 3 : preeti Username 4 : jason ..
5. Loop melalui file dan direktori dalam for loop
Untuk mengulang file dan direktori di bawah direktori tertentu, cukup cd ke direktori itu, dan berikan * di loop for seperti yang ditunjukkan di bawah ini.
Contoh berikut akan mengulang semua file dan direktori di bawah direktori home Anda.
$ cat for5.sh i=1 cd ~ for item in * do echo "Item $((i++)) : $item" done $ ./for5.sh Item 1 : positional-parameters.sh Item 2 : backup.sh Item 3 : emp-report.awk Item 4 : item-list.sed Item 5 : employee.db Item 8 : storage Item 9 : downloads
Penggunaan * di bash for loop mirip dengan file globbing yang kita gunakan di baris perintah linux saat kita menggunakan perintah ls (dan perintah lainnya).
Misalnya, berikut ini akan menampilkan semua file dan direktori di bawah direktori home Anda. Ini adalah konsep yang digunakan dalam contoh for5.sh di atas.
cd ~ ls *
Berikut ini akan menampilkan semua file *.conf yang dimulai dengan a, b, atau, c atau d di bawah direktori /etc.
$ ls -1 /etc/[abcd]*.conf /etc/asound.conf /etc/autofs_ldap_auth.conf /etc/cas.conf /etc/cgconfig.conf /etc/cgrules.conf /etc/dracut.conf
Argumen yang sama yang digunakan dalam perintah ls di atas, dapat digunakan dalam bash for loop, seperti yang ditunjukkan pada contoh di bawah ini.
$ cat for5-1.sh i=1 for file in /etc/[abcd]*.conf do echo "File $((i++)) : $file" done $ ./for5-1.sh File 1 : /etc/asound.conf File 2 : /etc/autofs_ldap_auth.conf File 3 : /etc/cas.conf File 4 : /etc/cgconfig.conf File 5 : /etc/cgrules.conf File 6 : /etc/dracut.conf
6. Keluar dari perulangan for
Anda dapat keluar dari for loop menggunakan perintah 'break' seperti yang ditunjukkan di bawah ini.
$ cat for6.sh i=1 for day in Mon Tue Wed Thu Fri do echo "Weekday $((i++)) : $day" if [ $i -eq 3 ]; then break; fi done $ ./for6.sh Weekday 1 : Mon Weekday 2 : Tue
7. Lanjutkan dari atas perulangan for
Dalam kondisi tertentu, Anda dapat mengabaikan sisa perintah dalam loop for, dan melanjutkan loop dari atas lagi (untuk nilai berikutnya dalam daftar), menggunakan perintah continue seperti yang ditunjukkan di bawah ini.
Contoh berikut menambahkan “(WEEKEND)” ke Sab dan Min, dan “(weekday)” ke sisa hari.
$ cat for7.sh i=1 for day in Mon Tue Wed Thu Fri Sat Sun do echo -n "Day $((i++)) : $day" if [ $i -eq 7 -o $i -eq 8 ]; then echo " (WEEKEND)" continue; fi echo " (weekday)" done $ ./for7.sh Day 1 : Mon (weekday) Day 2 : Tue (weekday) Day 3 : Wed (weekday) Day 4 : Thu (weekday) Day 5 : Fri (weekday) Day 6 : Sat (WEEKEND) Day 7 : Sun (WEEKEND)
8. Bash for loop menggunakan sintaks program C
Contoh ini menggunakan metode ke-2 bash for loop, yang mirip dengan sintaks C for loop. Contoh berikut menghasilkan 5 angka acak menggunakan bash C-style for loop.
$ cat for8.sh for (( i=1; i <= 5; i++ )) do echo "Random number $i: $RANDOM" done $ ./for8.sh Random number 1: 23320 Random number 2: 5070 Random number 3: 15202 Random number 4: 23861 Random number 5: 23435
9. Infinite Bash untuk loop
Ketika Anda tidak memberikan awal, kondisi, dan kenaikan dalam bash C-style for loop, itu akan menjadi infinite loop. Anda perlu menekan Ctrl-C untuk menghentikan loop.
$ cat for9.sh i=1; for (( ; ; )) do sleep $i echo "Number: $((i++))" done
Seperti yang kami katakan di atas, tekan Ctrl-C untuk keluar dari contoh bash infinite for loop ini.
$ ./for9.sh Number: 1 Number: 2 Number: 3
10. Menggunakan koma di bash C-style for loop
Dalam loop bash c-style, selain menambah nilai yang digunakan dalam kondisi, Anda juga dapat menambah beberapa nilai lain seperti yang ditunjukkan di bawah ini.
Di bagian inisialisasi, dan bagian kenaikan bash C-style for loop, Anda dapat memiliki beberapa nilai dengan memisahkan dengan koma seperti yang ditunjukkan di bawah ini.
Perulangan for berikut dijalankan sebanyak 5 kali, dengan menggunakan variabel i. Namun variabel j dimulai dengan 5, dan bertambah 5 setiap kali loop dieksekusi.
$ cat for10.sh for ((i=1, j=10; i <= 5 ; i++, j=j+5)) do echo "Number $i: $j" done $ ./for10.sh Number 1: 10 Number 2: 15 Number 3: 20 Number 4: 25 Number 5: 30
11. Rentang angka setelah kata kunci “dalam”
Anda dapat mengulang menggunakan rentang angka dalam loop for “in” menggunakan ekspansi kurung kurawal.
Contoh berikut mengulang 10 kali menggunakan nilai 1 sampai 10.
$ cat for11.sh for num in {1..10} do echo "Number: $num" done $ ./for11.sh Number: 1 Number: 2 Number: 3 Number: 4 Number: 5 ...
12. Rentang angka dengan penambahan setelah kata kunci “dalam”
Contoh berikut mengulang 5 kali menggunakan nilai 1 hingga 10, dengan kenaikan 2. yaitu Dimulai dengan 1, dan terus bertambah 2, hingga mencapai 10.
$ cat for12.sh for num in {1..10..2} do echo "Number: $num" done $ ./for12.sh Number: 1 Number: 3 Number: 5 Number: 7 Number: 9
PS: Jangan lupa untuk menandai artikel ini untuk referensi Anda di masa mendatang.