Linux Shell Script Yazma Eğitimi | Temel Bilgiler ve Başlangıç #1

Safak-Bey

Uzman üye
9 Ara 2021
1,794
1,982
Gereken Yerde
Selam değerli THT üyeleri ve forum dışı ziyaretçiler.
Bu seride sizlere Linux ortamında shell script yazmayı öğreteceğim. Kısa bir seri olacak. Serinin ilk konusunda ise temel bilgileri ve başlangıç kısımlarını anlatacağım.

shcgift.png


Temel Bilgiler
🟢 Shell
İşletim sisteminin yapısı gereği bilgisayar donanımı ile iletişim kuran bir yazılımımız vardır. Bu yazılımın adı Kernel. Kullanıcı doğrudan donanım ile iletişim kuramaz, bizim kernel' a ulaşarak komut göndermemiz ve işlemler yaptırmamız gerekir. Kullanıcı ile kernel arasındaki haberleşmeyi sağlayan programlara da shell türkçesiyle kabuk adı verilir.

🟢
Shell Türleri
BASH (Bourne Again Shell)
KSH (Korn Shell)
CSH (C Shell)
SH (Shell)
TCSH
ZSH
Linux dağıtımlarının büyük çoğunluğu BASH olarak gelir. Bizde bu seride bash' i ele alacağız. Shell Script dosyaları normal dosyalardır, uzantıları ".sh" olur. Windows' ta ise ".bat" uzantılı "Toplu İşlem Dosyası" diye geçer.

🟢
Terminal Tanıtımı
2e09497f969a753dc5857efc25ffefda0.png


🟢
Nano Editörü
Nano, gelişmiş bir metin editörüdür. Yeni başlayan kişiler için uygun bir editördür. Bu eğitim serisi boyunca nano editörünü kullanacağız. Sistemde nano yüklümü değil mi öğrenmek için "nano --version" diyebiliriz. Eğer kurulu değilse "sudo apt install nano" komutu ile kurulumu gerçekleştirebiliriz;

2512d957ffcbcc642.png
3e4f8f4acd2510b5d.png


"nano safak.txt" diyoruz. Eğer bulunduğumuz dizinde hali hazırda safak.txt varsa düzenleme için içine girecektir. Fakat yoksa yeni dosya oluşturup onun içine girecektir. Editörün altında bazı işaretler görüyorsunuz. Bunlar editörün içerisinde kullanabileceğimiz kısayollardır. "^" işareti klavyemizdeki "CTRL" tuşudur.

45d102192b5be0efd.png


Dosyada bir değişiklik yaptığımızda nano editör bize sağ üst köşede gösteriyor.

Dosya içerisinde herhangi bir değişiklik yaptım ve kaydetmek istediğimde CTRL+X diyorum. Kaydedip kaydetmeyeceğimi soruyor "E" dersem kaydedip çıkar. "H" dersem yaptığım değişiklikleri kaydetmeden çıkar. CTRL+C ile de çıkmaktan vazgeçerek tekrar düzenleme yerine geçer.

Örneğin CTRL+O ya bastığımda dosya için isim girmemi istiyor. İstersem isim girerim istersem aynı isimle devam ederim. Aynı isim ile devam edersem dosyanın içerisine ekleme yapar. Farklı bir isim girersem bu sefer nano editör dosyayı farklı bir isimle kaydedip kaydetmeyeceğimi soruyor. "E" dediğimde yeni bir dosyaya yazacaktır.

53d299043c16c8bc6.png


671bb9356df4be6e3.png


53.png


8.jpg


CTRL+W ile de arama yapabiliriz. Aramak istediğimiz anahtar kelimeyi yazıyoruz. Her ALT+W' ye bastığımda diğer anahtar kelimeyi bulacaktır. İstersem de tekrar CTRL+W' ye basarak yeni bir anahtar kelime belirleyebilirim.


1c3233cddbb51b03a.png


3.jpg


2bfe307d8436963ac.jpg


4973a35f1a914d2eb015a16886c73356a.png


🟢
Shell Tespit
Shell script yazmak için şuanda kullandığımız shell türünün ne olduğunu bilmemiz gerekiyor. Tespit etmek için "echo $SHELL" komutu ile kullandığımız shelli öğrenebiliriz. Sistemde kurulu diğer sheller için de "cat /etc/shells" komutu yeterli olacaktır. Şimdi bu öğrendiğimiz bilgiyi nerede kullanacağız? Shell scriptimizi yazarken en başta kullanacağız.

She-Bang
She-Bang, dosyanın en üstüne yazılıyor ve yazmış olduğumuz komutların hangi shelle gönderileceğini belirtiyor. Hazırsanız ilk sh dosyamızı oluşturalım. "nano 1.sh" diyerek dosyamızı oluşturuyoruz ve en ilk satıra "#!/bin/bash" şekilde she-bang' i yazıyoruz. Burada illaki /bin/bash değil sistemde kurulu olan diğer shelleri de yazabiliriz. Bu dosyayı kaydedip çalıştırdıktan sonra bize herhangi bir çıktı vermeyecektir. Çalıştırmak için "./1.sh" yeterli olacaktır.

3338694ea5e574df9.png
2c124e4ff7c3f1dd8.png


15cb525eec71587c6.png


🟢
Yorum Satırları
Şimdi ise shell scriptlerimizin içerisine nasıl açıklamalar ekleyeceğimizi göstereceğim. She-Bang tanımlamamızı yapmıştık zaten hemen onun altına geliyorum ve başına "kare (#)" işareti ekleyip yorumumu yazıyorum. Kaydedip çalıştırdıktan sonra herhangi bir çıktı vermediğini göreceksiniz. Yorum satırlarının özelliği budur. Sadece kaynak kodda gözükür.

Küçük bir echo komutu ile ekrana çıktı verelim. "echo "ilk script" " kaydedip çalıştırdıktan sonra ekranda ilk scriptim yazdığını göreceksiniz. Fakat eklediğimiz yorum satırı çıkmadı. İstersek echo komutunun sonuna da yorum ekleyebiliriz "echo "ilk script" # echo yorum satırı" yazıp çalıştırırsak yine sadece "ilk script" çıktısını alırız. Her yere yorum ekleyebiliriz fakat she-bang hariç. She-Bang' e kesinlikle bir ekleme yapamazsınız aksi takdirde dosyanız çalışmayacaktır.


1891ff4f79f50bfa7.png
21b6a885b5f135a8a1d175a47ae39077a.png




Shell Script Yazmaya Başlangıç
Şimdi "merhaba dünya" diyerek ilk shell scriptimizi yazacağız. nano merhaba.sh diyerek dosyamızı oluşturduk. Daha sonra she-bang' i yazdık. "echo merhaba dünya" yazarak ilk çıktımızı verdirebiliriz. ./merhaba.sh dediğimiz zaman "Erişim Engellendi" hatası alırız. Bunun için sh dosyamıza çalıştırma yetkisi vermemiz lazım "chmod +x merhaba.sh" diyerek yetkiyi verebiliriz. Şimdi "./merhaba.sh" dediğimiz zaman çıktımız ekranda gözükecektir.

Merhaba dünyayı farklı şekillerde yazalım ve cat merhaba.sh diyerek dosyamızı okuyalım. Hangi yazım şeklinin nasıl çıktı verdiğini tek tek inceleyelim.

echo2.png
echo1.png


Burada dikkatimizi çeken tırnak içerisinde yıldız(*) yaptığımızda normal yıldız işareti gözüküyor fakat yıldızı tırnak içerisinde yazdığımızda bulunduğum klasörün içindeki dosyaları yazdı. Yıldız işareti joker karakterdir.

🟢
Değişkenler
Değişkenleri içi boş kutuya benzetebiliriz. Biz bu kutunun içine kitap koyabiliriz daha sonra kitabı alıp çiçek koyabiliriz. İçerisi sürekli değişebilir fakat günün sonunda kutu aynı kalır. Değişkenler de aynı bu şekildedir. Biz x adında bir değişken tanımladığımızda ilk satırda değerini 1 yaparız ikinci satırda istersek 25 yaparız. İstediğimiz zaman değerini değiştirebiliriz ama adı hep x olarak kalacaktır.

Shell scriptte değişken tanımlamanın bazı kuralları vardır. Bunlar;
  • Türkçe harfler yasak
  • Özel karakter yasak (alt çizgi "_" harici)
  • Değişkenin değeri metinsel bir ifade ise "" içerisinde yazılmalıdır. Rakamsal bir ifade ise gerek yoktur.
Değişkenin adını yazdıktan sonra eşittir diyoruz ama herhangi bir boşluk bırakmamamız lazım örnek tanımlama AD_SOYAD="Safak Bey" bu şekilde tanımladıktan sonra çalıştırırsak herhangi bir çıktı vermeyecektir. Ekrana yazdırmak için echo komutunu kullanıyoruz. Fakat değişkeni yazdırırken değişkenin başına dolar işareti koyuyoruz "echo $AD_SOYAD" şeklinde. Bu sefer çalıştırırsak "Safak Bey" çıktısını alacağız.

Şimdi değişkenler ile basit bir uygulama yapalım. İlk olarak echo ile adınız nedir? diye soruyorum daha sonra altına gelip "read AD" diyorum. Bu read kodu kullanıcıdan veri almak için kullanılır, eğer python biliyorsanız aynı input gibidir. Girilen değeri okur ve AD değişkenine atar. Son olarak da "Merhaba, AD" şeklinde çıktı verdireceğim.

13c8667293370d40105ea6f5c735ca22a.png
25fc7c433eff25f1a.png


🟢
Döngüler
Döngünler, bizim işimizi kolaylaştıran kodlardır. Eğer bir kodu 20 kere yazacaksak 20 satır ile değil de basit bir döngü kodu ile 3-4 satırda yapabiliriz. İki tür döngü vardır; for ve while. İlk olarak for dan başlayalım. Tanımlaması ve örneğini aşağıda görebilirsiniz;

"for x in 1 2 3 4 5 6 7 8 9" şeklinde döngümüzü tanımlıyoruz. Bu döngü 1 den başlayacak 9 a kadar ekrana yazdıracak. Daha sonra altına "do" yazdık. Diğer dilleri biliyorsanız bunu parantez olarak düşünebilirsiniz. Kafanız karışmasın. Parantezimi do ile açtıktan sonra echo ile x' i yazdırdık ve done diyerek döngümüzü sonlandırdık.

144f258b2fd4f6a48.png
25ea11091394bcc83.png


Bir diğer yazımı da şöyle olabilir; "for ((x=1; x<10; x++))" bunun anlamı ise x' in değeri başlangıçta 1, koşulumuz x' in 10 olması ve x 10 olana kadar nasıl gidecek? birer, ikişer, üçer biz burada "x++" dediğimiz için tek te gidecek.

Şimdi de 3' lü çarpım tablosunu yapalım. Basit bir örnektir;

28cde798ef19577891ea6c5d76324c9e6.png
15db5cd7f57abf7616eaa8f4a331dc5bb.png


Evet for' u çözdüğümüze göre while' a başlayabiliriz. While döngüsünde istersek koşul ekleriz istersek direk koşul eklemeden döngüye sokarız. Koşullu while' ın tanımlaması şöyle olacaktır "while [ $x -le 10 ]" aynı mantık x 10 olana kadar bu döngüye gir koşulumuz bu. Daha sonra yine for' daki gibi do ile döngümüzü başlattık x' i yazdık. X' i yazdık fakat x'i arttırmayı unuttuk? bunu while döngüsünde koşul kısmına yazmazsınız. x' i yazdırdıktan sonra "let x++;" kodu ile x' i bir arttırdık. Son olarak done ile döngüyü sonlandırdık.


142174afb678b7491696692a7b0c9496c.png
2e09497f969a753dc7744415aad75c07c.png


Şimdi ise while ile bir örnek yapalım. GIRIS adında bir değişken tanımlıyorum. Değeri çok önemli değil "merhaba" yaptım. Daha sonra while döngüsü oluşturuyorum koşulu ise "$GIRIS" != "Hoşçakal" olacak. Daha sonra ise "(Çıkmak için Hoşçakal)" yaz diyorum ve girilen veriyi read ile GIRIS değişkenine atıyorum. Buradaki mantık GIRIS değişkeni Hoşçakal olmadıkça döngüye gir eğer GIRIS değişkeninin değeri Hoşçakal olursa döngüyü sonlandır.

1a7252f4385d4db085fadfbbf6274904d.png
258baa775b6e3818e90df59ff423552d5.png


🟢
Şart/Koşul (if, elif, else, case)
Koşul işlemleri gayet basit ve zevklidir. Bir örnekle hemen anlayacağınızı umuyorum. İlk olarak "Favori renginiz?" şeklinde çıktı veriyorum ve read kodu ile bu veriyi renk değişkenine atıyorum. Şimdi ise if yazarak koşulumu belirtiyorum "if [ $RENK == "kırmızı" ]" eğer renk değişkeninin değeri kırmızı ise... Daha sonra if koşulunu başlatmak için then kodunu kullanıyorum. Bu aynı döngüleri do ile açtığımız gibi. Koşullar da then ile açılır. Koşulu açtıktan sonra "Kırmızı güzel renktir." yazıyorum ve fi ile koşulu sonlandırıyorum.

Fakat kullanıcı kırmızı değil de mavi, sarı, siyah yazarsa ne diyeceğiz? Bunun için "elif" kodunu kullanacağız tanımlama ve yazdırma if ile aynı şekil olacaktır. Ancak fi' nin altına değil üstüne yazmamız gerek. Biz fi yazarak genel koşulları kapatmış olduk. Fi' nin içine yazacağız. "elif [ $RENK == "mavi" ]" şeklinde tanımlıyoruz ve "benim de en sevdiğim renk mavi" şeklinde çıktı veriyoruz. Bunu bir de sarı için yapalım.

Peki kullanıcı herhangi bir renk değil farklı bir şey yazarsa? mesela ismini. Bunun için de else kodunu kullanacağız. Else yapılacak en son eylemdir. Else için koşul girmemize gerek yok. Tanımlamasını direk "else" şeklindedir ve then yazmanıza da gerek yoktur. Program önce if den başlayarak elif' e kadar tüm koşulları tek tek kontrol eder. Eğer hiçbir koşul gerçekleşmiyorsa son çare else' yi kullanır.

Şimdi gibi ise bu programı biraz daha geliştirelim mesela döngü ile daha iyi yapabiliriz. Tekrar tekrar çalıştırmamıza gerek kalmaz. "while [ -n $RENK ]" şeklinde döngümüzü tanımlıyoruz ve döngünü başlangıç bitiş yerlerini de ayarlıyoruz. Bu while koşulu ise RENK değişkeni girilip enter a basılınca döngüye tekrar gir demek oluyor.

1900c024f7dc3bea67e00814dacd77515.png
2e8887aefebaa7484fd4ffed4d53ed935.png


Evet if koşullarını öğrendiğimize göre şimdi case koşuluna bakalım. Case tanımlaması biraz daha karışıktır. Aynı örneğin case ile yapılışını aşağıdan bakabilirsiniz;


168a8580255e171c0b047ecf32f06a3a6.png
24924f360f741d52b8fb389c911a43472.png


Gördüğünüz gibi elif şeklinde yeni bir koşul belirtmek yerine direk "kırmızı)" "mavi)" şeklinde belirtiyoruz ve else yerine de * işaretini kullanıyoruz. Case koşulunu kapatırken de tersini yani esac yazıyoruz.

🟢
Fonksiyonlar
Fonksiyon tanımlamak için "function fonk_adı() {kodlar}" şeklinde yazmamız gerekmekte. Fonksiyonumuzu çağırmak için de direkt fonksiyon adını yazmamız lazım.

Aşağıda merhaba adında bir fonksiyon oluşturdum ve bu fonksiyon for ile 5 kere "Merhaba Dünya Fonksiyonu" yazıyor. Fonksiyonu yazdıktan sonra fonksiyon adını yazarak çağırdım;

2893cc7e2fbfc42b89ff1a86ee5c35698.png
Ekran-goruntusu_2022-07-23_14-26-48a55312815089b84d.png


🟢
Hata Ayıklama
Eğer bir kod hatası yaptıysanız ve hatanızı bulamıyorsanız hata ayıklama işlemi size yardım edecektir. "bash -x script.sh" şeklinde çalıştırdığınızda tüm satırların doğru veya yanlış yazılıp yazılmadığını göreceksiniz.

Ekran-goruntusu_2022-07-23_14-33-53e08ff8ddafa6d6e1.png
Ekran-goruntusu_2022-07-23_14-34-144b913e0bb222e53d.png




Serimizin ilk konusu bu kadardı. İkinci bölümde görüşmek üzere. Esen kalın...
 

Blwe

Uzman üye
17 Şub 2021
1,585
1,645
Green/Moderasyon
Selam değerli THT üyeleri ve forum dışı ziyaretçiler.
Bu seride sizlere Linux ortamında shell script yazmayı öğreteceğim. Kısa bir seri olacak. Serinin ilk konusunda ise temel bilgileri ve başlangıç kısımlarını anlatacağım.

shcgift.png


Temel Bilgiler
🟢 Shell
İşletim sisteminin yapısı gereği bilgisayar donanımı ile iletişim kuran bir yazılımımız vardır. Bu yazılımın adı Kernel. Kullanıcı doğrudan donanım ile iletişim kuramaz, bizim kernel' a ulaşarak komut göndermemiz ve işlemler yaptırmamız gerekir. Kullanıcı ile kernel arasındaki haberleşmeyi sağlayan programlara da shell türkçesiyle kabuk adı verilir.

🟢
Shell Türleri
BASH (Bourne Again Shell)
KSH (Korn Shell)
CSH (C Shell)
SH (Shell)
TCSH
ZSH
Linux dağıtımlarının büyük çoğunluğu BASH olarak gelir. Bizde bu seride bash' i ele alacağız. Shell Script dosyaları normal dosyalardır, uzantıları ".sh" olur. Windows' ta ise ".bat" uzantılı "Toplu İşlem Dosyası" diye geçer.

🟢
Terminal Tanıtımı
2e09497f969a753dc5857efc25ffefda0.png


🟢
Nano Editörü
Nano, gelişmiş bir metin editörüdür. Yeni başlayan kişiler için uygun bir editördür. Bu eğitim serisi boyunca nano editörünü kullanacağız. Sistemde nano yüklümü değil mi öğrenmek için "nano --version" diyebiliriz. Eğer kurulu değilse "sudo apt install nano" komutu ile kurulumu gerçekleştirebiliriz;

2512d957ffcbcc642.png
3e4f8f4acd2510b5d.png


"nano safak.txt" diyoruz. Eğer bulunduğumuz dizinde hali hazırda safak.txt varsa düzenleme için içine girecektir. Fakat yoksa yeni dosya oluşturup onun içine girecektir. Editörün altında bazı işaretler görüyorsunuz. Bunlar editörün içerisinde kullanabileceğimiz kısayollardır. "^" işareti klavyemizdeki "CTRL" tuşudur.

45d102192b5be0efd.png


Dosyada bir değişiklik yaptığımızda nano editör bize sağ üst köşede gösteriyor.

Dosya içerisinde herhangi bir değişiklik yaptım ve kaydetmek istediğimde CTRL+X diyorum. Kaydedip kaydetmeyeceğimi soruyor "E" dersem kaydedip çıkar. "H" dersem yaptığım değişiklikleri kaydetmeden çıkar. CTRL+C ile de çıkmaktan vazgeçerek tekrar düzenleme yerine geçer.

Örneğin CTRL+O ya bastığımda dosya için isim girmemi istiyor. İstersem isim girerim istersem aynı isimle devam ederim. Aynı isim ile devam edersem dosyanın içerisine ekleme yapar. Farklı bir isim girersem bu sefer nano editör dosyayı farklı bir isimle kaydedip kaydetmeyeceğimi soruyor. "E" dediğimde yeni bir dosyaya yazacaktır.

53d299043c16c8bc6.png


671bb9356df4be6e3.png


53.png


8.jpg


CTRL+W ile de arama yapabiliriz. Aramak istediğimiz anahtar kelimeyi yazıyoruz. Her ALT+W' ye bastığımda diğer anahtar kelimeyi bulacaktır. İstersem de tekrar CTRL+W' ye basarak yeni bir anahtar kelime belirleyebilirim.


1c3233cddbb51b03a.png


3.jpg


2bfe307d8436963ac.jpg


4973a35f1a914d2eb015a16886c73356a.png


🟢
Shell Tespit
Shell script yazmak için şuanda kullandığımız shell türünün ne olduğunu bilmemiz gerekiyor. Tespit etmek için "echo $SHELL" komutu ile kullandığımız shelli öğrenebiliriz. Sistemde kurulu diğer sheller için de "cat /etc/shells" komutu yeterli olacaktır. Şimdi bu öğrendiğimiz bilgiyi nerede kullanacağız? Shell scriptimizi yazarken en başta kullanacağız.

She-Bang
She-Bang, dosyanın en üstüne yazılıyor ve yazmış olduğumuz komutların hangi shelle gönderileceğini belirtiyor. Hazırsanız ilk sh dosyamızı oluşturalım. "nano 1.sh" diyerek dosyamızı oluşturuyoruz ve en ilk satıra "#!/bin/bash" şekilde she-bang' i yazıyoruz. Burada illaki /bin/bash değil sistemde kurulu olan diğer shelleri de yazabiliriz. Bu dosyayı kaydedip çalıştırdıktan sonra bize herhangi bir çıktı vermeyecektir. Çalıştırmak için "./1.sh" yeterli olacaktır.

3338694ea5e574df9.png
2c124e4ff7c3f1dd8.png


15cb525eec71587c6.png


🟢
Yorum Satırları
Şimdi ise shell scriptlerimizin içerisine nasıl açıklamalar ekleyeceğimizi göstereceğim. She-Bang tanımlamamızı yapmıştık zaten hemen onun altına geliyorum ve başına "kare (#)" işareti ekleyip yorumumu yazıyorum. Kaydedip çalıştırdıktan sonra herhangi bir çıktı vermediğini göreceksiniz. Yorum satırlarının özelliği budur. Sadece kaynak kodda gözükür.

Küçük bir echo komutu ile ekrana çıktı verelim. "echo "ilk script" " kaydedip çalıştırdıktan sonra ekranda ilk scriptim yazdığını göreceksiniz. Fakat eklediğimiz yorum satırı çıkmadı. İstersek echo komutunun sonuna da yorum ekleyebiliriz "echo "ilk script" # echo yorum satırı" yazıp çalıştırırsak yine sadece "ilk script" çıktısını alırız. Her yere yorum ekleyebiliriz fakat she-bang hariç. She-Bang' e kesinlikle bir ekleme yapamazsınız aksi takdirde dosyanız çalışmayacaktır.


1891ff4f79f50bfa7.png
21b6a885b5f135a8a1d175a47ae39077a.png




Shell Script Yazmaya Başlangıç
Şimdi "merhaba dünya" diyerek ilk shell scriptimizi yazacağız. nano merhaba.sh diyerek dosyamızı oluşturduk. Daha sonra she-bang' i yazdık. "echo merhaba dünya" yazarak ilk çıktımızı verdirebiliriz. ./merhaba.sh dediğimiz zaman "Erişim Engellendi" hatası alırız. Bunun için sh dosyamıza çalıştırma yetkisi vermemiz lazım "chmod +x merhaba.sh" diyerek yetkiyi verebiliriz. Şimdi "./merhaba.sh" dediğimiz zaman çıktımız ekranda gözükecektir.

Merhaba dünyayı farklı şekillerde yazalım ve cat merhaba.sh diyerek dosyamızı okuyalım. Hangi yazım şeklinin nasıl çıktı verdiğini tek tek inceleyelim.

echo2.png
echo1.png


Burada dikkatimizi çeken tırnak içerisinde yıldız(*) yaptığımızda normal yıldız işareti gözüküyor fakat yıldızı tırnak içerisinde yazdığımızda bulunduğum klasörün içindeki dosyaları yazdı. Yıldız işareti joker karakterdir.

🟢
Değişkenler
Değişkenleri içi boş kutuya benzetebiliriz. Biz bu kutunun içine kitap koyabiliriz daha sonra kitabı alıp çiçek koyabiliriz. İçerisi sürekli değişebilir fakat günün sonunda kutu aynı kalır. Değişkenler de aynı bu şekildedir. Biz x adında bir değişken tanımladığımızda ilk satırda değerini 1 yaparız ikinci satırda istersek 25 yaparız. İstediğimiz zaman değerini değiştirebiliriz ama adı hep x olarak kalacaktır.

Shell scriptte değişken tanımlamanın bazı kuralları vardır. Bunlar;
  • Türkçe harfler yasak
  • Özel karakter yasak (alt çizgi "_" harici)
  • Değişkenin değeri metinsel bir ifade ise "" içerisinde yazılmalıdır. Rakamsal bir ifade ise gerek yoktur.
Değişkenin adını yazdıktan sonra eşittir diyoruz ama herhangi bir boşluk bırakmamamız lazım örnek tanımlama AD_SOYAD="Safak Bey" bu şekilde tanımladıktan sonra çalıştırırsak herhangi bir çıktı vermeyecektir. Ekrana yazdırmak için echo komutunu kullanıyoruz. Fakat değişkeni yazdırırken değişkenin başına dolar işareti koyuyoruz "echo $AD_SOYAD" şeklinde. Bu sefer çalıştırırsak "Safak Bey" çıktısını alacağız.

Şimdi değişkenler ile basit bir uygulama yapalım. İlk olarak echo ile adınız nedir? diye soruyorum daha sonra altına gelip "read AD" diyorum. Bu read kodu kullanıcıdan veri almak için kullanılır, eğer python biliyorsanız aynı input gibidir. Girilen değeri okur ve AD değişkenine atar. Son olarak da "Merhaba, AD" şeklinde çıktı verdireceğim.

13c8667293370d40105ea6f5c735ca22a.png
25fc7c433eff25f1a.png


🟢
Döngüler
Döngünler, bizim işimizi kolaylaştıran kodlardır. Eğer bir kodu 20 kere yazacaksak 20 satır ile değil de basit bir döngü kodu ile 3-4 satırda yapabiliriz. İki tür döngü vardır; for ve while. İlk olarak for dan başlayalım. Tanımlaması ve örneğini aşağıda görebilirsiniz;

"for x in 1 2 3 4 5 6 7 8 9" şeklinde döngümüzü tanımlıyoruz. Bu döngü 1 den başlayacak 9 a kadar ekrana yazdıracak. Daha sonra altına "do" yazdık. Diğer dilleri biliyorsanız bunu parantez olarak düşünebilirsiniz. Kafanız karışmasın. Parantezimi do ile açtıktan sonra echo ile x' i yazdırdık ve done diyerek döngümüzü sonlandırdık.

144f258b2fd4f6a48.png
25ea11091394bcc83.png


Bir diğer yazımı da şöyle olabilir; "for ((x=1; x<10; x++))" bunun anlamı ise x' in değeri başlangıçta 1, koşulumuz x' in 10 olması ve x 10 olana kadar nasıl gidecek? birer, ikişer, üçer biz burada "x++" dediğimiz için tek te gidecek.

Şimdi de 3' lü çarpım tablosunu yapalım. Basit bir örnektir;

28cde798ef19577891ea6c5d76324c9e6.png
15db5cd7f57abf7616eaa8f4a331dc5bb.png


Evet for' u çözdüğümüze göre while' a başlayabiliriz. While döngüsünde istersek koşul ekleriz istersek direk koşul eklemeden döngüye sokarız. Koşullu while' ın tanımlaması şöyle olacaktır "while [ $x -le 10 ]" aynı mantık x 10 olana kadar bu döngüye gir koşulumuz bu. Daha sonra yine for' daki gibi do ile döngümüzü başlattık x' i yazdık. X' i yazdık fakat x'i arttırmayı unuttuk? bunu while döngüsünde koşul kısmına yazmazsınız. x' i yazdırdıktan sonra "let x++;" kodu ile x' i bir arttırdık. Son olarak done ile döngüyü sonlandırdık.


142174afb678b7491696692a7b0c9496c.png
2e09497f969a753dc7744415aad75c07c.png


Şimdi ise while ile bir örnek yapalım. GIRIS adında bir değişken tanımlıyorum. Değeri çok önemli değil "merhaba" yaptım. Daha sonra while döngüsü oluşturuyorum koşulu ise "$GIRIS" != "Hoşçakal" olacak. Daha sonra ise "(Çıkmak için Hoşçakal)" yaz diyorum ve girilen veriyi read ile GIRIS değişkenine atıyorum. Buradaki mantık GIRIS değişkeni Hoşçakal olmadıkça döngüye gir eğer GIRIS değişkeninin değeri Hoşçakal olursa döngüyü sonlandır.

1a7252f4385d4db085fadfbbf6274904d.png
258baa775b6e3818e90df59ff423552d5.png


🟢
Şart/Koşul (if, elif, else, case)
Koşul işlemleri gayet basit ve zevklidir. Bir örnekle hemen anlayacağınızı umuyorum. İlk olarak "Favori renginiz?" şeklinde çıktı veriyorum ve read kodu ile bu veriyi renk değişkenine atıyorum. Şimdi ise if yazarak koşulumu belirtiyorum "if [ $RENK == "kırmızı" ]" eğer renk değişkeninin değeri kırmızı ise... Daha sonra if koşulunu başlatmak için then kodunu kullanıyorum. Bu aynı döngüleri do ile açtığımız gibi. Koşullar da then ile açılır. Koşulu açtıktan sonra "Kırmızı güzel renktir." yazıyorum ve fi ile koşulu sonlandırıyorum.

Fakat kullanıcı kırmızı değil de mavi, sarı, siyah yazarsa ne diyeceğiz? Bunun için "elif" kodunu kullanacağız tanımlama ve yazdırma if ile aynı şekil olacaktır. Ancak fi' nin altına değil üstüne yazmamız gerek. Biz fi yazarak genel koşulları kapatmış olduk. Fi' nin içine yazacağız. "elif [ $RENK == "mavi" ]" şeklinde tanımlıyoruz ve "benim de en sevdiğim renk mavi" şeklinde çıktı veriyoruz. Bunu bir de sarı için yapalım.

Peki kullanıcı herhangi bir renk değil farklı bir şey yazarsa? mesela ismini. Bunun için de else kodunu kullanacağız. Else yapılacak en son eylemdir. Else için koşul girmemize gerek yok. Tanımlamasını direk "else" şeklindedir ve then yazmanıza da gerek yoktur. Program önce if den başlayarak elif' e kadar tüm koşulları tek tek kontrol eder. Eğer hiçbir koşul gerçekleşmiyorsa son çare else' yi kullanır.

Şimdi gibi ise bu programı biraz daha geliştirelim mesela döngü ile daha iyi yapabiliriz. Tekrar tekrar çalıştırmamıza gerek kalmaz. "while [ -n $RENK ]" şeklinde döngümüzü tanımlıyoruz ve döngünü başlangıç bitiş yerlerini de ayarlıyoruz. Bu while koşulu ise RENK değişkeni girilip enter a basılınca döngüye tekrar gir demek oluyor.

1900c024f7dc3bea67e00814dacd77515.png
2e8887aefebaa7484fd4ffed4d53ed935.png


Evet if koşullarını öğrendiğimize göre şimdi case koşuluna bakalım. Case tanımlaması biraz daha karışıktır. Aynı örneğin case ile yapılışını aşağıdan bakabilirsiniz;


168a8580255e171c0b047ecf32f06a3a6.png
24924f360f741d52b8fb389c911a43472.png


Gördüğünüz gibi elif şeklinde yeni bir koşul belirtmek yerine direk "kırmızı)" "mavi)" şeklinde belirtiyoruz ve else yerine de * işaretini kullanıyoruz. Case koşulunu kapatırken de tersini yani esac yazıyoruz.

🟢
Fonksiyonlar
Fonksiyon tanımlamak için "function fonk_adı() {kodlar}" şeklinde yazmamız gerekmekte. Fonksiyonumuzu çağırmak için de direkt fonksiyon adını yazmamız lazım.

Aşağıda merhaba adında bir fonksiyon oluşturdum ve bu fonksiyon for ile 5 kere "Merhaba Dünya Fonksiyonu" yazıyor. Fonksiyonu yazdıktan sonra fonksiyon adını yazarak çağırdım;

2893cc7e2fbfc42b89ff1a86ee5c35698.png
Ekran-goruntusu_2022-07-23_14-26-48a55312815089b84d.png


🟢
Hata Ayıklama
Eğer bir kod hatası yaptıysanız ve hatanızı bulamıyorsanız hata ayıklama işlemi size yardım edecektir. "bash -x script.sh" şeklinde çalıştırdığınızda tüm satırların doğru veya yanlış yazılıp yazılmadığını göreceksiniz.

Ekran-goruntusu_2022-07-23_14-33-53e08ff8ddafa6d6e1.png
Ekran-goruntusu_2022-07-23_14-34-144b913e0bb222e53d.png




Serimizin ilk konusu bu kadardı. İkinci bölümde görüşmek üzere. Esen kalın...
Elinize sağlık hocam. :)
 
Ü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.