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.