Fonksiyonlar
- Fonksiyonlar
Aynı komutları tekrar tekrar yazmamak adına, daha sonra çağırmak için belirli işlemleri gerçekleştirmek üzere komut blokları tanımlayabiliriz. Bu komut bloklarına fonksiyon denir. Fonksiyonlar sürekli yapılan işlemlerde zaman tasarrufu sağlamak için oldukça kullanışlıdır. Shell üzerinde 2 farklı yol ile fonksiyon oluşturulabilir.
Yol – 1
FonksiyonAdi()
{
komutlar
}
Yol – 2
function FonksiyonAdi
{
komutlar
}
Fonksiyon çağırırken ise sadece daha önce belirlediğimiz fonksiyon ismini yazmamız yeterli olacaktır.
Dikkat edilmesi gereken hususlar
-\ Fonksiyon komutlarının { } parantezleri içerisine yazılması gerekir.
-\ Oluşturulan fonksiyon çağırılmadığı sürece fonksiyon içerisindeki komutlar uygulanmaz.
-\ Fonksiyonlar çağırılmadan önce tanımlanmalıdır.
-\ Fonksiyon içerisinde tanımlanan değişkenler tüm program içerisinde geçerli olur. ( local tanımlanmadığı sürece )
Örnek:
#!/bin/sh
LISTELE()
{
echo "Ceren Bilgisayar"
ls -l
}#Fonksiyonumuzu çağıralım.
LISTELE
Yukarıdaki komutta ilk önce shell ekranına "Ceren Bilgisayar" yazan ve dizin içerisindeki dosyaları listeleyen bir fonksiyon oluşturuyoruz. Daha sonra fonksiyon içerisindeki komutların uygulanması için oluşturduğumuz "fnCeren" fonksiyonunu çağırıyoruz.
Ceren Bilgisayar
toplam 96
drwxr-xr-x 2 derya derya 4096 2011-07-05 10:09 Belgeler/
-rw-rw-r– 1 derya derya 2 2011-07-13 14:03 drupal.odt
-rw-rw-r– 1 derya derya 2 2011-07-08 16:54 linux.txt
-rw-rw-r– 1 derya derya 456 2011-07-11 11:42 Masaüstü/
-rw-rw-r– 1 derya derya 19 2011-07-14 11:01 Projeler/
.
.
.
Değişken parametre kullanımı
Fonksiyon çağırırken fonksiyona gönderdiğimiz parametreler sırasıyla $1 $2 $3 $4 şeklinde numaralandırılır. Bu parametreleri fonksiyon içerisinde değişken olarak kullanabiliriz.
Örnek:
#!/bin/sh
UCUS()
{
echo "Bu uçak $1 şehrinden $2 şehrine gidiyor."
}
echo "Kalkış Yeri"
read ilk_sehir
echo "İniş Yeri"
read ikinci_sehirUCUS $ilk_sehir $ikinci_sehir
Yukarıdaki komutta $1 fonksiyon değişkeni $ilk_sehir değişkeninin değerini, $2 değişkeni ise $ikinci_sehir değişkeninin değerini alıyor.
Kalkış Yeri
İstanbul
İniş Yeri
Diyarbakır
Bu uçak İstanbul şehrinden Diyarbakır şehrine gidiyor.
* Bütün parametreleri aynı satır içerisinde kullanmak için $@ kullanabiliriz.
Örnek:
#!/bin/sh
ADRES(){
echo "Adres Bilgisi: $@"
}
Sokak="Nazım Hikmet Sokak"
Ilce="Bahcelievler"
Sehir="Istanbul"
ADRES $Sokak $Ilce $Sehir "/ Turkiye"
Yukarıdaki komutta $@ işareti fonksiyon için girilen bütün parametrelerin kullanımı için kullanılır.
Adres Bilgisi: Nazım Hikmet Sokak Bahcelievler Istanbul / Turkiye
* Sadece fonksiyon içerisinde kullanılmak istenen değişkenler local olarak tanımlanabilir.
function FonksiyonAdi
{
local degisken=deger
}
Örnek:
#!/bin/sh
function LOCAL_DEGISKEN
{
local Sehir="Ankara"
echo "Dogdugu sehir: $Sehir"
}
Sehir="Istanbul"
LOCAL_DEGISKEN
echo "Ikamet: $Sehir"
Yukarıdaki komutta ilk önce local olarak tanımlanan "Sehir" değişkeni ekrana yazılacaktır. Fakat fonksiyon içerisinde yapılan değişiklik diğer "Sehir" değişkenini etkilemeyecek ve değeri "Istanbul" olarak kalacaktır.
Değer döndürmek
Fonksiyon içerisinde yapılan işlemlerin sonucunu shell ekranına yazdırmak yerine değişken veya parametre olarak da kullanabiliriz.
$(Fonksiyon_Adi Fonksiyon Parametreleri)
Örnek:
#!/bin/sh
TOPLAMA()
{
echo $(( $1 + $2 ))
}
echo "2 Sayi Giriniz."
read ilk_sayi
read ikinci_sayi
sonuc=$(TOPLAMA $ilk_sayi $ikinci_sayi)echo "Toplam = $sonuc"
Yukarıdaki komutta girilen 2 sayıyı fonksiyon içerisinde toplayıp sonucu bir değişkene atıyoruz. Daha sonra shell ekranına yazdırıyoruz.
2 Sayi Giriniz.
7
33
Toplam = 40
Örnek:
#!/bin/sh
function YAZDIR
{
echo "$(pwd)/$@"
}
echo "Yazdirilacak dosyanin adını giriniz."
read dosya_adilp $(YAZDIR $dosya_adi)
echo "$(YAZDIR $dosya_adi) Yazdırılıyor."
Fonksiyon'dan geri döndürülen değeri parametre olarak da kullanabiliriz. Örnekte lp parametresi olarak kullanıyoruz.
Yazdirilacak dosyanin adını giriniz.
rapor.txt
request id is Ceren-Phaser-3140-and-3155-9 (1 file(s))
/home/ceren/rapor.txt Yazdiriliyor.