intranet-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.

FonksiyonAdi

 

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_sehir

UCUS $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.

Dogdugu sehir: Ankara
Ikamet: Istanbul

 

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_adi

lp $(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.