Belajar dengan membaca secara berurutan

Perulangan — Memproses File Satu per Satu dengan for

Artikel ini adalah bagian dari Kursus Linux yang membantumu menguasai keterampilan praktis Linux dari nol, mulai dari perintah dasar hingga shell script.
Loop daftar file dengan for f in *.txt, ulangi secara bersyarat dengan while [ "$i" -le 3 ] dan until, lewati nilai kosong dengan continue, dan berhenti di batas dengan break — divisualkan dan dipraktikkan di terminal browser.

Memproses daftar secara berurutan — for

for mengambil nilai yang kamu berikan satu per satu dan menjalankan pekerjaan yang sama pada masing-masing.

Bentuknya for v in a b c; do ... done, di mana v menjadi a, lalu b, lalu c secara berurutan.

Apa yang berada di antara do dan done adalah badan yang diulang.

Kamu bisa menuliskan nilainya langsung, memakai pola file seperti *.txt, atau memberi output dari $(...) sebuah perintah.

Tulis for f in *.txt dan tiap file .txt di direktori saat ini masuk ke f secara berurutan, sehingga kamu bisa menulis pekerjaan per file.

Memakai $(...) seperti for line in $(cat list.txt) membuatmu bisa me-loop output sebuah perintah.

Beginilah cara kamu menulis ringkasan daftar file atau pemrosesan batch lintas beberapa file.

for env in dev stg prod; do        # proses nilai yang dilist secara berurutan
  echo "deploying to $env"
done
for f in *.sh; do                  # proses file .sh secara berurutan
  echo "script: $f"
done
Cara loop for berputar
for f in *.txtJalankan badan(do … done)item berikut → fselesai di donejika habisulang untuk tiap item
for menarik item dari daftar ke f satu per satu dan menjalankan badan, lalu selesai di done begitu item habis.
SyntaxArtiExample
for v in a b c; do … doneproses nilai yang dilist secara berurutanfor v in dev stg prod; do echo $v; done
for f in *.txt; do …proses file yang cocok secara berurutanfor f in *.txt; do wc -l "$f"; done
for x in $(cmd); do …proses output perintah secara berurutanfor d in $(ls); do echo $d; done
do … doneawal dan akhir badan loopfor v in a b; do echo $v; done

Tulis script yang me-loop daftar file dan menjumlahkan hitungannya.

① Buka count-lines.sh dengan vi count-lines.sh, tekan i untuk masuk insert mode, dan tulis #!/bin/sh di baris pertama.

② Di dalam script, buat beberapa file bahan, loop sebuah pola file dengan for, hitung baris tiap file satu per satu, lalu cetak totalnya.

③ Tekan Esc, simpan dengan :wq, lalu tambahkan izin eksekusi.

④ Jalankan script dan pastikan tiap file dan totalnya tercetak.

⑤ Jika kamu ragu apa yang harus ditulis, salin teks di panel jawaban dan tempel ke insert mode vi. (Jalankan dengan benar untuk menampilkan penjelasannya.)

Linux console
0 / 3 selesai
Loading Linux Terminal...

Loop berdasarkan kondisi — while / until

while mengulang selama kondisinya benar.

Seperti pada while [ "$i" -lt 3 ]; do ... done, kamu menaikkan counter di dalam badan untuk menuju akhir.

until kebalikannya — ia mengulang sampai kondisinya menjadi benar.

Ia cocok untuk pekerjaan yang jumlah putarannya tidak ditentukan di awal.

i=1
while [ "$i" -le 3 ]; do          # ulang selama i bernilai 3 atau kurang
  echo "try $i"
  i=$((i + 1))
done                              # try 1 / try 2 / try 3
i=1
until [ "$i" -gt 3 ]; do          # ulang sampai kondisinya menjadi benar
  echo "i=$i"
  i=$((i + 1))
done                              # i=1 / i=2 / i=3
while vs until
while [ i ≤ 3 ]kondisi benarjalankan badanuntil [ i > 3 ]kondisi salahjalankan badanwhile: ulang selama benaruntil: ulang sampai benar
while mengulang badan selama kondisinya benar; until mengulangnya sampai kondisinya menjadi benar. Keduanya menaikkan counter di badan untuk menuju akhir.
SyntaxArtiExample
while [ cond ]; do … doneulang selama kondisinya benarwhile [ "$i" -lt 3 ]; do …; done
until [ cond ]; do … doneulang sampai kondisinya menjadi benaruntil [ -f done.flag ]; do …; done

Tulis script retry yang mengulang pekerjaan sambil menghitung putaran.

① Buka retry.sh dengan vi retry.sh, tekan i untuk masuk insert mode, dan tulis #!/bin/sh di baris pertama.

② Siapkan variabel counter, loop dengan while sampai sebuah batas sambil mencetak nomor percobaan, dan naikkan counter di dalam badan.

③ Pastikan menulis ulang pekerjaan yang sama sebagai until [ "$i" -gt "$max" ] memberi hasil yang sama.

④ Tekan Esc, simpan dengan :wq, lalu tambahkan izin eksekusi.

⑤ Jalankan script dan pastikan ia mengulang sebanyak jumlah yang ditetapkan.

⑥ Jika kamu ragu apa yang harus ditulis, salin teks di panel jawaban dan tempel ke insert mode vi.

Linux console
0 / 3 selesai
Loading Linux Terminal...

Mengendalikan loop for — break / continue

Bahkan di tengah loop for, kamu bisa mengubah alurnya dengan break dan continue.

continue melewati sisa putaran itu dan lanjut ke item berikutnya, sedangkan break mengakhiri loop itu sendiri.

Gabungkan keduanya dengan sebuah kondisi seperti if [ kondisi ]; then continue; fi atau if [ kondisi ]; then break; fi untuk melewati item yang tidak kamu butuhkan atau berhenti begitu cukup.

for n in 1 2 3 4 5; do
  if [ "$n" -eq 3 ]; then continue; fi  # lewati 3
  if [ "$n" -eq 5 ]; then break; fi     # keluar di 5
  echo "n=$n"
done                                    # n=1 / n=2 / n=4
Alur break / continue di for
n=1jalankan badancetak n=1n=2jalankan badancetak n=2n=3continuelewati, lanjutn=4jalankan badancetak n=4n=5breakakhiri loopke item berikutcontinue: lewati putaran inibreak: keluar dari loop
for menjalankan badan secara berurutan mulai dari n=1. Di n=3 continue melewati sisanya dan lanjut, dan di n=5 break mengakhiri loop itu sendiri (output n=1 / n=2 / n=4).
SyntaxArtiExample
continuelewati putaran ini dan lanjut ke berikutnyaif [ -z "$x" ]; then continue; fi
breakkeluar dari loop di tengah jalanif [ "$n" -gt 100 ]; then break; fi

Tulis script pengumpulan yang melewati nilai kosong dan berhenti di sebuah batas.

① Buka collect.sh dengan vi collect.sh, tekan i untuk masuk insert mode, dan tulis #!/bin/sh di baris pertama.

② Loop sebuah daftar nilai dengan for, lewati nilai kosong atau yang tak diinginkan dengan continue, dan keluar dari loop dengan break begitu kamu mencapai batas.

③ Tekan Esc, simpan dengan :wq, lalu tambahkan izin eksekusi.

④ Jalankan script dan pastikan nilai yang dilewati dan titik di mana ia berhenti.

⑤ Jika kamu ragu apa yang harus ditulis, salin teks di panel jawaban dan tempel ke insert mode vi.

Linux console
0 / 3 selesai
Loading Linux Terminal...

Mengendalikan loop while — break / continue

Di samping pemeriksaan kondisi pada while, memakai break dan continue membuatmu bisa berhenti lebih awal atau melewati sebuah putaran.

continue melewati putaran itu dan kembali ke pemeriksaan kondisi, sedangkan break keluar dari loop tanpa menunggu kondisi.

Waspadai ini: jika kamu tidak menaruh pembaruan counter di awal badan (sebelum continue), putaran yang dilewati tidak akan memperbaruinya dan loop tak pernah berakhir.

i=0
while [ "$i" -lt 10 ]; do
  i=$((i + 1))                          # naikkan di awal
  if [ "$i" -eq 3 ]; then continue; fi  # lewati putaran ke-3
  if [ "$i" -eq 6 ]; then break; fi     # keluar di putaran ke-6
  echo "attempt $i"
done                                    # attempt 1 / 2 / 4 / 5
Alur break / continue di while
i=1jalankan badanattempt 1i=2jalankan badanattempt 2i=3continuebalik ke ceki=4jalankan badanattempt 4i=5jalankan badanattempt 5i=6breakakhiri loopke putaran berikutcontinue: balik ke cekbreak: keluar dari loop
while menjalankan badan selama kondisinya benar, menaikkan i sebesar 1 tiap kali. Di i=3 continue kembali ke pemeriksaan kondisi, dan di i=6 break mengakhiri loop tanpa menunggu kondisi (output attempt 1 / 2 / 4 / 5).
SyntaxArtiExample
continuelewati putaran ini, balik ke cekif [ $((i % 3)) -eq 0 ]; then continue; fi
breakkeluar dari loop tanpa menunggu kondisiif [ "$found" -ge 4 ]; then break; fi
di mana memperbarui counterperbarui sebelum continuetaruh i=$((i + 1)) di awal badan

Tulis script scan yang me-loop dengan while, melewati putaran yang tak dibutuhkan, dan berhenti begitu ia mendapat jumlah item yang dibutuhkan.

① Buka scan.sh dengan vi scan.sh, tekan i untuk masuk insert mode, dan tulis #!/bin/sh di baris pertama.

② Siapkan counter, loop dengan while sampai sebuah batas, dan naikkan counter sebesar 1 di awal badan.

③ Lewati putaran yang memenuhi kondisi tertentu dengan continue, dan keluar dari loop dengan break begitu kamu mencapai jumlah item yang dibutuhkan.

④ Tekan Esc, simpan dengan :wq, lalu tambahkan izin eksekusi.

⑤ Jalankan script dan pastikan putaran yang dilewati dan titik di mana ia berhenti.

⑥ Jika kamu ragu apa yang harus ditulis, salin teks di panel jawaban dan tempel ke insert mode vi.

Linux console
0 / 3 selesai
Loading Linux Terminal...
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Apa yang di-loop oleh for f in *.txt; do ... done?

Soal 2Keyword mana yang mengulang selama kondisinya benar?

Soal 3Mana yang hanya melewati putaran itu dan lanjut ke berikutnya?