Kabuk(Shell) programlama temelleri

'Adige

Administrator
26 Eki 2012
9,430
781
30
root@adige~#
Merhabalar ;

Arkadaşlar iyi forumlar dilerim sizlere Kabuk(Shell) programlama temelleri hakkında bilgiler aktaracağım hemen anlatıma geçelim



=Kabuk(Shell) Nedir ?=​
Kabuk(Shell) , Kullanıcı ile bilgisayar arasında bir yazılım sistemidir​

=Kabuk(Shell) Programlama Nedir?=​
Kabuk programlama komut satırı(command line) üzerinden tek tek yaptığımız işlemlerin, bir dosya içerisine kaydedilip toplu bir şekilde yapılmasını sağlar. bunların bir çok kabuk programları vardır aşağıda belirtilmiştir​
Sh
Bourne Shell
Steve Bourne tarafından geliştirilmiş orijinal Unix kabuğudur.

Csh
C-Shell
Berkeley Üniversitesinde C dili ile geliştirilmiştir.

Ksh
Korn Shell
David Korn tarafından geliştirilmiştir. Yetenekleri itibarıyla en etkili kabuk olarak bilinir.

Bash
Bourne Again Shell
Free Software Foundation tarafından geliştirilmiştir.

Tcsh
T-Shell
Geliştirilmiş C-Shell olarak bilinir.

Zsh
Z-Shell
Bash,ksh,tcsh ile benzerlikler gösteren bir kabuktur.​
=Dosya Uzantısı =
Oluşturduğumuz kabuklar(Shell) ".sh" uzantılıdır. bu genelde böyle değildir istediğimiz uzantıda oluşturabilmekteyiz​
=Kabuk(Shell)Programları =​
Kabuk programları birden çok Linux komutunudu tutan kısımdır.Bir kabuk programı çalıştırma bitini 1 yapmak suretiyle
"çalıştırılabilir" hale getirilir. chmod komutu yardımıyla bir programı çalıştırılabilmektedir​
$ chmod +x komut-ismi
Şeklinde yazılmaktadır. Bundan sonra program ismini yazıp "Enter"a basabilirsiniz ardından bir program Linux komutu olarak çalışacaktır​
$ cat calistir
echo -n "Tarih : "
date
$ chmod +x calistir
$ calistir
Tarih : Sun Dec 8 16:59:52 EET 2018
Yukarıdaki örnekte "çalıştır" isimli iki satır oluşturdu ve çalıştırdı​
=Global Değişkenler=
Kabuk(Shell) Programlarken bazı değişkenler vardır bunlar kısaca;​
$ echo $USER
$ echo $HOSTNAME
$ echo $GDMSESSION
Şeklindedir bu komutların tamamnızı görüntülemek için ise Komut satırına;​
Yazılımaktadır​
=Değişkenlerin Kullanımı=
Bir değişkene değişken tanıması yapıldığında sistem tarafından tanınmaktadır. Değişikenler alfabetik veya nümerik karakterlerden oluşabilirler fakat bir değişken sayısal bir değer ile başlayamazlar. Bunların dışında değişken isminin içinde "_" karakteri de bulunabilir. Bir değişkene değer
ataması "=" işareti yardımıyla yapılır.​
$ mesaj="TurkHackTeam"
Olan bir değişkende başına "$" konularak ulaşılabilmektedir Aşağıda ise echo komutu ile ekrana yazdırılmaktadır​
$ echo $mesaj
TurkHackTeam
$ echo Merhaba $mesaj
Merhaba TurkHackTeam
Aynı değişkeni değişken kullanmadanda yapabilmekteyiz​
$ echo "Merhaba TurkHackTeam"
Merhaba TurkHackTeam
Şeklinde kullanılmaktadır​
=Giriş/Çıkış İşlemleri =
Her hangi bir Kabuk (Shell) Çalıştırılırken kullanıcınında bilgileri girmesi sağlanabilir. Bu tür işlemlerde read komutu kullanılmaktadır klavyeyi okur ve değişkene atama yapar bunu bir örnek ile inceleyelim​
echo Bir sayi giriniz..
read sayi
echo Girilen sayi : $sayi
Bazı durumlarda değerler özel karakter içerebilmektedir bu durumda istenilen duruma katlanmak gerekebilir. Aşağıda belirtmiş olduğum örneği kullanarak "*" işaretine basmanız yeterli olacaktır​
echo Bir karakter giriniz
read a
echo Girdiginiz karakter : $a
"echo" komutundan gelecek olan yıldız işareti bulunduğumuz dizindeki bütün dosyaları listeleme yapacaktır​
= Aritmetik İşlemler =
Kabuk(Shell)"de matematiksel işlemlerde büyük olasılıkla sınırlamalar getirilmiştir . Tamsayı değişkeni
dışında matematiksel değişken kullanmak için bu işlemler için geliştirilmiş ve kolaylıklar
sağlayan "awk" veya "bc" kullanabilirsiniz. Aritmetik işlemler için ise "eval" komutu veya (builtin) komutu olan "let" komutunu kullana bilir kullanımı aşağıda olduğu gibidir
$ let "degisken=TurkHackTeam"
Örnek olarak bir değişken tanıyalım iki sayıyı çarpıp çıkan sonucu başka değişkene yazdıran kodu yazalım​
$ let "carpim=2*2"
$ echo $carpim
Aritmetik değişken tanımlamanın diğer bir yolu da typeset komutu kullanmaktır.​
$ typeset -i sonuc (sonuc degiskeni bir dogal sayi icerecek)
$ a=40 ; b=30 (iki komutu ayirmak icin ; kullanilabilir)
$ sonuc=a*b
$ echo $sonuc
1200
Normal olarak bash kesme ve bölme işlemi yapamaz bunun için bc kullanabiliriz BC Bir hesap makinası olarak düşünebiliriz​
$ a=3.749
$ b=22.34
$ echo “$a*$b” | bc
83, 752
=if-else Kalıbı ve Kontrol İşlemleri =
Hemen her programlama dilinde olan if kalıbı bir Linux komutunun çalışmasını kontrol
(test) eder. İf değişken tanımlamak else ise değil ise bunu kullan olarak adlandırılmaktadır.
bunlara bir örnek verelim​
if linux komutu
then
komut1
komut2
...
else
komut1
komut2
...
İf komutu genellikle kendisine test komutu ile birlikte kullanım sağlar . bununun ile mantıksal işlemler yapılabilmektedir . sayılar ve diziler ilede karşılaştırma yapılabilir test komutuna bir örnek verelim​

$ test 5 -eq 3
$ a="tht"
$ test $a="tht"
komutun işletilmesinin ardından kabuğa bir değer döndürülür. Bu değer komut başarılı olarak
işletilmişse 0, değilse 1'dir. Son çalıştırılan tüm Linux komutlarının çıkış değeri $?
değişkeninde tutulur. test komutunun çıkış değeri de bu yolla öğrenilebilir.​
$ sayi=4
$ test $sayi -eq 4
$ echo $?
0
$ test $sayi -lt 2
$ echo $?
test komutu yerine parantezde kullanılabilir yukarıdaki iki örnekte parantez olarak kullanılabilir​
$ [ $sayi -eq 4 ]
$ [ $sayi -lt 12 ]
Dikkat edilmesi gereken bir nokta köşeli parantez kullanırken araya boşluk bırakmaktır .test komutunun sıkca kullanılan diğer seçenekleri aşağıda olduğu gibidir ;​


if komutunun test ile birlikte kullanılabildiğini daha önce belirtmiştik aşağıda kullanımı ile ilgili örnek yer almaktadır​
#!/bin/bash
echo "0 ile 20 arasinda bir sayi secin"
read sec
if [ $sec -lt 10 ]
then
echo "Secilen sayi tek basamakli"
else
echo "Secilen sayi cift basamakli"
fi
Ve her if komutunun sonunda bir fi komutu kullanılmaktadır​
=case Kalıbı=
Bir alternatif arasından seçim yapılırken kullanılan komut ise case"dir bir eşleştirme
gördüğü anda belirli bir komut kümesini işleme sokar. case yapısı case komutu ile başlar, bu komutun sonunda ise esac komutu kullanmak zorunludur​
case anahtar-sozcuk in
secenek1)
komutlar
;;
secenek2)
komutlar
;;
*)
komutlar
;;
esac
Bu komut seçeneklerinin arasında özel komut kullanılabilir burada "*" kullanımı ise isteğe bağlıdır buna örnek olarak aşağıda belirtmiş olduğum komutlar kullanılabilir​
#!/bin/bash
clear
echo "1. ekrani temizle"
echo "2. sistemdekileri goruntule"
echo "3. dizindeki dosyalari goster"
echo -n "Secenegi giriniz : "
read secenek
case $secenek in
1)
clear
;;
2)
w
;;
3)
ls -al
;;
*)
echo Hatali secenek
esac
=Döngüler =
Döngülerde while ve for komutları kullanılmaktadır While döngüsü bir şart sağlanıyor iken sürekli içindeki komutları çalıştırır. Kelime anlamı olarak "olduğu müddetçe" anlamı çıkar. for ise kullanılarak oluşturulacak döngü yapısı, işlemlerin tekrar sayısının önceden belli olduğu durumlarda kullanılır.​
=while-do Döngüsü =
while anahtar kelimesi ile adlandırılır önce koşulu sağlayığ sağlamadığına bakılır bu döngünün sonunda ise done komutu kullanılır​
while kosul ifadesi
do
komutlar
done
"while" döngüsü if ve for döngüleri ile birliktede kullanılmaktadır diğer örneğimize geçelim aşağıda 1 den 100 e kadar sayan sayıları ekrana çıktı olarak yazmasının komutu bulunmaktadır​
#!/bin/bash
deger=0
while [ $deger -lt 100 ]
do
deger=$((deger+1))
echo $deger
done
=for-do döngüsü =
iste dahilindeki tüm değerlere sırayla erişimi sağlar. for komutundan sonra yeralan liste
sırayla kullanılır ve herbirisi için döngü çalıştırılır. örneği aşağıda belirtilmiştir​
for degisken1 in deger1 deger2 ... degerX
do
komutlar
done
örneklerimize devam ederim diğer örneğimizde ekrana bi dizi kelimesi yazıyor döngü boyunda T U R K kelimeleri TurkHackTeam değişkenine kopyalıyor ve döngünün bilgilerini ekrana yazdırıyor​
for T U R K
do
echo $TurkHackTeam
done
for-do döngüsü, dosya isimleri üzerinde yapılan işlemlerde de büyük kolaylıklar sağlar.
Bunun için özel karakterlerden yararlanmak da olasıdır. Örnek olarak * karakteri o anki
çalışma dizini içindeki tüm dosyaları seçer.​
for a in * ; do
file $a
done
 
Son düzenleme:

GoodIP

Katılımcı Üye
19 Ağu 2017
257
0
Linux
Elinize sağlık bu tarz konular içeren bi pdf varmı elinizde varsa öm atabilir misiniz ?
 
Ü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.