
Microsoft, Apple veya Linux işletim sistemi (OS) üzerinde çalışıyorsanız, farkında olmadan da olsa shell betikleri kullanıyorsunuz. Aslında, Linux işletim sisteminizi her başlattığınızda shell’lerle etkileşime girersiniz.
Shell betikleri; programcıların, veri bilimcilerin ve gündelik kullanıcıların otomasyonla zaman kazanmasına ve tekrarlı görevlerden kaçınmasına yardımcı olur. Örneğin betikler günlük yedeklemeler yapabilir, yamalar kurabilir, sistemleri ve etkinliği izleyebilir ve rutin denetimler gerçekleştirebilir.
Shell’ler oldukça sezgisel, insanın okuyup yazdığı komutları alır ve bunları sistemin anlayacağı bir şeye dönüştürür.
Shell nedir?
Shell, Linux ve Unix kullanıcılarının işletim sistemlerini komut satırı arayüzleriyle denetlemesini sağlayan, komut satırı yorumlayıcısı adı verilen bir tür bilgisayar programıdır. Shell’ler kullanıcıların işletim sistemleriyle verimli ve doğrudan iletişim kurmasına olanak tanır.
Shell betik yazımı tek bir dil değildir; fakat bir miktar doğal dil komutu kullandığı için, programlama geçmişiniz olmasa bile öğrenmesi kolaydır. Bununla birlikte, her shell betik diyalektiği bir dil sayılır ve daha karmaşık işler planlıyorsanız shell’ler bolca pratik gerektirir.
Shell betik yazımı otomasyon kurmanın en basit yollarından biridir. Linux veya Unix komutlarını kullanarak shell betikleri, veri bilimcilerine, DevOps ve TechOps ekiplerine komutları tekrar etmek için koşullu ve döngü kontrol yapıları sunar.
Shell betikleri her zaman aynı adla anılmaz. Sh, Bash (en yaygını), csh, ve tesh’in hepsi shell betikleridir. IBM’in VM işletim sisteminde EXEC olarak adlandırılırken, DOS’ta shell betiklerine toplu iş (batch) dosyaları denir.
Bir shell iki kategoriye ayrılır: komut satırı shell’i ve grafiksel shell. Komut satırı shell’lerine, sistemlerin girdiyi insan tarafından okunabilir komutlar halinde aldığı ve ardından çıktıyı komut satırı arayüzleriyle gösterdiği komut satırı arayüzleri kullanılarak erişilir.
Grafiksel shell’ler etkileşimleri ve dosya açma, kapatma, kaydetme gibi temel işlemleri gerçekleştirmek için grafik kullanıcı arayüzü (GUI) kullanır.
İşte bazı örnek shell komutları:
Hangi dizinde olduğunuzu öğrenmek için: pwd
Bir komutu kılavuzda bulmak için: man command
Bir metin dosyasını kaydırılabilir yapmak için: less file 1 veya more file 1
Farklı shell türleri
Bourne Shell
İsminin çağrıştırdığı kadar havalı olsa da Bourne shell’in casuslarla veya yüksek hızlı araba kovalamacalarıyla ilgisi yoktur. En yaygın ikinci Unix shell’i olan Bourne shell, 1979’da Bell Labs’te Stephen Bourne tarafından oluşturuldu. Selefi Thompson shell gibi Bourne’un çalıştırılabilir dosya adı sh’dir.
Bourne shell, Solaris OS’in varsayılan shell’idir. Yaşına rağmen Bourne shell günümüzde hızından ve sadeliğinden dolayı popülerdir. Ancak Bourne shell çok etkileşimli değildir ve komut geçmişini hatırlayamaz. Ayrıca mantıksal ve aritmetik ifade desteği de yoktur.
Bourne istemleri şunlardır:
- Komut tam yolu:
/bin/shve/sbin/sh - Kök olmayan kullanıcı varsayılanı:
$ - Kök (root) kullanıcı varsayılanı:
#
command-line
C shell, dosya adı csh, ve selefi dosya adı tcsh, 70’lerin sonlarından bir başka Unix shell’idir. O dönem California Üniversitesi, Berkeley’de yüksek lisans öğrencisi olan Bill Joy tarafından yaratılmıştır.
Bourne shell’in aksine C shell etkileşimlidir ve komut geçmişini ve takma adları (aliases) tanır. C shell’ler ayrıca C benzeri ifade sözdizimi ve yerleşik aritmetik içerir.
command-line istemleri şunlardır:
- Komut tam yolu:
/bin/csh - Kök olmayan kullanıcı varsayılan ana makine adı:
% - Kök kullanıcı varsayılan ana makine adı:
#
KornShell
KornShell, dosya adı ksh, 1980’lerin başında Bell Labs’te David Korn tarafından geliştirildi. KornShell, C shell’in birçok özelliğini içerir ve Bourne shell’in bir üst kümesi olduğundan onunla geriye dönük uyumludur.
KornShell, C shell’den daha hızlı çalışır. Bourne shell betiklerini çalıştırır ve C benzeri diziler, işlevler ve dize işleme olanakları sunar. Ayrıca yerleşik aritmetik içerir.
KornShell istemleri şunlardır:
- Komut tam yolu:
/bin/ksh - Kök olmayan kullanıcı varsayılanı: $
- Kök kullanıcı varsayılanı: #
GNU Bourne-Again shell
GNU Bourne-Again ya da Bash shell, Bourne shell’e açık kaynaklı bir alternatiftir. Brian Fox tarafından GNU Projesi için tasarlanmış ve 1989’da yayımlanmıştır. Yalnızca Bourne shell ile tamamen uyumlu olmakla kalmaz, KornShell ve C shell’lerin en iyi özelliklerinden birçoğunu da alır. GNU Bourne-Again shell, düzenleme ve komut geri çağırma için otomatik olarak eşlenmiş ok tuşlarına sahiptir.
GNU Bourne-Again istemleri şunlardır:
- Komut tam yolu:
/bin/bash - Kök olmayan kullanıcı varsayılan istemi:
bash-x.xx$ - Kök kullanıcı varsayılanı:
bash-x.xx#
Shell betiklerinin yaptıkları
Bu benzetme biraz basit kalabilir ama shell betiklerini programcılar için otomatik doldurma gibi düşünebilirsiniz. Komutları klavyeden tek tek yazmak yerine, shell kullanıcıların komut satırında basit bir dosya adıyla başlatabileceği tekil betiklerde komut dizileri kullanır. Shell betikleri program yürütme, metin sarma ve dosya işleme yapar.
Shell betikleri disk kullanımını izleme gibi gözetim görevlerini yürütme, yedekleme yapma, komut araçları oluşturma, dosyaları işleme, program çalıştırma, programları birbirine bağlama, toplu işleri tamamlama vb. dahil olmak üzere pek çok görevi yerine getirebilir.
Shell’e başlıca alternatifler
IBM’in VM işletim sisteminde bunlara EXEC denir; DOS’ta shell betikleri toplu iş (batch) dosyaları olarak adlandırılır. Ancak bunlar hâlâ shell betikleridir. Javascript, Python, Perl ve TCL gibi diğer betik dilleri de betik dilidir. Şaşırtıcı olmayan şekilde, bilişim profesyonellerinin hepsinin favorileri vardır; shell’lerin artı ve eksi yönlerine birazdan değineceğiz.
Shell neden bu kadar popüler?
Shell neredeyse her işletim sisteminde yaygındır çünkü verimlidir ve kolay güncellenir. Bilgisayarınızın sistemini izler ve sizin düşünmenize gerek kalmadan rutin yedeklemeler yapar.
Sözdizimlerini değiştirmenize gerek yoktur çünkü shell’in sözdizimleri ve komutları, komut satırına girilenlerle aynıdır. Ayrıca shell betiklerini yazmak kolay ve hızlıdır: hızlı başlarlar ve hata ayıklamaları kolaydır.
Shell betiklerinin dezavantajları nelerdir?
Shell betikleri hataya açık olabilir ve sorunlar ortaya çıktığında teşhis etmek zor olabilir. Shell’ler karmaşık veya büyük görevler için tasarlanmamıştır ve çalıştırmaları yavaştır. Ek olarak shell’ler çok fazla veri yapısı sunmaz ve sözdizimi veya tasarım kusurları olabilir.
Shell ne zaman oluşturuldu?
İlk shell betiği 1960’ların başında MIT personeli Louis Pouzin tarafından oluşturuldu. Onun ilk komut satırı RUNCOM idi; bu da bilgisayar bilimcilerini derleme, güncelleme, yeniden adlandırma ve taşıma gibi tekrarlı görevlerden kurtardı.
Pouzin bir bilgisayar dili uzmanı değildi, hatta belki de bu yüzden, komut satırlarının başlı başına bir dil olabileceğine inanıyordu.
1960’ların ortalarına gelindiğinde Pouzin, Britanyalı bilim insanı Christopher Strachey ile güçlerini birleştirdi. Strachey, Pouzin’in komut dili için temel işlevi gören bir makro üretici tasarladı; bu dil o dönem için son teknoloji olan Multics işletim sistemi üzerinde çalışıyordu.
Shell adını nasıl aldı
Pouzin yeni diline “shell” adını verdi çünkü bu, işletim sistemlerinin en dış katmanıdır.
Shell özellikleri
Shell’ler programcılar arasında özlü oldukları için popülerdir. Ancak bu, basit oldukları anlamına gelmez. Shell’ler şu özellikler de dahil olmak üzere çeşitli yetenekler sunar:
Arka planda çalıştırma
Shell betiklerinin en büyük avantajlarından biri arka planda çalışabilmeleridir. Komuta bağlı olarak shell’ler ön planda veya arka planda çalışabilir. Ön plan süreçleri ekranda görünür ve yalnızca sıralı şekilde çalışabilir.
Arka plan süreçleri ekranda görünmez ve sıralı olmayan şekilde çalışabilir. Bir shell betiğini arka planda çalıştırmak için kullanıcıların betiğin sonuna yalnızca bir ve işareti (&) eklemesi yeterlidir.
Joker karakterli (wildcard) değiştirmeler
Joker karakterli değiştirmeler, sistemlerin aynı anda birden fazla komutu işlemesine veya metin dosyalarından ifade parçacıkları bulmasına olanak tanır. Örneğin * sistemin boş dizeler de dahil olmak üzere herhangi bir dizeyle eşleşmesini söyler. ? tek bir karakterle eşleşir, [example] herhangi bir karakterle eşleşir (“example” sadece bir örnektir) ve [1-9] (başka bir örnek) shell’e belirtilen aralıktaki karakterlerle eşleşmesini söyler.
Komut takma adları
Shell takma adları kısayol komutlarıdır. Bazı takma adlar tek bir kelimedir, bazıları tek bir harftir. Takma adların listesini görmek için kullanıcıların yalnızca ·alias girmesi yeterlidir.
Komut geçmişi
Shell’ler zaman ve emek tasarrufu sağlayan pek çok yola sahiptir ancak özellikle kullanışlı bir özellik de komut geçmişidir. Komutları yeniden yazmak yerine, history komutu o oturumda kullanılan tüm komutları gösterir.
Dosya adı değiştirme
Dosya adı değiştirme, “globbing” olarak da bilinir. Bir sözcük ?, * veya [ gibi karakterler içerdiğinde ya da ~ ile başladığında shell sözcüğü bir desen olarak görür ve desene uyan dosya adlarının alfabetik bir listesiyle değiştirir.
Girdi/çıktı yönlendirme
Girdi/çıktı (i/o) yönlendirme, kullanıcıların standart girdi (stdin) ve standart çıktıyı (stdout) ekran, klavye veya bir dosya ile ilişkilendirmesini sağlar.
Boru hattı (piping)
Shell piping, bir komutun/sürecin/programın çıktısını başka bir komuta/sürece/programa gönderen başka bir yönlendirme türüdür. Bu, komutların/süreçlerin/programların eşzamanlı çalışmasını sağlar ve ekran ya da geçici metin dosyalarından geçmeye gerek kalmadan kesintisiz veri aktarımı sunar.
Shell değişken değiştirme
Shell özel karakterler içeren bir ifadeyle karşılaştığında, kodu kullanıcılar için daha tanıdık bir şeye çevirir. Bu işleme değişken değiştirmeleri ya da kısaca değişkenler denir.
Değişkenler daha deneyimli programcılar tarafından da kullanılır. Örneğin bir programcı, bir programı yürütmeden önce gerçek değerleri bilmiyorsa, kod yürütmeye hazır olana kadar yer tutucu olarak değişken kullanabilir.
Shell’ler nasıl farklılaşır
İki temel shell türü vardır: “sh” ve “bash.” Her ikisi de Unix işletim sistemi içinde çalışır. Shell, herhangi bir shell’de betik yazımı için genel bir addır. Adından da anlaşılacağı gibi bash (Bourne Again Shell), geliştirilmiş ve genişletilmiş bir shell’dir.
Bash daha fazla işlev için yükseltmeler kullanır, iş kontrolünü destekler, sh’den daha kullanışlıdır ve komut geçmişini destekler. Sh komut geçmişini desteklemez; betik yazımı herhangi bir shell’de çalışır ve daha taşınabilirdir.
Shell yıllar içinde nasıl evrildi
Yıllar içinde shell’ler hem evrildi hem de az çok aynı kaldı. Bourne shell, orijinal Thompson shell’den büyük bir adımdı ancak orijinal işlevlerin çoğu hâlâ duruyor. Elbette bilgisayarlar ve beklentilerimiz değişti.
Kullanıcı sayısı kadar shell olabilir; ama temelde iki tür shell vardır – komut satırları veya Bourne. Diğer her şey farklı bir dilden ziyade bir diyalekttir.
Unix shell’leri
Unix shell’leri orijinaldir ve hâlâ güçlü bir şekilde kullanılmaktadır. Unix shell’leri Unix ve Mac’ler gibi Unix ile ilişkili işletim sistemlerinde çalışır.
command-lines
command-lines (csh) en yaygın Unix shell’leridir. command-lines, takma adlar, cdpath, iş kontrolü, yol karma (path hashing), dizin yığınları vb. dahil olmak üzere etkileşimli işlerde üstünlük sağlar. Ayrıca düzenleme ve geçmiş özellikleri sunarlar.
Tenex command-line
Tenex command-line (tcsh), Caregia Melo University’den Ken Greer tarafından geliştirilmiştir. Tenex, orijinal command-line sürümüne göre bir iyileştirme olarak görülmüştür. Orijinal C’nin aksine Tenex, komut satırı düzenleme ve tamamlama gibi özellikler sunar. 1981’de tsch ve csh birleştirildi.
Korn shell’leri
Korn shell’leri (ksh) bir başka Unix shell’idir ancak C ve Bourne shell’leri arasında bir tür uzlaşmadır ve ikincisiyle geriye dönük uyumludur. Korn shell, 1980’lerin başında Bell Labs’te David Korn tarafından geliştirilmiştir.
Bourne again shell’leri
Bourne Again shell (Bash), Bourne shell’e yükseltme olarak Brian Fox tarafından 1990’ların sonunda GNU projesi için yazılmış açık kaynaklı bir Unix shell’idir.
Egzotik shell’ler
Hepsi C veya Bourne shell’leri üzerine inşa edilmiş olsa da, programcılar yüzlerce, hatta binlerce farklı diyalekt tasarlamıştır. Bazıları kullanışlıdır, bazıları ise sadece eğlencelidir.
Shell’i kimler kullanır?
Bilgisayar kullanan hemen herkes shell’den fayda görür; ancak özellikle sistem yöneticileri, DevOps ekipleri, programcılar ve veri bilimcileri için çok yararlıdır. Shell’ler görevleri ve uygulamaları otomatikleştirmek, paketler kurmak, verileri yedeklemek veya geri yüklemek ve elbette programlama için kullanılır.
Shell örnekleri
Shell’ler kullanıcının istediği kadar basit veya karmaşık olabilir. Örneğin basit bir bash selamlaması şöyledir: echo “hello $USER”; karmaşık shell betikleri ise neredeyse sınırsızdır. İşte bazı temel örnekler:
Uygun bir düzenleyici kullanarak bash içinde bir dosya oluşturun. Burada vi düzenleyicisini kullanıyoruz.
$ vi example.shKodu eklemeye başlamak için 'i' tuşuna basın:
#!/bin/bash
valid=true
count=1
while [ $valid ]
do
echo $count
if [ $count -eq 10 ];
then
break
fi
((count++))
done
Şu komutla çalıştırın:
bash example.sh $vi example2.sh#!/bin/bash
echo "Enter first number"
read x
echo "Enter second number"
read y
((sum=x+y))
echo "The result of addition = $sum"
bash example2.shShell ile kariyerler
Bir kariyer yolundan ziyade, shell betik yazımını bir veri bilimcisinin araç setinde kullanışlı bir araç olarak düşünün. Her türden veri profesyonelinin birden çok dili bilmesi gerekir (ya da en azından bilmelidir) ve shell betikleri bu dilleri daha verimli kullanmalarına yardımcı olur.
Yine de bazı şirketlerde özellikle shell betik yazımı gerektiren roller bulunur. Ortalama maaş yaklaşık 78.000 $’dır. Bununla birlikte, shell betikleri, altı haneli maaşlar getirebilen sistem yöneticisi gibi rollere giden bir yapı taşıdır.
Sonuç
Shell, her programlama dilinin içinden geçen bir ip gibidir. Karmaşık komutlar özlü ve sezgisel kısaltmalara indirgenir. Shell’i anlamak, herhangi bir veri bilimci veya bilgisayar mühendisi için önemli bir beceridir. Shell hakkında daha fazla bilgi edinmek için DataCamp’in Shell’e Giriş kursuna göz atın.
Shell SSS
Çekirdek nedir?
Çekirdek (kernel), işletim sisteminin en temel parçasıdır. Çekirdek, bilgisayarın programlarına bellek ve zaman ayırmaktan sorumludur ve sistem çağrılarına yanıt olarak iletişimi ve dosya deposunu (filestore) yönetir.
Shell nedir?
Shell, çekirdek ile kullanıcı arasındaki arayüzdür.
Shell’in faydaları nelerdir?
Shell’in verimli olduğunu ve kullanıcının sıkıcı birçok işini üstlendiğini zaten biliyoruz; bunun ötesinde shell’ler, kullanıcıların kendi ihtiyaçlarına göre betikleri özelleştirmesine olanak tanır.
Shell’in olumsuz yanları nelerdir?
Tek bir hata bile çok maliyetli olabilir ve tespiti zorlaşabilir. Ayrıca shell’ler işletim sistemleri arasında çok taşınabilir değildir.
Unix ve Linux arasındaki fark nedir?
Linux, Linus Torvalds tarafından geliştirilmiş bir Unix klonudur. Linux başlı başına bir işletim sistemi değildir; bir çekirdektir. Unix ise çekirdeği, shell’i ve programları içerir.
Linux ve Unix sistemlerde yaygın olarak hangi shell’ler kullanılır?
Bash, yani Bourne Again shell en yaygın kullanılan shell’dir; ancak hem Linux hem de Unix, command-lines, KornShells ve TCSH’yi de destekler.
Shell sözdizimi nedir?
Doğal dilde sözdizimi, sözcük ve ifadelerin nasıl düzenlendiğini ifade eder. Shell sözdizimi de buna çok benzer; işlem sırasını ifade eder.
Yorumlayıcı nedir?
Yorumlayıcı (interpreter), tekil ifadeleri makine koduna çevirir.
Derleyici nedir?
Derleyici (compiler), yüksek düzeyli programları daha karmaşık makine diline dönüştürür.
Bir shell dosyası nasıl çalıştırılır?
İzinleri şu şekilde ayarlayın: chmod+x script-name-here.sh
Ardından şu şekilde çalıştırın: ./script-name-here.sh veya sh script-name-here.sh.
