Bash debug


Bash veya sh programlama *nix sistemlerde kullanıldığından herkesin az biraz bilmesi gereken dillerden1 biri.

O siyah ekranda yapması zor olan işlemlerden biri de, bildiğiniz üzere hata ayıklama işlemi(debug). Gerçekten bazen insanın kafasını, sadece bir if koşulunun çalışıp çalışmadığını anlaması için bayağı bir işlem yapması gerekiyor.

Bu halde iken daha fazla dayanamayarak Bash ile nasıl debug yapılacağı hakkında araştırma yaptım ve bu işin o kaliteli IDE’lerdeki gibi olmasada, daha fazla zaman ve efor sarfetmemek için bu işin kısayolunu buldum diyebilirim.

Bildiğiniz üzere Script dillerinin özelliklerinden biri olan bütün kodu derlemeden işlem yapabilmenizdir.

Mesela bir program yazıyoruz ve dışarıdan bize bir girdi(input) geliyor ve o gelen sayının String mi yoksa Integer değer mi olduğunu anlamak için bir script yazıyoruz.

Ve bu yazdığımız Regex’in doğru çalışıp çalışmadığını kontrol etmekmiz gerekiyor

Evet bu kodu çalıştırdığımızda bu sayı değil gibi bir uyarı geliyor ve biz burada gördüğünüz gibi herhangi bir sayı atamadık yani dışardan gelmesi gereken sayı buralara hiç uğramadı.

Şimdi bu kodu herşeyin farkında olarak çalıştıralım ve debug edelim.

Bunu yapmak bash programlamada gayet kolay bunu yaparken kontrol edilecek kod bloğunun başına set -x sonuna set +x koyalım

 

böyle yaparak çalıştırdığımızda

gibi bir çıktı gelicek buda demek oluyorki + ile başlayan satırlar okundu ve gerekli işlemler yapıldı.

+ [[ '' =~ ^[0-9]+$ ]]  satırında gördüğünüz üzere ” değeri boş ve oradan neden sıkıntı çıktığını anlayabiliriz.

 

Şimdi ValueOfCheck değerine 5 atayalım ve çalıştırıp farkı görelim

 

 

 

çıktımız

 

şeklinde olucak ve sıkıntı çıkaran syntax hatalarınıda kolaylıkla görebileceğiz.

 

Şu an pek fazla işe yaramıyormuş gibi gözüksede o if’ler çoğaldığında set’in yanına ne koyuyorduk diye soracağınızdan eminim :). Bu işin fıtratındada bu var herkese kolay gelsin.

 

Bu arada önemli not Emacs sh-mode  ile sıkıntılı satırlara gidebiliyoruz diyeyim. 1970 senelerinden kalma editörümüze selam olsun. Daha güzel yöntemler var ise yazarsanız sevinirim.

Daha fazla bilgi için:

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

Buralarada işiniz düşebilir

http://explainshell.com/

 

Edit 1:  Eclipse’te ShellEd diye bir eklentide buldum gayet güzele benziyor isteyenler onuda deneyebilir.