Shells memiliki fitur khusus untuk bekerja dengan file dan memasukkan data dari satu program ke program lain (dengan asumsi data adalah teks). Untuk tugas-tugas itu, skrip shell bisa menjadi lebih rumit daripada bahasa skrip seperti Python.
Script Shell juga memiliki keuntungan bahwa perintah yang Anda gunakan pada dasarnya adalah perintah yang sama yang akan Anda gunakan dari baris perintah - jadi jika Anda dapat melakukan sesuatu di shell, Anda lebih dari setengah jalan untuk membuat skrip operasi yang sama.
Di sini misalnya adalah skrip bash yang memindahkan semua file PNG dari direktori saat ini ke direktori yang ditentukan.
#!/usr/bin/sh
mv *.png $1
Ini versi Python.
#!/usr/bin/python
import sys, shutil, glob
for filename in glob.iglob("./*.png"):
shutil.move(filename, sys.argv[1])
Anda akan melihat:
- Skrip bash adalah yang ketiga sepanjang Python jika Anda menghitung garis (tidak termasuk garis shebang) - apalagi dengan jumlah karakter
- Skrip Python membutuhkan tiga pustaka yang akan diimpor, sementara semua yang Anda butuhkan untuk tugas ini tersedia secara native di bash
- Skrip Python membutuhkan loop eksplisit untuk memindahkan file, sedangkan itu adalah bagian dari semantik dari
mv
perintah di bash
- Skrip bash dapat berjalan lebih cepat - Anda mungkin akan memanggilnya dari bash, dan Anda dapat menggunakannya
source
untuk menjalankannya di instance shell yang sama
glob.iglob("./*.png")
cukup seteguk hanya untuk mengatakan *.png
Jika Anda ingin menulis operasi pipa dasar dengan Python, Anda akan terkejut dengan verbositasnya. (Tentu saja, beberapa hal, seperti pemipaan melalui grep
, dapat diganti dengan kode Python daripada menggunakan program eksternal, jadi Anda sering tidak perlu mem-pipe cukup banyak.)
Sebagai contoh tandingan, saya pernah harus menulis rutin yang memeriksa untuk melihat berapa lama masing-masing nama file dalam direktori tertentu. Jika mereka lebih lama dari yang didukung oleh OS tertentu, mereka harus dipersingkat. Ini dapat menghasilkan duplikat nama file, yang perlu saya ralat, dan karena mereka akan ditautkan dari halaman Web, nama yang disingkat harus stabil, yaitu, mereka harus dibuat sedemikian rupa sehingga nama file yang sama akan selalu menghasilkan nama file pendek yang sama. Saya melakukan ini dengan menghasilkan hex md5 dari nama file panjang dan menambahkan empat karakter pertama itu ke nama singkat (nama masih bisa bertabrakan, tapi itu sangat tidak sopan, jadi saya hanya memeriksa kondisi itu dan menebus jika itu terjadi) .
Saya melakukan ini di bash karena itu adalah bagian dari sistem build kami yang sudah ditulis dalam bash. Persis sulit untuk mendapatkan yang benar seperti yang mungkin Anda pikirkan. Butuh waktu lebih sedikit untuk menulis dengan Python dan mungkin akan lebih jelas juga.
Singkatnya: berbagai bahasa dirancang untuk berbagai jenis tugas; pilih bahasa yang tersedia untuk Anda yang paling sesuai dengan tugas yang ada.