Materi
for nama in daftar; do ...; done menjalankan badan perulangan sekali untuk setiap kata di daftar, dengan kata itu tersimpan di variabel nama. Daftarnya boleh ditulis langsung, berupa pola berkas seperti *.csv, berupa rentang {1..12}, atau keluaran perintah seperti $(seq 1 3). while kondisi; do ...; done mengulang selama kondisinya berhasil, dan until kebalikannya.
for f in /opt/kasir/*.csv; do
echo "$f: $(wc -l < $f) baris"
done
for bulan in {1..3}; do
mkdir -p arsip/bulan-$bulan
donebreak menghentikan perulangan lebih awal dan continue melompat ke putaran berikutnya. Perulangan for paling sering dipakai admin untuk pekerjaan yang sama atas banyak berkas: menyalin, mengganti izin, atau menghitung baris. Sebelum menjalankan perulangan yang menghapus atau memindahkan, jalankan dulu versi yang hanya echo nama berkasnya, supaya daftar yang akan disentuh terlihat.
Fungsi memberi nama pada sekelompok perintah: nama() { perintah; }. Di dalam fungsi, $1, $2, dan $# merujuk ke argumen fungsi itu, bukan argumen skrip. local membuat variabel yang hanya hidup di dalam fungsi, dan return N mengakhiri fungsi dengan kode keluar N, yang bisa dibaca if seperti perintah biasa.
cek_layanan() {
if pgrep -f "$1" > /dev/null; then
echo "JALAN $1"
else
echo "MATI $1"
return 1
fi
}
cek_layanan sshdKesalahan umum: pola seperti *.bak yang tidak cocok dengan berkas apa pun tidak hilang, melainkan dipakai apa adanya sebagai kata *.bak, sehingga badan perulangan berjalan sekali dengan nama berkas yang tidak ada. Kesalahan kedua: menulis fungsi tanpa spasi sesudah { atau tanpa titik koma sebelum }, yang membuat bash menunggu baris lanjutan.