GNU/Linux >> Belajar Linux >  >> Linux

Bash Scripting – Untuk Loop Dijelaskan Dengan Contoh

Dalam skrip Bash shell, Loops berguna untuk mengotomatiskan tugas yang berulang. Ketika Anda harus mengulang tugas N beberapa kali dalam skrip Anda, loop harus digunakan. Ada tiga jenis loop yang didukung di bash.

  1. Untuk putaran
  2. Sementara loop
  3. Sampai berulang

Ketiga loop memiliki tujuan yang sama untuk mengulang tugas sebanyak N kali ketika suatu kondisi terpenuhi tetapi dengan perbedaan dalam cara mereka didefinisikan dan digunakan untuk mencapai hasil.

Artikel ini akan fokus pada "untuk loop" dalam skrip Bash. Kita akan mempelajari tentang dua loop lainnya di panduan berikutnya.

Untuk sintaks loop

Memahami sintaks sangat penting sebelum Anda menulis for loop pertama Anda .

for NAME in [ LIST OF ITEMS ]
do
  Command 1
  Command 2
  .....
  Command N
done 

Mari kita urai dan lihat apa fungsinya.

  • Mulai dengan kata kunci "for" diikuti dengan nama variabel.
  • Kata kunci "in" dapatkan daftar item dan simpan dalam variabel untuk setiap iterasi.
  • Kata kunci "do" dan "done" menandai awal dan akhir dari blok loop dan perintah harus ditulis dalam do dan done.
  • Tidak ada aturan lekukan yang ketat, tetapi untuk keterbacaan yang lebih baik, gunakan 2 spasi atau tab(4) . Konsisten dalam menggunakan spasi atau tab di seluruh skrip Anda.

Anda juga dapat membuat satu baris untuk loop. Buat for loop di terminal dan tekan tombol panah atas dan Anda akan melihat bash secara otomatis mengubahnya menjadi satu baris loop.

for NAME in [ LIST OF ITEMS]; do COMMANDS ; done

Contoh 1 - Bekerja dengan daftar item

Mari kita mulai dengan contoh sederhana.

Dari bagian sebelumnya, Anda mungkin telah memahami bahwa for loop menerima daftar item. Daftar item bisa apa saja seperti string, array, integer, range, output perintah, dll.

Buka terminal dan jalankan kode berikut.

N=1
for val in Welcome To Ostechnix
do
 echo "Iteration $N → $val"
 ((++N))
done

Mari kita hancurkan.

  • "Welcome to Ostechnix" adalah daftar item yang diteruskan ke for loop dan setiap kata akan diambil sebagai iterasi terpisah dan disimpan dalam variabel (val ).
  • Variabel bisa diberi nama apa saja. Di sini saya beri nama sebagai val .
  • Ada tiga item dalam daftar sehingga akan ada tiga iterasi di for loop dan setiap kali nilai variabel val dicetak.
  • Perintah ((++N )) akan bertindak sebagai penghitung dan menaikkan nilai variabel N sehingga dapat dicetak dalam echo pernyataan.

Sekarang setelah menjalankan for loop di atas perintah tekan tombol panah atas dari terminal dan Anda dapat melihat multi-baris for loop dikonversi menjadi satu baris untuk loop.

Contoh 2 - Bekerja dengan rentang

Anda mungkin ingin menjalankan for loop T berapa kali, untuk itu, Anda dapat menggunakan generator urutan bawaan bash "{x..y[..incr]}" yang akan menghasilkan urutan angka.

  • X =Nilai bilangan bulat awal
  • Y =Nilai Integer Akhir
  • Incr =nilai Integer opsional yang melakukan penambahan bilangan bulat

Katakanlah Anda ingin menjalankan loop lima kali maka Anda dapat menggunakan cuplikan berikut.

for rng in {1..5}
do
 echo "Value is == $rng"
done

Anda juga dapat menggunakan parameter kenaikan opsional yang akan melakukan kenaikan bertahap.

Lihatlah cuplikan di bawah ini di mana kenaikan tiga diberikan. Ini akan menghasilkan urutan dari satu dan melakukan langkah peningkatan tiga sampai nilai akhir sepuluh.

for rng1 in {1..10..3}
do
 echo "Value is == $rng1"
done

Contoh 3 - Menjalankan perintah

Anda dapat menjalankan perintah apa pun yang memperoleh daftar item untuk diproses oleh for loop . Perintah harus diapit dengan tanda centang "`` " atau tanda kurung "$() ".

Pada contoh di bawah ini, saya menjalankan perintah yang akan mendapatkan ID proses dan memfilter lima proses terakhir. Untuk loop sekarang akan mengulangi setiap ID proses.

for list in $(ps -ef | awk {' print $2 '} | tail -n 5)
do 
  echo $list
done

Contoh 4 - Ulangi elemen array

Dalam skenario waktu nyata, Anda akan menyimpan beberapa nilai dalam array dan mencoba mengulang array untuk diproses lebih lanjut.

Sebelum memahami cara melakukan iterasi melalui array, Anda harus memahami perilaku dua variabel khusus( [email protected] dan $* ). Keduanya adalah variabel khusus yang digunakan untuk mengakses semua elemen dari sebuah array.

Jalankan potongan kode berikut di terminal. Sebuah larik X dibuat dan ketika saya mencoba untuk mencetak semua nilai ($X ) seperti cara saya mencetak variabel, itu hanya mengembalikan nilai pertama dari array.

$ X=( 16 09 2021 "Thursday Third Week" )
$ echo $X
16

Untuk mengakses semua elemen dalam larik, Anda harus menggunakan [email protected] atau $* . Sintaks untuk mengakses nilai array adalah sebagai berikut.

$ echo ${X[@]}
16 09 2021 Thursday Third Week
$ echo ${X[*]}
16 09 2021 Thursday Third Week

Sekarang gunakan ini dengan for loop untuk beralih melalui nilai array.

X=( 16 09 2021 "Thursday Third Week" )

for items in ${X[@]}
do
 echo $items
done

Perhatikan keluaran di atas. Output ini tampaknya salah, karena string (Kamis Minggu Ketiga) di dalam array harus dianggap sebagai nilai tunggal. Tapi di sini setiap item diperlakukan sebagai item terpisah.

Ini adalah perilaku default saat Anda menggunakan [email protected] atau $ . Untuk mengatasinya, sertakan variabel perluasan array ([email protected] atau $ ) dalam tanda kutip ganda.

for items in "${X[@]}"
do
 echo $items
done

Saat Anda menggunakan tanda kutip ganda, [email protected] dan $* berperilaku berbeda. Sementara [email protected] memperluas array ke setiap item dalam seperti array seperti yang ditunjukkan pada contoh di atas, $* akan memperluas seluruh array sebagai satu nilai.

for items in "${X[*]}"
do
 echo $items
done

Perhatian: Keduanya [email protected] dan $* berperilaku identik kecuali jika diapit dengan tanda kutip ganda . Cobalah untuk menghindari $* kecuali jika diperlukan.

Contoh 5 - Gaya C untuk sintaks loop

Bash juga menawarkan c gaya for loop sintaksis. Jika berasal dari C latar belakang bahasa, maka sintaks ini tidak akan baru bagi Anda.

Alih-alih mengulangi daftar, Anda akan mengevaluasi suatu kondisi dan jika kondisinya benar, perintah dalam loop akan dieksekusi.

Ada tiga parameter yang harus Anda pahami dalam sintaks ini.

  • Variabel - Sebuah variabel diinisialisasi hanya sekali ketika loop dipicu.
  • Kondisi - Kondisi harus benar untuk loop yang akan dieksekusi jika tidak, loop tidak akan berjalan.
  • Penghitung - Ini akan menambah nilai variabel.

Setiap parameter harus dipisahkan oleh titik koma (; ) dan harus diapit kurung ganda seperti yang ditunjukkan di bawah ini.

for (( variable; condition; counter ))
do
  Command 1 
  Command 2
  Command N 
done

Perhatikan contoh tahun kabisat di bawah ini.

  • Variabel YEAR=2010 akan diinisialisasi terlebih dahulu.
  • Kondisi YEAR<=20 akan dievaluasi dan jika benar kode antara do dan done blok akan dieksekusi.
  • Penghitung YEAR++ akan menambah tahun dengan satu hitungan. Sampai variabel YEAR bertambah menjadi 2020 , loop akan berulang.
  • Dalam do dan done blok, pernyataan bersyarat ditulis untuk memeriksa apakah tahun tersebut adalah tahun kabisat atau bukan.
for ((YEAR=2010; YEAR<=2020; YEAR++))
do
 if [[ $(expr $YEAR % 4) -eq 0 ]]
 then
   echo "$YEAR =  leap year"
 else
   echo "$YEAR =  not a leap year"
 fi
done

Contoh 6 - Istirahat, Lanjutkan penggunaan pernyataan

Ada dua kata kunci bawaan bash yang digunakan untuk mengontrol aliran loop Anda.

  • Istirahat - Keluar dari loop dan lewati semua iterasi yang tertunda.
  • Lanjutkan - Lewati iterasi saat ini dan kembalikan kontrol ke loop for untuk menjalankan iterasi berikutnya.

Untuk memeriksa apakah mereka built-in bash atau tidak, gunakan type perintah:

$ type break continue
break is a shell builtin
continue is a shell builtin

Mari kita lihat secara singkat bagaimana dan di mana break dan continue dapat digunakan.

Saya menggunakan kode yang sama yang saya gunakan di bagian sebelumnya untuk menemukan tahun kabisat. Dalam hal ini, saya hanya perlu apa yang akan menjadi tahun kabisat pertama antara 2010 dan 2020. Jika tahun itu ditemukan, loop saya bisa keluar.

for ((YEAR=2010; YEAR<=2020; YEAR++))
do
 if [[ $(expr $YEAR % 4) -eq 0 ]]
 then
   echo "$YEAR =  leap year"
   break
 else
   echo "$YEAR =  not a leap year"
 fi
done

Dari output di atas, Anda dapat melihat for loop berulang, dan ketika tahun kabisat pertama 2012 ditemukan, break pernyataan dibaca dan loop keluar dan kontrol diberikan kembali ke terminal.

Sekarang saya mengubah kode yang sama untuk "continue" penyataan. continue pernyataan ketika ditafsirkan akan melewati iterasi saat ini yaitu kode apa pun yang muncul setelah pernyataan lanjutkan dan meneruskan kontrol kembali ke for loop untuk menjalankan iterasi berikutnya.

for ((YEAR=2010; YEAR<=2020; YEAR++))
do
 if [[ $(expr $YEAR % 4) -eq 0 ]]
 then
   echo "$YEAR =  leap year"
 else
   continue
   echo "$YEAR =  not a leap year"
 fi
done

Dari gambar di atas, terlihat ada pernyataan echo yang dilewati oleh pernyataan continue.

Contoh 7 - Penggunaan pernyataan yang benar

Saat Anda membuat loop atau pernyataan kondisional, Anda tidak dapat membiarkan blok kode kosong. Bash akan memunculkan kesalahan sintaks.

Perhatikan kedua gambar di atas. Pada gambar pertama, saya membuat for loop tetapi tidak ada perintah antara do dan done . Demikian pula pada gambar kedua, saya membiarkan klausa else kosong. Dalam kedua kasus, bash tidak menerima blok kosong dan memunculkan kesalahan sintaksis.

Anda dapat menggunakan bash builtin “true" kata kunci yang akan selalu disetel kode keluarnya ke 0 (kesuksesan).

$ type true
true is a shell builtin

Dengan cara ini, Anda membiarkan blok kode kosong tanpa bash menimbulkan kesalahan.

Kesimpulan

Dalam panduan Bash for loop ini, kita telah memulai dengan pengenalan loop dan sintaks for loop dengan gaya C. Kita juga telah melihat bagaimana menggunakan for loop dalam kondisi yang berbeda bersama dengan pernyataan kontrol loop break dan continue. Lihat panduan kami berikutnya untuk mempelajari tentang Bash While dan Until loop dengan contoh.

  • Bash Scripting – Sementara Dan Sampai Loop Dijelaskan Dengan Contoh

Bacaan terkait:

  • Bash Scripting – Fungsi Dijelaskan Dengan Contoh
  • Bash Scripting – Variabel Dijelaskan Dengan Contoh
  • Perintah Bash Echo Dijelaskan Dengan Contoh Di Linux
  • Tutorial Bash Heredoc Untuk Pemula
  • Pengalihan Bash Dijelaskan Dengan Contoh
  • Perbedaan Antara Mendefinisikan Variabel Bash Dengan Dan Tanpa Ekspor

Linux
  1. Panduan Bash For Loop dan Contohnya

  2. Contoh Bash For Loop dan While Loop

  3. Contoh Bash untuk loop

  1. Bash Untuk Loop

  2. Perintah mkdir Linux Dijelaskan untuk Pemula (dengan contoh)

  3. 12 Contoh Bash For Loop untuk Scripting Shell Linux Anda

  1. Bash For Loop dengan contoh praktis

  2. Perintah Bash Echo Dijelaskan Dengan Contoh Di Linux

  3. Pengalihan Bash Dijelaskan Dengan Contoh