

Kabuk betiği (İngilizcesi:shell script), birUnix kabuğu (birkomut satırı yorumlayıcısı) tarafından çalıştırılmak üzere yazılmış birbilgisayar programıdır.[1] Kabuk betiklerinin çeşitli lehçelerikomut 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 gerekirsegü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ı ve4NT gibi üçüncü taraf türevleri—makalecmd.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ındaKorn shell,Bourne shell veGNU Bash yer alır. Unix tabanlı bir işletim sistemi farklı bir varsayılan kabukla birlikte gelebilir (örneğinmacOS'teZsh), ancak genellikle geriye dönük uyumluluk için bu kabuklar da sistemde bulunur.
Yorum satırları, kabuk yorumlayıcısı tarafından çalıştırılmaz. Genelliklekare işareti (#) ile başlar ve satır sonuna dek sürer.[2]
Shebang (#!) [en], ç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#! ile başlamalıdır.[2] Unix-benzeri işletim dizgelerinde bu işaretten sonra gelen bölüm, betiği yorumlayacak çalıştırılabilir uygulamanın tam yoludur.[3]
Kabuk 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 birUnix komutu gibi çalışmayı sürdürür.
Örnek olarak, dosyaları listeleyenls komutunun kısa adlandırılmış bir sürümünül olarak oluşturmaktır. Bu betik, genellikle kullanıcınınbin dizininde/home/kullanıcıadı/bin/l yolunda saklanır ve içerisine bazı öntanımlı komut seçenekleri eklenmiştir.
#!/bin/shLC_COLLATE=Cls-FCas"$@"
Burada ilk satır, shebang (#!) kullanılarak, betiği hangi yorumlayıcının çalıştıracağını belirtir. İkinci satır isels komutunu; dosya türü simgelerini, sütunlu düzenlemeyi, gizli dosyaları da içerecek şekilde (hiçbirini dışlamadan) ve blok boyutunda dosya boyutlarını gösterecek biçimde çalıştırır.
LC_COLLATE=C ifadesi, harf sıralamasında büyük ve küçük harfleri birleştirmemek ve noktalama işaretlerini yok saymamak için sıralama düzenini C yerelleştirmesine ayarlar. Bu sayede,dotfile [en] ile sıradan dosya adları birbirine karışmaz (noktalı dosyalar genellikle-a gibi seçeneklerle görünür hâle gelir).
"$@" ifadesi,l komutuna verilen tüm girdilerinls'ye eksiksiz aktarılmasını sağlar; böylecels'nin tüm alışılmış seçenekleri vesözdizimi kullanılabilir kalır.
Kullanıcı, sık kullanılan kısa listeleme işlemleri için yalnızcal komutunu çalıştırarak bu betikten yararlanabilir.
Bir başka kısayol örneği, belirli bir dizin içerisindeki tüm dosya ve dizinleri listeleyen basit bir komuttur:
#!/bin/shclearls-alBu durumda betik, olağan başlangıç satırı olan#!/bin/sh ile başlar. Ardındanclear komutu çalıştırılarak uçbirim (terminal) temizlenir. Sonraki satırdakils -al komutu ise betiğin çalıştırıldığı dizindeki tüm dosya ve dizinleri ayrıntılı olarak listeler.
ls komutuna ait öznitelikler, kullanıcının gereksinimlerine göre değiştirilebilir.
Kabuk betikleri, bir dizi komutu tek tek elle girilmeksizin ardışık olarak çalıştırabilir. Örneğin, içinde üç Ckaynak 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çinbuild adlı bir betik oluşturulabilir. Bu betik, kaynak dosyalarla aynı dizinde saklanır ve derleme işlemini kendiliğinden yapar:
#!/bin/shprintf'derleniyor...\n'cc-cfoo.ccc-cbar.ccc-cqux.ccc-omyprogfoo.obar.oqux.oprintf'tamamlandı.\n'
Bu sayede kullanıcı, düzenleyiciden çıkıp yalnızca./build komutunu çalıştırarak güncel programı üretme, deneme ve ardından düzenleyiciye dönme olanağı tanır. Ancak 1980'lerden bu yana, bu tür işler için özel araçlar olanmake gibi yapılandırma sistemleri kullanılır hale gelmiştir.
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/home/kullanıcıadı/bin/jpg2png gibi bir dosyada saklanır:
#!/bin/shforjpg;do# verilen her dosya adı için $jpg yerine geçerpng=${jpg%.jpg}.png# dosya adındaki .jpg uzantısını .png ile değiştirerek PNG adı oluşturprintf'"%s" dönüştürülüyor...\n'"$jpg"# betiği çalıştıran kullanıcıya durum bilgisi verifconvert"$jpg"jpg.to.png;then# ImageMagick tarafından sağlanan convert komutuyla geçici PNG oluşturmvjpg.to.png"$png"# başarılıysa geçici PNG dosyasını doğru adla yeniden adlandırelse# aksi takdirde hata mesajı ver ve betikten çıkprintf>&2'jpg2png: hata: çıktı "jpg.to.png" dosyasına kaydedildi.\n'exit1fi# "if" test yapısının sonudone# "for" döngüsünün sonuprintf'tüm dönüştürmeler tamamlandı\n'# kullanıcıya işlemin başarıyla tamamlandığını bildir
Bu durumdajpg2png betiği,/home/kullanıcıadı/bin/jpg2png *.jpg şeklinde JPEG görsellerle dolu bir dizin üzerinde çalıştırılabilir.
Gü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ı olansed veawk, kabuk programlaması için ek yetenekler sağlar;Perl de diğer betik dilleri gibi (örneğinTcl) kabuk betiklerine gömülebilir. Perl ve Tcl ayrıca grafik araç takımlarıyla birlikte gelir.
Bu alt başlığıngenişletilmesi gerekiyor.Sayfayı düzenleyerek yardımcı olabilirsiniz. |
Bu alt başlığıngenişletilmesi gerekiyor.Sayfayı düzenleyerek yardımcı olabilirsiniz. |
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ğunluklaPerl,Python veyaC 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]
Bu alt başlığıngenişletilmesi gerekiyor.Sayfayı düzenleyerek yardımcı olabilirsiniz. |
Bu alt başlığıngenişletilmesi gerekiyor.Sayfayı düzenleyerek yardımcı olabilirsiniz. |
Bu alt başlığıngenişletilmesi gerekiyor.Sayfayı düzenleyerek yardımcı olabilirsiniz. |
The shell is actually a programming language: it has variables, loops, decision-making, and so on.
Rather than using a file extension for shell scripts, it's preferred to keep a filename without extension and let an interpreter identify the type by looking into shebang(#!).
Shell scripts don't need a special file extension, so leave the extension blank (or you can add the extension .sh if you prefer, but this isn't required.)
| Yazılım ile ilgili bu maddetaslak seviyesindedir. Madde içeriğinigenişleterek Vikipedi'ye katkı sağlayabilirsiniz. |