GNU/Linux >> Belajar Linux >  >> Linux

12 Contoh Bash For Loop untuk Scripting Shell Linux Anda

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.


Linux
  1. Panduan Bash For Loop dan Contohnya

  2. Apa shell favorit Anda untuk pekerjaan sysadmin?

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

  1. 5 Ekstensi Shell GNOME Terbaik untuk Desktop Linux Anda

  2. Contoh Bash For Loop dan While Loop

  3. Menjaga Anda di Loop – Contoh Bash Untuk, Sementara, Sampai Loop

  1. Bash Untuk Loop

  2. Shell Scripting Bagian I:Memulai dengan bash scripting

  3. Contoh Bash untuk loop