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.
- Untuk putaran
- Sementara loop
- 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 kefor 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 variabelval
dicetak. - Perintah ((
++N
)) akan bertindak sebagai penghitung dan menaikkan nilai variabelN
sehingga dapat dicetak dalamecho
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 awalY
=Nilai Integer AkhirIncr
=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 antarado
dandone
blok akan dieksekusi. - Penghitung
YEAR++
akan menambah tahun dengan satu hitungan. Sampai variabelYEAR
bertambah menjadi2020
, loop akan berulang. - Dalam
do
dandone
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