BASH Programlama
GNU/Linux üzerinde bugün en yaygın kullanılan kabuğun bash (Bourne Again SHell) olduğunu söyleyebiliriz. Bu bölümde bash kullanarak akıllı işlemleri nasıl yapacağımızı, temel kontrolleri, hatta basit bazı yükleme scriptleri geliştirmeyi göreceğiz.
Temel Kontroller
Bash scriptlerinin temel yapısı, başında yorumlayıcının belirtildiği, ardından gerekli komutların sıralandığı dosyalardır. Aşağıdaki scripti yukle.sh
ismiyle kaydedip çalıştıralım.
#!/bin/bash
# yukle.sh dosya icerigi
echo "Yukleme basliyor..."
eaydin@dixon ~/calisma/bash $ chmod +x yukle.sh
eaydin@dixon ~/calisma/bash $ ./yukle.sh
Yukleme basliyor...
Tabii scriptimiz bu haliyle pek işe yaramıyor. Örneğin htop programının yüklenmesini sağlayabiliriz.
eaydin@dixon ~/calisma/bash $ cat yukle.sh
#!/bin/bash
# yukle.sh dosya icerigi
echo "Yukleme basliyor..."
apt-get install htop
Gördüğünüz gibi, apt-get programı root yetkimiz olmadığı için hata verdi. root yetkimizin olup olmadığının kontrolünü scriptimize yaptırıp buna uygun bir hata verebilirdik.
Yukarıdaki satırların üzerinden geçecek olursak:
id -u komutu ile mevcut kullanıcının id'si alınıyor. Eğer bu değer 0'a eşit değilse (
-ne
: not equal) if şartı sağlanmış oluyor. Linux üzerinde sadece root kullanıcısının id'si 0'dır.Eğer root kullanıcısı değilse, exit 1 ile programdan çıkıyoruz. Eğer root kullanıcısıysak, exit 0 ile çıkıyoruz. Buradaki 1 ve 0 değerleri exit mesajlarıdır. Linux'ta programlar başarıyla işlerini yerine getirmişse 0 ile çıkarlar, bir hatayla çıkarlarsa 1 veya farklı değerler alırlar.
Yukarıdaki programın nasıl sonuçlandığını (exit mesajını) almak için aşağıdaki yöntemi kullanabiliriz.
Buradaki $? bash için özel bir değişkendir ve "bir önceki programın hata mesajı"nı temsil eder. Yani programımız root yetkisiyle çalıştırılmadığı için exit 1 ile çıkmış.
Şimdi programımızı root yetkisiyle çalıştıralım.
Programımızı tekrar çalıştırırsak, htop'un zaten yüklü olduğunu göreceğiz. Öyleyse programımız bunu da kontrol etsin.
Kullanacağımız yöntemlerden birisi, dpkg ile yüklü paketlerimizi inceleyip, sonuçları grep'lemek olacaktır.
Yukarıdan, grep'in bir sonuç yakaladığında 0 ile exit verdiğini görebilirsiniz. Öyleyse bu bilgiyi kullanabiliriz.
Parametrik Kullanım
Programımız sadece htop için çalışıyor, eğer herhangi bir program için çalışmasını isteseydik, parametre almamız gerekirdi.
Bash ile gelen parametrelerin sayısını $# ile, gelen her parametreyi ise $1 $2 $3 ... şeklinde alabilirsiniz.
Dosyanın Var Olup Olmadığını Anlama
Programımız fena iş çıkarmasa da, sadece Debian sistemler üzerinde çalışacak şekilde yazıldı, ve bunun kontrolünü hiç yapmıyor. Öte yandan sistemimizin Debian olup olmadığını anlamak için /etc/debian_version
dosyasının var olup olmadığına bakmamız yeterli. Bunun için bash aşağıdaki gibi bir kontrol mekanizması sunuyor.
Veya aşağıdaki yöntemle bir dosyanın var olmadığını kontrol edebilirdik.
Bu kontrolleri kullanarak, sistem Debian ise dpkg ve apt-get komutlarını, Red Hat ise rpm ve yum komutlarını kullanabiliriz. Scriptimizin son hali aşağıdaki gibi.
Fonksiyonlar
Yukarıdaki yükleme işlemlerini işletim sistemi özelinde fonksiyonlara taşırsak ileride geliştirmesi daha rahat olabilir.
Fonksiyonlar hakkında karıştırılmaması gereken, argümanları da tıpkı programın kendisi gibi $1 $2 $3 ... şeklinde ifade edilir. Dolayısıyla fonksiyon içerisinde kullanacağınız $1 ifadesi, fonksiyona gönderilen 1. parametre olur, programa gönderilen değil. Fonksiyon içinden, programa gönderilen parametrelere doğrudan erişemezsiniz, ancak dolaylı olarak erişebilirsiniz.
Yükleme işlemimizi fonksiyonlara bölüp programın son halini görelim.