Cemre Acar
Linux Script Temelleri ve Script Yazma

Linux Script Temelleri ve Script Yazma

Bu yazımda Linux Shell nedir, Linux script yazma, Linux üzerinde bir Script nasıl yazılır tarzındaki tüm sorularınıza cevap bulacaksınız. Ancak tabii ki Linux giriş seviyesindeki komutları , temel linux işleyişini bilmeniz gerekmekte. Daha önceki yazılarımda Linux’a giriş niteliğinde olan, Temel Linux Komutları adlı yazımı ve UNIX için geliştirilen en önemli kabuklardan biri olan Bash kabuğunu, Linux Bash adlı yazımı yayımlamıştım. Bu kaynakların devamı olarak da bu yazımda Shell Scripting'e değineceğim.

Öncelikle bash kabuğunun güçlü programlama özelliklerine sahip olduğunu ve tıpkı bir modern programlama dili gibi değişkenler , döngüler , mantıksal operatörlerin kullanıldığını belirtmek isterim. Bu sayede karmaşık programlar oluşturabiliyoruz. Komutları oluşturacağımız herhangi bir dosyaya yazıyor ve herhangi bir editör yardımı ile düzenleyebiliyoruz. Yani klasik programlama mantığı diyebiliriz. Kodu yazdıktan sonra çalıştırma izni vermemiz gerekiyor. Linux izinlerinden zaten bahsetmiştik burada bildiğinizi varsayıyorum. Son olarak da kabuğun script’e erişmesini sağlamamız gerekiyor.

Öyleyse ilk scriptimizi oluşturalım. İlk olarak touch komutu ile myscript.sh adında bir dosya oluşturuyorum ve içerisine aşağıdaki komutları veriyorum.

#!/bin/bash
echo "Merhaba Linux"

Bu işlemden sonra kaydedip kabuğa dönüyorum ve çalıştırma iznini vereceğim.

chmod + x myscript.sh

İznimizi de başarıyla verdiysek çalıştırıp sonuca bakalım.

./myscript.sh

komutu ile ilk shell script dosyamızın çalıştığını ve ekrana Merhaba Linux yazısının çıktığını görebiliriz. Dosyamızın içeriğini inceleyecek olursak ilk satırdaki yorum satırı gibi görünen satır aslında özel bir satırdır. Buna sh-bang (#!) denir ve bash komut dosyasını yorumlayacak olan dosyanın mutlak yolunu belirtir. Bu satır önemlidir çünkü bu satır olmadan shell , scriptimizi nasıl çalıştıracağını bilemez. 



Değişkenler

Değişkenler girdiğimiz değerleri alan veya programın çalışmasıyla bazı değerlerin atandığı veri tutuculardır. Bir değişken , harf ve sayıdan oluşabilir ancak sayı ile başlayamaz.

Örneğin :

degisken = “Cemre” 

Değişken belirlendikten sonra kullanmak için aşağıdaki şekilde komut veriyoruz.

echo $degisken

Değişkenler 2 türden oluşur ve bunlar Yerel değişkenler ve Global değişkenlerdir. Yerel değişkenler yalnızca oluşturuldukları kabuğa özeldir ve yalnızca orada çalışır. Global değişkenler ise alt kabuklara aktarılır ve tümünde çalışır. Ayrıca env komutu ile global değişkenleri görüntüleyebilirsiniz.

Ekrana yazmak için ayrıca echo komutunun farklı kullanımları da mevcuttur.

Örneğin :

ad = “Cemre”
echo “Benim adım $ad”

Çıktımızı biçimlendirmek için ayrıca printf komutunu da kullanabilirsiniz.

printf “Elmanın Kilosu %.2f\n” 2.5

Yukarıdaki ( \ ) karakteri kaçış ifadesidir ve ; & () {} | <> $ * [ ] ? karakterleri kullanıldığında bu karakterlerden sıyrılmamıza yarar. Ayrıca kullandığımız 2f ifadesi virgülden sonraki ondalığı ifade eder.

Diziler

Diziler , değişkenlerinizi liste halinde tek bir değişkende ifade etmenize yarar ve declare -a komutu ile belirlenir.
Örneğin :

declare -a Meyveler
Meyveler=(Elma Armut Muz Kiraz) 

komutlarıyla belirleriz. Ekrana bastırmak için ise aşağıdaki komutu çalıştırabiliriz.

echo ${Meyveler[1]}

Bu komut ile dizideki ilk elemanımız olan Elma’ya erişmiş olduk. Ayrıca aşağıda dizilerle kullanabileceğimiz pek çok farklı komut yer alıyor.

echo ${#Meyveler[1]}  Dizinin ilk elemanının kelime uzunluğunu gösterir.
echo ${#Meyveler[*]} Dizinin kaç elemanı olduğunu gösterir.
echo ${Meyveler[*]} Dizinin tüm elemanlarını gösterir.


Klavyeden Giriş

Bir input oluşturmak için read komutunu kullanırız.

read yasiniz

komutunu uyguladığımızda kabuk bizden bir cevap bekleyecek ve bu cevap $yasiniz değişkeninde tutuluyor olacak. Bu değeri görebilmek için yine

echo $yasiniz 

komutunu kullanabiliriz. Ek olarak , değişkenler ile aritmetik işlemlere değinelim.
Bir değişkeni toplama işlemine sokmak için aşağıdaki işlemi bir vermeyi deneyelim.

i=3
echo $i+1

Ekrana çıkan ise “3+1” oldu. Yani bunu bir string olarak algıladı. Bu tip işlemleri yapabilmemiz için let komutunu kullanabiliriz.

Örneğin :

i=3
let i=$i+5
echo $i

Cevabın 8 olduğunu görebiliriz. Ancak bash yalnızca integer rakamlar ile aritmetik işlemleri destekler. Örneğin float tipindeki rakamlar ile bir aritmetik işlem yapabilmemiz için bc ya da awk kullanmamız gerekir. Aşağıda biraz bc kullanımına değinelim. 

echo “scale=2;18/5” | bc 

komutu ile istediğimiz float değeri ekrana basabiliriz. Burada bilinmesi gereken bir nokta scale. Bu komut ile virgülden sonra kaç rakama kadar duyarlı olduğumuzu belirtiriz. Yukarıdaki örnekte scale=2 belirlediğimizde bize 0.00 formatında bir sonuç üretiyor ancak scale=3 verseydik 0.000 formatını elde edecektik.

Parametreler ve Komut Satırı Argümanları

Bu argümanları şu şekilde listeleyebiliriz.
$0 = Yazdığınız scriptin ismini verir.
$# = Kullandığınız parametrelerin sayısını verir.
$* = Tüm parametreleri listeler.
$@ = Tüm parametreleri listeler.

Bunların nasıl kullanıldığına örnekler üzerinden değinelim. Bir script dosyası açalım. Ben yine myscript.sh dosyası adında bir script dosyası ile çalışacağım. Dosyamın içeriği aşağıdaki şekilde olacak.

#!/bin/bash

echo Program Adı : $0 
echo İlk Parametre : $1 
echo İkinci Parametre : $2

Bu şekilde kaydedip çıkıyorum. Şimdi bu dosyamı çalıştırırken dosyanın yanına değerlerimi veriyorum. Aşağıdaki şekilde olmalı.

./param.sh Cemre Acar

Bu komutu verdiğimizde program adının , ilk ve ikinci parametrelerin ekrana basıldığını görebiliyoruz. Yine farklı bir örnek olması için aşağıdaki şekilde dosyamızı düzenleyelim.

#!/bin/bash 
echo Program Adı : $0
echo Parametre Sayısı : $#
echo Tüm parametreler : $*

ve ardından değerlerimi veriyorum , burada değişken sayısı belirtmedik yani ben bir cümle de yazabilirim.

./param.sh Bu bir Linux Script

Bu komutun sonucunda da parametre sayımızın 4 ve tüm parametreler olarak verdiğimiz cümlenin ekrana basıldığını görebiliriz.



Mantıksal Operatörler

Programlama dillerinden de bildiğimiz bu operatörleri burada da benzer şekillerde kullanıyoruz. Aşağıdaki örneklerde çeşitli kullanımlarına değindim.
Not : False “1” True ise “0” olarak değerlendirilir.

Örneğin :

let x=5; let y=9; 

Eşitlik Kullanımı ;

(( $x == $y));
echo $?

Sonuç = 1

Karşılaştırma Kullanımı ;

(( $x < $y));
echo $? 

Sonuç = 0

Karşılaştırma Kullanımı ;

(( $x > $y));
echo $?

Sonuç = 1

Ve Kullanımı ;

(( $x > $y && $x < $y));
echo $? 

Sonuç = 1

Yada (or) Kullanımı ;

(( $x > $y || $x < $y));
echo $? 

Sonuc = 0

If Else Yapısı ve Döngüler

İlk olarak if yapısından bahsedelim. If kullanabilmemiz için aşağıdaki şekilde bir yapı oluşturmamız gerekiyor.

if [ expression ]
then
   Statement(s) to be executed if expression is true
else
   Statement(s) to be executed if expression is not true
fi

If yapısı ile ilgili şu küçük örneğe de bir bakalım.

x=8
y=11
if [ $x == $y ]
then
   echo "a değişkeni b değişkenine eşittir."
else
   echo "a değişkeni b değişkenine eşit değildir."
fi

Ve bir başka yapı case kullanımı aşağıda görüldüğü gibi kullanılıyor. 

case değişkeniniz in
deger1)
     yapmak istediğiniz
;; 
deger2) 
     yapmak istediğiniz
;; 
esac

Kullanımını öğrendiğimize göre küçük bir örnek yapalım. Ben sadece toplama ve çıkarma işlemi yapan bir hesap makinesi oluşturdum. Bu hesap makinesini isterseniz siz daha da geliştirebilirsiniz. Dosyanın içeriği aşağıdaki şekilde.

#!/bin/bash 

echo "Minik Hesap Makinasına Hoşgeldiniz :)"
echo "İşlem yapmak için lütfen ilk sayıyı ve ardından ikinci sayıyı girin !"
read ilk
read iki
echo "Toplama işlemi için "+" Çıkarma işlemi için "-" girin !"
read islem

case $islem in
"+")
     let sonuc=ilk+iki 
     echo $sonuc;; 
"-")
     let sonuc=ilk-iki
     echo $sonuc;;
esac

Bu örneğimizle if yapısını pekiştirdiğimize inanıyorum.



Şimdi biraz da döngülerden bahsedelim. İlk olarak While döngüsü ile başlayalım. While döngüsü bir koşul bildirmemizi bekler aşağıdaki şekilde bir yapıya sahiptir.

While (Şartınız) 
Do 
     Yapmak istediğiniz 

Ek olarak döngüden çıkmak için break kullanabilirsiniz. 
Örneğin :

#!/bin/bash

sayi=0
while ((sayi<5))
do
     echo $sayi
     let sayi=sayi+1

done

Yukarıdaki örneğimiz ile 0’dan 5’e kadar olan sayıları while döngüsü yardımı ile ekrana bastırdık. Aynı işlemi bir for döngüsü ile de yapabilirdik. Aşağıda da for döngüsünün yapısını inceleyelim.

#!/bin/bash

for i in 1 2 3 4 5 6 7 8 9
do
     echo $i
done 

Bu yazdığımız script de while döngüsünde yaptığımız gibi sayıları sırasıyla bastırır. Şöyle bir örnek de yaparsak farklı kullanımlarına da değinmiş oluruz.

#!/bin/bash

for i in $(ls) 
do 
     echo $i 
done 

Bu örnek ile script’i çalıştırdığımız dizinde ls komutu vermiş ve for döngümüz ile tüm çıktıları satır satır ekrana bastırmış olduk.



Fonksiyonlar

Fonksiyonlar işimizi kolaylaştıran ve aslında bir diğer değişle alt programlardır. Aşağıda fonksiyonun sahip olduğu yapıyı görüyoruz.

function fonksiyon_ismi {
     komutunuz
}

Yukarıdaki yapıya sahip bir fonksiyon örneği yazalım ve fonksiyonları yakından tanıyalım.

#!/bin/bash

function EkranaBas {
     echo "Merhaba $1 , Yaşınız: $2";
}
echo "Adınız Nedir ?"
read ad
echo "Yaşınız Kaç ?"
read yas

EkranaBas $ad $yas

Bu örnekte basit olması açısından kullanıcıdan adını ve yaşını aldık. Kodumuzun en altında kullanıcıdan aldığımız verileri fonksiyonumuza verdik ve fonksiyonumuz başarılı bir şekilde çalıştı.
Sağlıklı bir script yazabilmemiz için gereken tüm programlama bilgilerine değindiğimizi düşünüyorum. Yazımı burada sonlandırıyorum . Daha ileri bilgilere erişmek adına Linux Grep Komutu , Linux Sed Komutu ve Linux Awk Komutu adlı yazılarımı okumanızı tavsiye ederim. Başarılar dilerim. 

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.