Kabuk programlama![]() ![]() Kabuk betiği (İngilizcesi: shell script), bir Unix kabuğu (bir komut satırı yorumlayıcısı) tarafından çalıştırılmak üzere yazılmış bir bilgisayar programıdır.[1] Kabuk betiklerinin çeşitli lehçeleri komut dili olarak kabul edilir. Kabuk betikleri tarafından gerçekleştirilen tipik işlemler arasında dosya işleme, program çalıştırma ve metin yazdırma yer alır. Ortamı ayarlayan, bir programı çalıştıran ve gerekirse günlükleme veya temizleme işlemleri yapan bir betik, sargı (wrapper) olarak adlandırılır. Bu terim aynı zamanda, bir işletim sistemi kabuğunun otomatik modda çalıştırılması anlamında daha genel olarak da kullanılmaktadır. Her işletim sistemi bu işlevleri farklı adlarla anmaktadır: toplu işlem dosyaları (MS-DOS-Win95 hattı, OS/2), komut prosedürleri (VMS), kabuk betikleri (Windows NT hattı ve 4NT gibi üçüncü taraf türevleri—makale cmd.exe sayfasında) ve ana bilgisayar işletim sistemleriyle ilişkili çeşitli diğer terimler. Unix ve Unix benzeri sistemlerde yaygın olarak bulunan kabuklar arasında Korn shell, Bourne shell ve GNU Bash yer alır. Unix tabanlı bir işletim sistemi farklı bir varsayılan kabukla birlikte gelebilir (örneğin macOS'te Zsh), ancak genellikle geriye dönük uyumluluk için bu kabuklar da sistemde bulunur. ÖzelliklerYorum SatırlarıYorum satırları, kabuk yorumlayıcısı tarafından çalıştırılmaz. Genellikle kare işareti ( Betik Dili SeçilebilirliğiShebang (#!) , çalıştırılacak betiğin hangi yorumlayıcı ile yürütüleceğini belirlemek için kullanılan özel bir yorum satırıdır. Betiğin ilk satırında yer almalı ve KısayollarKabuk betikleri, sistem komutlarını daha elverişli hale getiren kısaltmalar olarak kullanılabilir. Ortam değiştirgeleri, komut seçenekleri ya da ek işlem adımları önceden tanımlanmış olabilir; buna karşın betik, sıradan bir Unix komutu gibi çalışmayı sürdürür.
Örnek olarak, dosyaları listeleyen ls komutunun kısa adlandırılmış bir sürümünü #!/bin/sh
LC_COLLATE=C ls -FCas "$@"
Burada ilk satır, shebang (#!) kullanılarak, betiği hangi yorumlayıcının çalıştıracağını belirtir. İkinci satır ise
Kullanıcı, sık kullanılan kısa listeleme işlemleri için yalnızca Bir başka kısayol örneği, belirli bir dizin içerisindeki tüm dosya ve dizinleri listeleyen basit bir komuttur: #!/bin/sh
clear
ls -al
Bu durumda betik, olağan başlangıç satırı olan
Toplu İşler
Kabuk betikleri, bir dizi komutu tek tek elle girilmeksizin ardışık olarak çalıştırabilir. Örneğin, içinde üç C kaynak kodu dosyası bulunan bir dizinde, bu dosyalardan son programı üretmek için gereken dört komutu tek tek çalıştırmak yerine, POSIX uyumlu kabuklar için #!/bin/sh
printf 'derleniyor...\n'
cc -c foo.c
cc -c bar.c
cc -c qux.c
cc -o myprog foo.o bar.o qux.o
printf 'tamamlandı.\n'
Bu sayede kullanıcı, düzenleyiciden çıkıp yalnızca Genelleştirme
Basit toplu işler izole görevler için olağandışı değildir, ancak kabuk döngüleri, testler ve değişkenler kullanmak, kullanıcılara çok daha fazla esneklik sağlar. Komut satırından—muhtemelen joker karakterler aracılığıyla—verilen görsel adları ile JPEG görsellerini PNG görsellerine dönüştüren bir POSIX sh betiği, her görselin betik içinde tek tek listelenmesi yerine, aşağıdaki gibi bir dosyada oluşturulabilir. Bu betik genellikle
#!/bin/sh
for jpg; do # verilen her dosya adı için $jpg yerine geçer
png=${jpg%.jpg}.png # dosya adındaki .jpg uzantısını .png ile değiştirerek PNG adı oluştur
printf '"%s" dönüştürülüyor...\n' "$jpg" # betiği çalıştıran kullanıcıya durum bilgisi ver
if convert "$jpg" jpg.to.png; then # ImageMagick tarafından sağlanan convert komutuyla geçici PNG oluştur
mv jpg.to.png "$png" # başarılıysa geçici PNG dosyasını doğru adla yeniden adlandır
else # aksi takdirde hata mesajı ver ve betikten çık
printf >&2 'jpg2png: hata: çıktı "jpg.to.png" dosyasına kaydedildi.\n'
exit 1
fi # "if" test yapısının sonu
done # "for" döngüsünün sonu
printf 'tüm dönüştürmeler tamamlandı\n' # kullanıcıya işlemin başarıyla tamamlandığını bildir
Bu durumda ProgramlamaGünümüzde kabukların birçoğu, yalnızca daha gelişmiş genel amaçlı programlama dillerinde bulunan kontrol akışı yapıları, değişkenler, yorum satırları, diziler, altyordamlar gibi çeşitli özellikleri de sağlar. Bu tür özelliklerin mevcut olması sayesinde, kabuk betikleriyle oldukça gelişmiş uygulamalar yazmak mümkündür. Ancak, çoğu kabuk dilinin veri türü sistemleri, sınıflar, çok iş parçacığı (threading), karmaşık matematik işlemleri ve diğer yaygın tam teşekküllü dil özellikleri için çok az desteğe sahip olması ya da hiç desteklememesi nedeniyle hâlâ sınırlıdırlar. Ayrıca genellikle derlenmiş kodlara ya da yüksek performans hedefiyle yazılmış yorumlanmış dillere kıyasla çok daha yavaştırlar. Standart Unix araçları olan sed ve awk, kabuk programlaması için ek yetenekler sağlar; Perl de diğer betik dilleri gibi (örneğin Tcl) kabuk betiklerine gömülebilir. Perl ve Tcl ayrıca grafik araç takımlarıyla birlikte gelir. Tipik POSIX betik dilleri
Diğer betik dilleri
Yaşam döngüsüKabuk betikleri, yazılım geliştirme sürecinde genellikle ilk aşama olarak kullanılır ve daha sonra sıklıkla farklı bir temel uygulama biçimine dönüştürülür. Bu dönüşüm çoğunlukla Perl, Python veya C gibi dillere yapılır. Yorumlayıcı yönergesi (İngilizcesi: interpreter directive) sayesinde, uygulamanın hangi dilde yazıldığı dosya uzantısıyla belirtilmek zorunda kalmaz; bu bilgi doğrudan betik içinde tanımlanır. Böylece, betiğin farklı bir dilde yeniden uygulanması son kullanıcıyı etkilemeden mümkün olur. “.sh” dosya uzantısı genellikle bir kabuk betiğini belirtir; ancak çoğu kabuk betiği herhangi bir uzantı taşımaz.[4][5][6][7] Avantajlar ve dezavantajlar
Betik dilleri arası birlikte çalışabilirlik
Diğer işletim sistemlerinde kabuk betikleri
En çok bilinen kabuklarKaynakça
|