Shell Nedir ? Tüm Shell Bilgileri !!

Cosku-x

Yeni üye
1 Şub 2007
29
1
Sadece Yöneticilere Özel
1 Giriş

1.1 Shell nedir
1.2 Shell Scripts nedir?
1.3 Shell Scripts ler niçin kullanılır ?

2 Tek satırcılar

2.1 Yönlendirme
2.1.1 Dosya Tanımlayıcılar
2.1.2 Basit yönlendirme
2.1.3 Lots of Files!
2.1.4 Çıktıya Bağlanma
2.1.5 Ekler
2.2 Koşullar
2.3 Çevresel değişkenler
2.4 Quotes, Strings, and Expansion
2.4.1 Wildcards
2.4.2 The Tilde
2.4.3 listeler
2.4.4 Değişkenler
2.4.5 Quotes

3 Story Problemleri

3.1 Döngüler
3.1.1 For döngüsü
3.1.2 While ve until döngüleri
3.2 More Variables
3.2.1 Sayılar
3.2.2 Daha iyi string manüplasyonu
3.3 koşullar

4 Gelişmiş komutlar

4.1 Ön tanımlı değişkenler
4.1.1 sayılar
4.1.2 Dinlenme
4.1.3 Diziler
4.2 Ön tanımlı fonkisyonlar
4.3 Fonksiyonlar

5 Scriptlerin Ötesi

5.1 Readline güzelliği
5.2 Unix araçları
5.3 Ayar dosyaları

6 Örnekler

6.1 Background u değiştirme
6.2 Mesajlarınızı kontrol
----------------------------------

1 Giriş

Bu dokuman kabuk programlamayı tanıtım yazısıdır. Bu eksiksiz veya güvenilir bi kaynak anla**** gelmez ama aynı ifade ile ben ne hakkında konuştuğumun da oldukca farkındayım.. bu dokumandaki tüm örnekler aksi belirtilmedikçe bash syntax ı kullanır. Eğer burda bir script den bahs edersem bu scripti dokumanın sonundaki örnekler kısmına eklemeye çalışacağım.

1.1 Shell nedir?

Pek çok bilgisayarda komut satır arayüzü vardır. Bundan dolayı siz pek çok bilgisyarda komut satırı denen bir pencere açıp bilgisayardan yapmasını istediğiniz şeyi, komut şeklinde yazarbilirsiniz . Açtığınız her pencerede sizin yazdıgınız her karakteri okuyup bilgisyarın donanı****n anlayacağı gerçek komutlara çeviren bir program çalışır. Işte bu programa komut çevirici veya shell denir. DOS shell olarak command.com kullanır. Unıx sitemlerde pek çok shell var.

1.2 Shell Scripts= Kabuk Programı nedir?

Shell script shell de çalıştırılmak üzere komutlar topluluğu içeren bir text dosyasıdır. Bunu basit bir örneği windows .bat dosyasıdır. Gelişmiş shell ler bir script dosyasının içindeki daha fazla karmaşık veya uygun komut topluluğu nu destekler. Pek çok durumda bu script dosyasının içeriği komut satırına yazılabilir ve sonuç çalışan script le aynı olabilir.
Unix sistemlerde pek çok shell ortaya çıktıkdan beri scriptler bu shell lerden herhangi biri ile yazılabilir. Ve her shell farklı syntax ve farklı yeteneklere sahip oldugundan beri her shell scripti doğru davranış gösterebilmesi için hangi shell de yorumlanacağının tanımlanması gegekmektedir. Bu tanımlam script in ilk satırında yapılır .
Dosyanın ilk satırı şu şekildedir. *Shebang ve shell in tam adresi. (shell genellikle /bin içindedir. ). Stanadart bir örnek şu şekildedir.
#!/bin/bash
*( shebang terimi arkasında unlem olan diyez demek )
Ădet olarak hash işareti C++ deki // a benzer olark açıklama yapmak için kullanırlır. ( açıklma sonlandırıcı)

1.3 Shell Script ler niçin kullanılır?

Bazıları shell scriptlerine baktıklarında “hey bu başka bir programlama diline benziyor. Kullandığım programlama dili ile aynısı nı yapabilirim “ derler. Ve pek çok şeyi yapabilirle ama ss basit görevleri kolayca yapmaktadır. Örneğin siz resimlerin bulundugu bir klasöre bakıp , onlardan birini rastgele seçen ve onu desktop resmi olarak atayan bir program istediniz. Bunu yapması için bir c porgramı yazmalısınız. Bundan dolayı çeşitli sistem api larını kullanmalısınız, sonra desktop resim ayarları için Xwindows apilerini öğrenmelisiz . program hatalarını temizlemelisiniz , derlemelisiz ve sonrada bugları arayıp durmalısınız. Veya X ile gelen önceden yapılmış araçları kullanan 5 satırlık ss yazarsınız ( eger fantezi yaparsanız 12 satırlık da olabilir. )
Eğer mesajlarınıza bakmak ve bilgisayardan belli bir kritere göre sınıflandırılmış 5 mesajınızın
kopyasını size email ile göndemesini isterseniz , var logmesajı açan ve yazdığınız algoritma ile kriterler mesajları bulan , onları sayısını alıp memory e kaydeden , sonra tcp portu acıp mail server ınıza bağlanan ve smtp ile mesajlarınızı gönderen ve açtığı portu kapayan bir C programı yazmalsınız veya for döngüsü grep wc sort kullanan ve sonuçları sendmail e yollayan 7 satırlık ss yazarsınız
özetle ss yazmanın arkasında nokta sadece aynı komutları, defalarca tekrar tekrar yazmadan ve yüzüncü kez çalıştırdığınızda yazım hataları için endişelanmeden tekrar tekrar çalıştırabilmek değil fakat tekerleği yeniden keşfetmek yerine unixle gelen pek çok kullnılışlı aracı kullanmak tır.

2 Tek Satircilar

ss ler tek satırda pek çok şaşırtıcı şey yapabilri. hernekadar unix sistemlerde pek çok ss, 1 tane shell tanımlayıcı satır birde komplex komuttan oluşan toplam 2 satır dan da oluşsa siz onların gerçekk ss olup olmadıgını tartışabilirsiniz ama onlar herhalükarda bilinmesi güzel şeyler.

2.1 Yönlerdirme

2.1.1 Dosya tanımlayıcılar
Unix program lar çalıştırıldıklarında 3 dosya tanımlayıcı açılır. bunlar stdin stdout ve stdserr olarak isimlendirilirler.pek çok komut satırlı program ınputları stdin den okur hataları stderr a yazar ve diğer tüm şeyleri stdout a yazar. her dosya dosya tanımlayıcısının bir sayısı vardır. Bunlar Stdin ki 0 , stdout ki 1, stderr ki 2 dir. ( bunların önemini daha sonra görüceğiz. )
2.1.2 Basit Yönlendirme (sort )
Çok kullanışlı unix araçlarından biri sort dur. sort ınputları stdin den alır onları sıralar ve sınıflanmış formlar lar şeklinde stdout a yazar. Sıralanacak kelimlerden oluşan bir dosyanız oldugunu söylerseniz shell kullanarak sort ile yapabilrisiniz.
sort < file
bu dosyanın içeriğin sıralanmış şekilde çıktı verir. aynı zaman da siz komutun sonucunu baska bir dosyaya da yönlendirebilirsiniz.
sort < file > file.sorted
yönlendirmenin sırası genellikle çok önemli değildir. Şu şekilde de yapailirsiniz
sort > file.sorted < file
sadece stdout u yönlendirdiğinize dikkat edin bundan dolayı stderr hala terminal de duruyor.
eger siz strerr u da baska dosyaya yönledirmek isterseniz ( numarası 2 idi )
sort < file > file.sorted 2 > file.error
2.1.3 LotsofFiles=dosyaların hepsi ?!
Shell ile dosya okuma veya yazmak dan başka, tanımlayıcının alacağı numarasını belirtmek koşuluyla yeni dosyalarda açabilirsiniz. Meraklıysanız işte örnek:
sort < file > file.sorted 2 >file.error 3> file.3 4 < file2
2.1.4 Sonuçların Birleştirilmesi
Sonuçları birbirine bağlayabilrisiniz. Örneğin stdout ve stderr ü aynı dosyaya yazdırmak istiyorsunuz. :
Sort < file 1 >&2 > file.out

2.1.5 Ekleme

Buna benzer her yönlendirme yaptığınızda file.sorted dosyanızın her seferinde yeni kopyası ile yerdeğiştirdiğini farketmişsinizdir. Eğer bunu istemezseniz basitçe > yerine >> kullanın

2.2 Koşullar

komutların / programların çalışması bittiğinde shell e return value denen bir sonuç döndürürler. bu sonuc komutun duzgun çalışıp çalışmadıgını bıldirir. genel bir düşünce olarak bir komutun doğru çalışması ondan önceki komutun doğru çalışmasına bağlıdır. örneğin çalışması gereken önemli bir komutunuz olabilir ve siz bu komut çalışmazsa size email ile bildirilmesini istiyorsunuz veya komutlardan biri çalışmasa da programızınız durmasını istemediğiniz komutlar seriniz olabilir. Bunu yapmanızın yolu return value üzerinden çalışan koşullardır.
Koşullar geleneksel boolean operatorleridir. Bazı standart semboller kullanırsınız: || (or), $$ (and), ! (not), ve ; . komutlar kısa devre biçiminde yorumlanır. bundan dolayı a && b komutu a false sonuç döndürürse b çalışmaz fakat a ve b true döndürürse b çalıştırılır.
bu komut foo.c dosyasını derliyor ve hata yoksa sonuç dosyasını çalıştırıyor
gcc foo.c && ./a.out
burda ise foo.c derleniyor ve hata varsa vim ( lınux da editor ) ile düzenleniyor.
gcc foo.c I vim foo.c
siz bu ikiisni birbirine bağlayabilirsiniz. burda hata yoksa calıştıran , hata varsa edit için vim i acan komut bu.
gcc foo.c && ./a.out | vim foo.c

2.3 Çevresel Değişkenler

İşletim sistemlerinde ki kavramlardan biri de uzun süre önce bulunan çevresel değişkenlerdir.
Çevresel değişkenler tüm uygulamalar tarafından okunabilen bir degişken yığınına verilen isimdir.
dos prompt’ta veya unix shell’de set yazip enter’a basinca goreceginiz degişkenlerdir.
Çevresel değişkenleri şu şekilde atayabilirsiniz.
Export HISTCONTROL=”ignoredups”
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.