Kabuklar, dosyalarla çalışmak ve bir programdan diğerine veri almak için özel özelliklere sahiptir (verilerin metin olduğu varsayılarak). Bu görevler için, kabuk betikleri Python gibi bir betik dilinden daha az hantal olabilir.
Kabuk komut dosyası oluşturmanın avantajı, kullandığınız komutların temel olarak komut satırından kullanacağınız komutların aynı olması avantajına da sahiptir;
Örneğin, tüm PNG dosyalarını geçerli dizinden belirli bir dizine taşıyan bir bash betiği.
#!/usr/bin/sh
mv *.png $1
İşte bir Python sürümü.
#!/usr/bin/python
import sys, shutil, glob
for filename in glob.iglob("./*.png"):
shutil.move(filename, sys.argv[1])
Fark edeceksiniz:
- Bash betiği, satırları sayarsanız (shebang satırı hariç) Python kadar üçüncü - karakter sayısına göre daha az
- Python betiğinin içe aktarılması için üç kitaplık gerekirken, bu görev için ihtiyacınız olan her şey bash dilinde yerel olarak kullanılabilir
- Python betiği dosyaları taşımak için açık bir döngü gerektirirken, bu da bash'daki
mv
komutun anlamının bir parçasıdır.
- Bash betiği daha hızlı çalışabilir - muhtemelen bash'tan çağırırsınız ve
source
kabuğun aynı örneğinde çalıştırmak için kullanabilirsiniz
glob.iglob("./*.png")
sadece söylemek için oldukça ağız dolusu *.png
Python'da temel bir boru işlemi yazmak isterseniz, ayrıntıda şaşıracaksınız. (Elbette, boru geçişi gibi bazı şeyler, grep
harici bir program kullanmak yerine Python kodu ile değiştirilebilir, bu nedenle genellikle o kadar fazla boruya ihtiyacınız yoktur.)
Karşı örnek olarak, bir keresinde dosya adlarının her birinin belirli bir dizinde ne kadar sürdüğünü kontrol eden bir rutin yazmak zorunda kaldım. Belirli bir işletim sistemi tarafından desteklenenden daha uzun olsaydı, kısalmaları gerekiyordu. Bu, düzeltmem gereken yinelenen dosya adlarına neden olabilir ve bir Web sayfasından bağlanacaklarından, kısaltılmış adların sabit olması gerekiyordu, yani, aynı uzun dosya adının her zaman sonuçlanacak şekilde üretilmesi gerekir. aynı kısaltılmış dosya adı. Bunu uzun dosya adının onaltılık bir md5'ini oluşturarak ve bunun ilk dört karakterini kısaltılmış isme ekleyerek yaptım (isimler hala çarpışabilirdi, ama çok tuhaftı, bu yüzden sadece bu durumu kontrol ettim ve olması gerekiyorsa kurtardı) .
Bunu bash'de yaptım çünkü zaten bash ile yazılmış olan yapı sistemimizin bir parçasıydı. Muhtemelen düşündüğünüz kadar doğru olmak tam olarak zordu. Python'a yazmak çok daha az zaman alacaktı ve muhtemelen daha net olurdu.
Kısacası: Farklı görevler için farklı diller tasarlanır; elinizdeki göreve en uygun dili seçin.