Bash Script Nasıl Yazılır? Ne iş yarar?

Aslıhan Kuzucu
6 min readJan 12, 2024

--

Bash script, Linux ve UNIX tabanlı sistemlerde yaygın olarak kullanılan bir scriptleme dilidir. Bu scriptler, sistem yönetimi görevlerini otomatikleştirmek, dosya işleme, veri manipülasyonu gibi görevleri gerçekleştirmek için kullanılır. Bu yazıda, Bash script’in temellerini ve nasıl yazılacağını anlatacağım.

Bash Script Nedir?
Bash (Bourne Again Shell), Linux ve UNIX sistemlerinde komut satırı işlemlerini gerçekleştirmek için kullanılan bir kabuk (shell) programıdır. Bash script, Bash dilinde yazılmış bir dizi komut içeren metin tabanlı bir dosyadır. Bu dosyalar, kullanıcının belirli görevleri otomatikleştirmesine olanak tanır.

Bash Script Temelleri
Bir Bash script yazarken dikkate almanız gereken temel konular şunlardır:

Shebang (Shebang Line): Script’inizin hangi shell dilinde yazıldığını belirten shebang satırıyla başlamalısınız. Örneğin, #!/bin/bash ifadesi, Bash dilinde yazıldığını belirtir.

Değişkenler (Variables): Değişkenler, geçici veri depolamak için kullanılır. Örneğin, isim=”Asli” şeklinde bir değişken tanımlayabilir ve bu değişkeni script içinde kullanabilirsiniz.

Koşullar ve Döngüler: Bash script’lerinde if, else, elif gibi koşul ifadeleri ve for, while gibi döngüler kullanabilirsiniz. Bu yapılar, script’inizin belirli durumlar altında nasıl davranacağını belirlemenize yardımcı olur.

Komut Satırı Argümanları: Script’inizi çalıştırırken kullanıcının sağladığı argümanları alabilirsiniz. Bu argümanlar, $1, $2, … şeklinde kullanılır.

Fonksiyonlar: İşlevsel parçaları gruplamak ve tekrar kullanılabilirliği artırmak için fonksiyonlar kullanabilirsiniz.

Bu yazıda ben editör olarak Vim editörünü kullanacağım. Bu nedenle ilk olarak scripti’i yazacağım dosyayı oluşturuyorum:

En basit işlemle örneklere başlayalım. Her zamanki gibi ekrana “Hello World” yazdıran bir scriptle giriş yapıyoruz.

sol altta insert modda olduğumu belirten bir işaret var. Bunu “i” harfine basarak sağladım.
esc’ye basarak normal moda geçtik ve :wq diyerek (write,quit) ile kaydedip, dosyayı kapattık.

“vi calisma.txt” komutunun ardından karşımızda vim editörüyle açılmış bir txt dosyayı çıkacaktır.

Vim editörünün kullanım şekli biraz farklı ve karmaşık diyebilirim.

Vim editöründe iki farklı mod bulunuyor:

Bunlardan birisi normal mod diğeri de insert moddur. Normal modda kaydetme, kopyalama gibi işlemler yapılır.

Insert moda ise “i” tuşuna basarak erişebiliriz, bu modda metine ekleme işlemlerini yaparız yani doğrudan klavyeden dosyaya bir şeyler yazabiliriz.

Normal modda gezinmek için kullanılan temel komutlar:
h: Sol yöne git.
j: Aşağı yöne git.
k: Yukarı yöne git.
l: Sağ yöne git.
w: Kelime ileri git.
b: Kelime geri git.

Normal modda düzenleme komutları:

dd: Satırı sil.
yy: Satırı kopyala.
p: Kopyalanan veya kesilen metni yapıştır.
x: Seçili karakteri sil.

Normal modda dosya işlemleri:

:w: Kaydet.
:q: Çık.
:wq veya ZZ: Kaydet ve çık.
:q!: Değişiklikleri kaydetmeden çık.

Burada dosyamızın çalıştırılabilir olması için chmod ile gerekli izinleri sağladık.
./calisma.txt komutuyla dosyayı çalıştırdığımızda çıktımızı aldığımızı görüyoruz.

Şimdi ise değişkenleri kullanarak basit bir script nasıl yazılır ona bakalım.

Burada isim ve soy_isim adında iki değişken tanımladım. echo komutu ile ekrana yazdırma işlemini gerçekleştireceğim.

$isim komutu ile de isim değişkeninin değerini alıyorum.

Dosyanın çalıştırılabilir izni olduğundan emin olduktan sonra yukarıdaki gibi çalıştırıyorum. Ve gördüğümüz gibi değişkenlerin değerini alıp ekrana yazdırdık.

Şimdi daha interaktif bir script yazalım. Yukarıdaki örnekte değişken değerlerini ben vermiştim ama şimdi bu değerleri kullanıcının girmesini istiyorum.

Kullanıcıdan input alma işlemini “read” komutuyla gerçekleştireceğim.

Bu kod, echo komutuyla “İsmin nedir?” sorusunu ekrana bastıracak ve ardından read komutuyla kullanıcıdan bir değer girilmesini bekleyecek. Ardından son satırda kullanıcıdan aldığı değerleri ekrana yazdıracak.

Şimdi ekrana değer yazma işlemini argümanlarla yapmayı deneyelim.

$1 ve $2: Bu, script komutunu çağırırken komut satırından alınan argümanlardır. $1 ilk argümanı, $2 ise ikinci argümanı temsil eder. Örneğin, eğer bu script ./test.txt Ali Veli şeklinde çağrılırsa, ekrana yazdırılan metin “Selam Ali Veli” olacaktır.

Şimdi ise basit bir script ile bir dosyanın içeriğini nasıl değiştirebildiğimize bakalım.

Gördüğümüz gibi “>” komutu ile dosyanın içeriğini değiştirebiliyoruz.

Aynı şekilde “>>” komutu ile de dosyanın içeriğine eklemeler yapabiliyoruz.

True — False

0 ve 1 değerleri bash scriptte bizim genel olarak bildiğimizden biraz farklı çalışıyor.

Bu örnekte gördüğümüz gibi yanlış için “1”, doğru için “0” ifadesini kullanıyoruz. Ayrıca burada “-eq” komutu equal’den geliyor, eşitliği kontrol ediyor.

If-Else Yapıları

Bash scriptte de if-else yapısı, normal bildiğimiz koşul yapısından çok da farklı değil.

Burada gördüğümüz gibi syntax’da biraz farklılık olsa da, çoğu dildeki koşul yapıları gibi çalışıyor.

Burada basit bir login işlemi tasarlamaya çalıştım. Kullanıcı adına göre, doğruysa login yapıyor, eğer kullanıcıdan alınan kullanıcı adı doğru değilse “Yanlış giriş” şeklinde bir şey yazdırıyor.

Yine dosyaya gerekli izinleri verdik ve çalıştırdık.

Dosyayı çalıştırırken, kullanıcı adını da girdim.

Gördüğümüz gibi scriptte yazdığım “${1,,} sayesinde büyük-küçük harf duyarlılığını engelledim.

Case

Bash script’lerinde case ifadesi, belirli durumları kontrol etmek ve farklı şartlara göre farklı blokları çalıştırmak için kullanılır.

case ifadesi, if-else yapısına benzer bir kontrol yapısı sunuyor. Her ikisi de belirli şartlara göre farklı blokları çalıştırmak için kullanılıyor. Ancak, case ifadesi özellikle bir değişkenin farklı değerlere göre kontrolünü yapmak için kullanılırken, if-else yapısı daha genel bir kontrol yapısı ve bir koşulun doğru veya yanlış olmasına göre işlemleri yönlendiriyor.

For Döngüsü

Burada basit bir for döngüsü yazmaya çalıştım. Bu döngüye göre 1–5 arası sayıları ekrana yazdırması gerekiyor.

Scriptlerdeki for döngü yapısı da diğer programlama dillerine benzerlik gösteriyor. Tabii birkaç syntax farkı dışında.

Fonksiyonlar

Burada show adlı bir fonksiyon oluşturdum.

Bu fonksiyon bana makinenin ne zamandır açık olduğunu ve saat kaçtan beri açık olduğunu döndürecek bir fonksiyon.

up=$(uptime -p | cut -c4-): uptime -p komutu, sistem açılış süresini gösterir. Bu çıktıdaki ilk üç karakteri (genellikle “up “) kesip up değişkenine atar. Bu şekilde, sadece sistem açılış süresini elde eder.

since=$(uptime -s): uptime -s komutu, sistem ne zaman başladığını gösterir ve bu bilgiyi since değişkenine atar.

cat << EOF: İkili (here document) bir metin bloğu başlatır. EOF kelimesiyle biten her şeyi cat komutuna yönlendirir.

“This machine has been up for ${up}”: Here document içindeki bir satır. ${up} ifadesi, önceki adımda hesaplanan up değişkenin değerini içerir.

“It has been running since ${since}”: Here document içindeki bir başka satır. ${since} ifadesi, önceki adımda hesaplanan since değişkenin değerini içerir.

EOF: Here document’ın sonunu belirtir.

show: show fonksiyonunu çağırır ve bu, yukarıda tanımlanan bilgileri içeren metni ekrana yazdırır. Bu satır scriptin sonunu işaretler.

Anlatacaklarım şimdilik bu kadar.

Okuduğunuz için teşekkürler.

--

--

Aslıhan Kuzucu

Curious computer engineer interested in cyber security👩‍💻