13
Konuya ait anahtar kelimeler : Shell kod yazma sanatı, yorum ekleme, export, PATH Shell kod yazma sanatı : Önceki dersimize devame diyoruz. Şu ana kadar genel olarak nasıl Shell script yazacağımızı öğrendik. Şimdi script klasör içerisinde çalışmalarımıza devam edelim.
[alax@alax ~]$ cd ~/tux/script [alax@alax script]$ cat script1.sh #!/bin/bash echo "Merhaba Dünya" mkdir penguen [alax@alax script]$
Hızlıca script dosyamızın içeriğine baktım. "cat" kullandığım için herhangi bir düzenleme yapmadan sadece dosya içeriğine baktık. Şimdi yeni bir tane script dosyası oluşturalım.
[alax@alax script]$ > script2.sh [alax@alax script]$ ls -l total 4 -rwxr--r-- 1 alax alax 49 Oct 25 01:51 script1.sh -rw-r--r-- 1 alax alax 0 Oct 25 14:15 script2.sh [alax@alax script]$
Evet yeni oluşturduğumuz "script2.sh" adlı script dosyamız çalıştırma iznine sahip değil. Şimdi sadece sahibi için çalıştırma izni verelim.
[alax@alax script]$ chmod u+x script2.sh [alax@alax script]$ ls -l -rwxr--r-- 1 alax alax 49 Oct 25 01:51 script1.sh -rwxr--r-- 1 alax alax 0 Oct 25 14:15 script2.sh [alax@alax script]$
Şimdi dosyamızın içerisine kodlarımızı ekleyelim.
[alax@alax script]$ nano script2.sh #!/bin/bash clear echo "Burası ilk echo komutu başlangıcı.." echo "Merhaba $USER" dizi=(bir iki üç dört beş) echo ${dizi[*]} echo echo "Oluşturulan dizi unset ediliyor...." sleep 3 unset dizi echo "Dizi unset edildi....." [alax@alax script]$
Scriptimizi kaydedip çıkıyoruz. Evet şimdi scriptimizi çalıştıralım.
[alax@alax script]$ ./script2.sh Burası ilk echo komutu başlangıcı.. Merhaba alax bir iki üç dört beş Oluşturulan dizi unset ediliyor.... Dizi unset edildi..... [alax@alax script]$
Scriptimiz çaılıştı. Script içerisinde "sleep" komutu ile 3 saniyelik bir bekleme süresi belirledik. Sleep Türkçe de "uyuma" anlamına gelmektedir. O an scriptin belirlenen süre boyunca uyuması, beklemesi sağlanır. Uyuma süresi bitiminde script kaldığı yerden çalışmasına devam eder. Yorum ekleme : Sadece Unix/Linux Shell script için değil, bütün programlama dillerinde yorumlar çok büyük bir öneme sahiptir. Yorum ekleyerek kodlarınızı daha çabuk düzenleyebilir, neyin nerede olduğunu, nerede başladığını nerede bittiğini görebilirsiniz. Kesinlikle scriptleriniz içerisinde yorum kullanmaya özen gösteriniz. Siz bir başkasının scriptini okurken yada sizin scriptinizi bir başkası okurken yorumlar ile komutların daha hızlı anlaşılması sağlanır. # : Kare işareti. Yorum ekleme için kullanılır. "#" işaretinin olduğu satırda, bu işaretten sonrası hiçbir şekilde işleme alınmaz ve görünmez.
[alax@alax script]$ echo Merhaba # Dünya Merhaba [alax@alax script]$
Gördüğünüz gibi kare işaretinden sonraki kelime yada komutlar gösterilmedi, herhangi bir işleme tabii tutulmadı. Yorum satırları herhangi bir çift tırnak yada tek tırnak arasına alınmaz. Alındığı zaman yorum olarak algılanmaz ve işleme tabii tutulur.
[alax@alax script]$ echo "Merhaba # Dünya" Merhaba # Dünya [alax@alax script]$
Şimdi "script2.sh" script dosyamıza bazı yorumlar ekleyelim.
[alax@alax script]$ nano script2.sh #!/bin/bash clear # Ekran temizleniyor.. # Burada ilk echo komutumuz oluşturuluyor.. echo "Burası ilk echo komutu başlangıcı.." # Burada kullanıcı adımız ile karşılanıyoruz.. echo "Merhaba $USER" dizi=(bir iki üç dört beş) # burada bir dizi tanımlanıyor.. echo ${dizi[*]} echo echo "Oluşturulan dizi unset ediliyor...." sleep 3 # 3 saniyelik bir beklem süresi belirleniyor.. unset dizi echo "Dizi unset edildi....." # Script sonu... [alax@alax script]$
Scriptimizi tekrardan çalıştırıyoruz.
[alax@alax script]$ ./script2.sh Burası ilk echo komutu başlangıcı.. Merhaba alax bir iki üç dört beş Oluşturulan dizi unset ediliyor.... Dizi unset edildi..... [alax@alax script]$
export : Dahil etme, ihraç etme. Bu komut ile farklı bir yerde tanımlanmış olan değişken vb.. bileşenleri diğer Shell içerisine dahil etme işlemi yapılır. Ana Shell deki değişkenleri alt(SubShell) Shell e dahil etmek için kullanılır. Örnekler üzerinde daha iyi anlaşılacaktır. Kullanım : export degisken_adi export degisken="Merhaba Dünya" Şimdi bir adet script oluşturalım ve içeriğini aşağıdaki gibi yapalım.
[alax@alax script]$ nano script3.sh #!/bin/bash # Export örneği..... echo $penguen #Burası script sonu... [alax@alax script]$ chmod u+x script3.sh [alax@alax script]$
Script içeriğinde "penguen" adlı değişen yazdırılmak isteniyor, fakat öyle bir değişken tanımlı değil. Şimdi script3.sh adlı script dosyamızı çalıştıralım.
[alax@alax script]$ ./script3.sh [alax@alax script]$
Gördüğünüz gibi boş bir çıktı verdi. Çünkü script içerisinde "penguen" adında bir değişken tanımlanmadı. Şimdi ana Shell ekranında penguen adlı değişkeni tanımlayalım ve bunu export edelim, böylece alt Shell e bu değişkenimiz dahil edilmiş olacaktır.
[alax@alax script]$ penguen="Merhaba Dünya" [alax@alax script]$ export penguen [alax@alax script]$ ./script3.sh Merhaba Dünya [alax@alax script]$ export penguen="Hello World" [alax@alax script]$ ./script3.sh Hello World [alax@alax script]$
Gördüğünüz gibi değişkenimiz alt Shell tarafından tanındı ve işleme alındı. Export komutu, o an aktif olan Shell ve alt Shell ler için geçerli olacaktır. Siz iki adet Shell açıp, birisinde export ederek diğer Shell de değişkene ulaşamazsınız. Derslerin başında anlattığımız "Fork" mantığı ile bu mümkün olmaz, çünkü iki Shell birbirinden bağımsız çalışır. PATH : Komutların çalıştırılması için bakıldığı, arandığı dizinlerin adresini tutan sistem değişkenidir. Mesela siz "echo" yazdığınız zaman Shell, bu komutu çalıştırmak için PATH içerisinde ":" iki nokta ile ayrılmış dizinlere sırası ile bakar ve bulduğu zaman çalıştırır. Eğer komut bu dizinler içerisinde yok ise "Komut bulunamadı" gibi bir hata üretir. Şimdi önce PATH değişkenimizin değerine bakalım, daha sonra bu değişkene kendi program yolumuzu ekleyelim.
[alax@alax script]$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl [alax@alax script]$
Sizde de yukarıdakine benzer bir dizin sırası görünecektir. Görüldüğü üzere soldan sağa doğru, Shell ilk önce " /usr/local/sbin " klasörüne ve en son " /usr/bin/core_perl " klasörüne bakacaktır. Eğer ilk dizinde komut bulunursa komut çalıştırılır ve diğer dizinlere BAKILMaZ. Şimdi "home/alax/tux/script" yada "~/tux/script" klasörümüzde bulunan "script3.sh" scriptini herhangi bir öge kullanmadan, sadece ismini yazarak çalıştırmaya çalışalım.
[alax@alax script]$ script3.sh bash: script3.sh: command not found [alax@alax script]$
Komut bulunamadı hatası aldık. Çünkü bizim "script3.sh" scriptimizin olduğu dizin PATH içerisinde yok, dolayısıyla Shell "script3.sh" yi bulamıyor. Şimdi PATH içerisine "/home/alax/tux/script" dizininide ekleyelim.
[alax@alax script]$ export penguen="Merhaba Dünya" [alax@alax script]$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl [alax@alax script]$ [alax@alax script]$ export PATH="~/tux/script:$PATH" [alax@alax script]$ echo $PATH ~/tux/script:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl [alax@alax script]$
Evet dizinimizi PATH değişkenine ekledik. Bundan sonra bir komut yazdığımız zaman Shell ilk önce "~/tux/script" klasörüne bakacak. Şimdi "script3.sh" scriptimizi tekrar çalıştıralım.
[alax@alax script]$ script3.sh Merhaba Dünya [alax@alax script]$
Evet sorunsuz çalıştı. PATH içerisinde yapılan değişiklik geçicidir ve sadece komutun uygulandığı Shell içerisinde aktif olur. İleriki derslerimizde, kendi script klasörümüzü ve programlarımızı kalıcı olarak oluşturduğumuz zaman bu değişkeni istediğimiz şekilde kalıcı yapacağız.