Skrip Bash adalah cara yang sangat efisien untuk mengotomatiskan tugas, terutama tugas yang memanfaatkan program lain yang sudah ada. Otomatisasi ini sering kali memerlukan pengulangan operasi serupa beberapa kali, tepatnya di tempat untuk loop datang dengan sendirinya.
Administrator sistem Linux dan Mac biasanya terbiasa dengan pembuatan skrip melalui terminal, tetapi bahkan pengguna Windows pun bisa mulai beraksi dengan Subsistem Windows untuk Linux.
Tidak perlu menggunakan Linux untuk beralih ke PC lain atau menjalankan VM? Jalankan Linux di Windows 10 dengan terminal Bash shell sebagai gantinya!
Bagaimana Bash Scripts Bekerja
Skrip bash hanyalah file teks biasa yang berisi serangkaian perintah yang dapat dibaca dan dijalankan oleh bash shell. Bash adalah shell default di macOS pra-Catalina, dan sebagian besar distribusi Linux.
Jika Anda belum pernah bekerja dengan skrip shell sebelumnya, Anda harus mulai dengan kasus yang paling sederhana. Ini akan memungkinkan Anda untuk mempraktikkan konsep-konsep utama termasuk pembuatan skrip dan eksekusinya.
Pertama, buat file berikut di lokasi yang nyaman (idealnya, buka terminal dan arahkan ke direktori yang diinginkan terlebih dahulu):
#! / bin / bash
echo "Halo, Dunia"
Baris pertama memberi tahu apa pun yang menjalankan program ini cara menjalankannya (yaitu menggunakan juru bahasa bash). Yang kedua hanyalah perintah seperti perintah lainnya yang mungkin Anda masukkan pada baris perintah. Simpan file itu sebagai hello_world.sh, kemudian:
$ chmod + x hello_world.sh
$ ./hello_world.sh
Itu chmod.dll perintah pada baris pertama membuat file dapat dieksekusi, artinya dapat dijalankan dengan mengetikkan namanya, seperti pada baris kedua.
Jika Anda melihat kata-kata "Halo, Dunia" muncul tercetak pada baris di terminal Anda, maka semuanya berfungsi sesuai kebutuhan.
Cara Kerja Loop
Dalam pemrograman umum, ada dua tipe utama for loop: numerik dan untuk setiap. Jenis numerik secara tradisional adalah yang paling umum, tetapi dalam penggunaan bash, biasanya sebaliknya.
Numerik untuk loop biasanya berfokus pada satu bilangan bulat yang menentukan berapa banyak iterasi yang akan dilakukan, misalnya:
untuk (i = 0; saya <100; i ++) {
/ * pernyataan untuk dieksekusi berulang kali * /
}
Ini adalah perulangan for-mencari yang akan mengulang tepat 100 kali, kecuali i diubah dalam perulangan, atau pernyataan lain menyebabkan eksekusi perulangan for terhenti.
Sebaliknya, forach loop cenderung beroperasi pada struktur seperti list atau array, dan melakukan iterasi untuk setiap item dalam koleksi tersebut:
people = ["Peter", "Paul", "Mary"]
foreach (orang sebagai orang) {
if (person == "Paul") {
...
}
}
Beberapa bahasa menggunakan sintaks yang sedikit berbeda yang menukar urutan koleksi dan item:
people = ["Peter", "Paul", "Mary"]
untuk (orang dalam orang) {
if (person == "Paul") {
...
}
}
Untuk di Loops
Dalam pesta, bagian depan — atau untuk di—Loop lebih umum. Sintaks dasarnya adalah:
untuk arg di [list]
melakukan
/ * pernyataan untuk dieksekusi berulang kali * /
/ * nilai arg dapat diperoleh menggunakan $ arg * /
selesai
Misalnya, untuk mengulang melalui tiga file yang dinamai secara eksplisit:
untuk file di one.c two.c three.c
melakukan
ls "$ file"
selesai
Jika file seperti itu ada di direktori saat ini, output dari skrip ini adalah:
satu.c
two.c
tiga.c
Alih-alih kumpulan file tetap, daftar dapat diperoleh melalui pola glob (salah satunya termasuk wildcard - karakter khusus yang mewakili karakter lain). Dalam contoh berikut, perulangan for melakukan iterasi di semua file (dalam direktori saat ini) yang namanya diakhiri dengan ".xml":
untuk file dalam * .xml
melakukan
ls -l "$ file"
selesai
Berikut beberapa contoh keluarannya:
$ -rw-r - r-- 1 bobby staff 2436 3 Nov 2019 feed.xml
$ -rw-r - r-- 1 bobby staff 6447 27 Okt 16:24 sitemap.xml
Ini mungkin terlihat seperti cara yang bertele-tele untuk melakukan:
$ ls -l * .xml
Namun ada perbedaan yang signifikan: perulangan for mengeksekusi ls program 2 kali terpisah, dengan satu nama file diteruskan ke sana setiap kali. Dalam contoh ls terpisah, pola glob (* .xml) mencocokkan nama file terlebih dahulu dan kemudian mengirimkan semuanya, sebagai parameter baris perintah individual, ke satu instance dari ls.
Berikut adalah contoh yang menggunakan toilet (jumlah kata) untuk membuat perbedaan lebih jelas:
$ wc -l * .xml
44 feed.xml
231 sitemap.xml
275 total
Itu toilet Program menghitung jumlah baris di setiap file secara terpisah, lalu mencetak jumlah total di semua file. Sebaliknya, jika toilet beroperasi dalam loop for:
untuk file dalam * .xml
melakukan
wc -l $ file
selesai
Anda masih akan melihat hitungan untuk setiap file:
44 feed.xml
231 sitemap.xml
Tetapi tidak ada ringkasan total karena toilet dijalankan secara terpisah, setiap kali loop berulang.
Ketika Daftar Bukan Daftar
Ada kesalahan yang sangat mudah dan umum saat menangani loop for, karena cara bash menangani argumen / string yang dikutip. Pengulangan melalui daftar file harus dilakukan seperti ini:
untuk file di one.c two.c
Tidak seperti ini:
untuk file di "one.c two.c"
Contoh kedua membungkus nama file dalam tanda kutip ganda yang menghasilkan daftar hanya dengan satu parameter; loop for hanya akan dijalankan satu kali. Masalah ini dapat dihindari dengan menggunakan variabel dalam kasus seperti ini:
BERKAS = "one.c two.c"
untuk file dalam $ FILES
melakukan
...
selesai
Perhatikan bahwa deklarasi variabel itu sendiri perlu menyertakan nilainya dalam tanda kutip ganda!
Karena Tanpa Daftar
Tanpa ada yang perlu diiterasi, loop for beroperasi pada argumen baris perintah apa pun yang disediakan ke skrip saat dipanggil. Misalnya, jika Anda memiliki skrip bernama args.sh berisi yang berikut ini:
#! / bin / sh
untuk sebuah
melakukan
echo $ a
selesai
Kemudian menjalankan args.sh akan memberi Anda yang berikut:
$ ./args.sh satu dua tiga
satu
dua
tiga
Bash mengenali kasus ini dan memperlakukannya untuk melakukan sebagai padanan untuk di $ @ do di mana $ @ adalah variabel khusus yang mewakili argumen baris perintah.
Meniru Numerik Tradisional Untuk Loop
Skrip Bash sering menangani daftar file atau baris output dari perintah lain, jadi for in type of loop adalah hal yang umum. Namun, operasi gaya-c tradisional masih didukung:
untuk ((i = 1; saya <= 5; i ++))
melakukan
echo $ i
selesai
Ini adalah bentuk klasik dengan tiga bagian di mana:
- variabel diinisialisasi (i = 1) ketika loop pertama kali ditemukan
- loop terus berlanjut selama kondisi (i <= 5) benar
- setiap kali loop, variabel bertambah (i ++)
Iterasi di antara dua nilai adalah persyaratan yang cukup umum sehingga ada alternatif yang lebih pendek dan sedikit tidak membingungkan:
untuk saya di {1..5}
melakukan
echo $ i
selesai
Ekspansi brace yang terjadi secara efektif menerjemahkan loop for di atas menjadi:
untuk saya dalam 1 2 3 4
Kontrol Loop Lebih Baik Dengan Istirahat dan Lanjutkan
Pengulangan yang lebih kompleks sering kali memerlukan cara untuk keluar lebih awal atau segera memulai ulang pengulangan utama dengan nilai berikutnya secara bergantian. Untuk melakukannya, bash meminjam pernyataan break dan continue yang umum dalam bahasa pemrograman lain. Berikut contoh yang menggunakan keduanya untuk menemukan file pertama yang panjangnya lebih dari 100 karakter:
#! / bin / bash
untuk file di *
melakukan
jika [! -f "$ file"]
kemudian
echo "$ file bukan file"
terus
fi
num_chars = $ (wc -c echo $ file adalah "$ num_chars karakter"
jika [$ num_chars -gt 100]
kemudian
echo "Menemukan $ file"
istirahat
fi
selesai
Perulangan for di sini beroperasi pada semua file di direktori saat ini. Jika file tersebut bukan file biasa (mis. Jika itu adalah direktori), pernyataan lanjutkan digunakan untuk memulai ulang pengulangan dengan file berikutnya secara bergantian. Jika ini adalah file biasa, blok bersyarat kedua akan menentukan apakah itu berisi lebih dari 100 karakter. Jika demikian, pernyataan break digunakan untuk segera meninggalkan loop for (dan mencapai akhir skrip).
Kesimpulan
Skrip bash adalah file yang berisi sekumpulan instruksi yang dapat dieksekusi. Perulangan for memungkinkan bagian dari skrip diulang berkali-kali. Dengan penggunaan variabel, perintah eksternal, dan pernyataan putus dan lanjutkan, skrip bash dapat menerapkan logika yang lebih kompleks dan menjalankan berbagai tugas.
Laporan menunjukkan bahwa label privasi aplikasi Apple mungkin mengalami beberapa masalah.
- Pemrograman
- Linux
Bobby adalah penggemar teknologi yang bekerja sebagai pengembang perangkat lunak selama hampir dua dekade. Dia sangat menyukai game, bekerja sebagai Editor Ulasan di Majalah Switch Player, dan tenggelam dalam semua aspek penerbitan online & pengembangan web.
Berlangganan newsletter kami
Bergabunglah dengan buletin kami untuk mendapatkan tip teknologi, ulasan, ebook gratis, dan penawaran eksklusif!
Satu langkah lagi…!
Harap konfirmasi alamat email Anda di email yang baru saja kami kirimkan kepada Anda.