Bash kabuğunda betik yazmanın incelikleri — 1

Bu flood’da Linux işletim sisteminde Bash kabuğunda (shell) çalıştırmak üzere yazılan betiklerden (script) bahsetmeye başlayıp ilerleyen flood'larda da devam edeceğim.

Unix/Linux tabanlı işletim sistemlerinin en güçlü özelliklerinden biri sağladıkları otomasyon yetenekleridir. Bu yeteneklerinin bir bacağı yalnız bir iş yapan ancak o işi iyi yapan (ls, cat, grep) gibi programlar diğer bacağı ise kabuğun (shell) programlanabilmesidir.

Bash kabuğunun programlanabilmesi tam da anlaşıldığı gibi kabukta çalıştırılmak üzere betikler yazılabilmesi anlamına gelir. Bu betikler içerisinde değişkenler tanımlanabilir, if koşulları ile dallanmalar ve for ve while ile döngüler yazılabilir. Bash kabuğu hemen bütün Linux işletim sistemi dağıtımlarında ve birçok konteyner imajında standart olarak geldiği için Bash betikleri üçüncü parti bir derleyici veya yorumlayıcıya ihtiyaç duymadan çalışabilirler. Bash betikleri bu özellikleri sayesinde oldukça popüler olarak kullanılmaktadır.

Bash betiklerinde değişken tanımlamak için değişkenin ismi ve değeri arada boşluk olmadan aşağıda gösterildiği gibi verilir. Değişkenin içeriğine erişmek için değişkenin başına dolar $ sembolü konur. Aşağıda echo komutu ile değişkenin değeri ekranda gösterilmiştir.

Değişkenleri süslü parantez ile ${VAR} kullanmak daha okunabilir ve anlaşılırdır. Aşağıdaki örnekte tanımlanan bir değişkenin echo programına parametre olarak verilmesinde görülen karmaşa süslü parantez kullanımı ile engellenmiştir.

Bash kabuğu ortam değişkenlerini otomatik olarak içe aktarmakta ve betikler içerisinde kullanımına olanak tanımaktadır. Aşağıdaki örnekte görülebildiği gibi TERM ve USER ortam değişkenleri kabuktan gösterilmiştir.

Bash betiklerinde sıklıkla görülen bir kullanım ise bir değişkenin var olup olmadığına bakmak ve yoksa ona ön tanımlı (default) bir değer atamaktır. Bu işlem için VARIABLE=${USER_VAR:-default} sentaksı kullanılır. Aşağıda bir örnek gösterilmiştir.

Bash betikleri yukarıdaki örneklerde olduğu gibi direkt terminal üzerinden koşturulabildiği gibi diğer betik dillerindeki gibi dosyalara alınarak da kullanılabilirler. Betik dosyalarının uzantısı genellikle .sh olarak verilir ancak Linux açısından uzantının bir önemi yoktur.

Betik dosyaları bash programına parametre olarak verilerek çalıştırılabilirler. Aşağıdaki örnekte seq komutu kullanılarak yaratılan bir for döngüsü içinde ekrana yazılar yazılmıştır.

Betik dosyaları chmod u+x komutu ile çalıştırılabilir dosya haline getirilerek bir program çalıştırılır gibi direkt olarak da çalıştırılabilir. Aşağıdaki ekran görüntüsünde bu işlemler yapılmıştır.

Bir önceki örnekte kabuk, betiğin bash ile yazıldığını tahmin etmiş ve çekirdeğin betiğibash ile çalıştırmasını sağlamıştır. The Shebang adı verilen ve ilk satırda #!/bin/bash olarak kullanılan direktif ile çekirdek, betiği hangi program ile çalıştıracağına karar verir.

Görülebileceği üzere The Shebang sadece bash'e özgü değildir. Bir betiğin python ile çalıştırılması istendiğinde The Shebang olarak python yorumlayıcısının adresi verilebilir. Betik farklı ortamlarda kullanılacaksa The Shebang env ile kullanılır.

Bu yazıda betik yazımına bir giriş yapmış olduk, ilerleyen yazılarda betik yazımının inceliklerine değineceğiz.