Bash Programlama (Bash Programing) - 1

By samed, 8 December, 2013

Linux sistemlerde kullanılan kabuklardan biri olan bash'e göre yazılmış olan betiklere verilen isimdir. Bu betikleri ardı ardına çeşitli komutları çağırmak için kullanabileceğiniz gibi karmaşık ve ciddi işlemler için de kullanılırlar.

Bash betikleri basitçe komutların bir dosyaya yazılması ve bu komutların seri bir biçimde peş peşe çağırılması işlemidir. Siz tek bir komutu çağırırsınız, o da içerisinde bulunan komutları çağırır.

#!/bin/bash
echo "Merhaba Dünya"

Yukarıda çok basit bir bash betik örneği mevcut. Bu betiğin yaptığı tek şey ekrana Merhaba Dünya yazmak.

Shang-Bang
Çalıştırılabilir betiklerin ilk satırında yer alan #! ikilisine verilen isimdir. Shang-Bang'den sonra betiğin hangi kabukta çalışacağını söylemeniz gerekiyor.
Bash için #!/bin/bash
Sh için #!/bin/sh
Php için #!/usr/bin/php
yazmanız gerekiyor. Sonrasında satır satır betiğinizi yazmalısınız. Bu yazımız Bash Betikleri üzerine olduğundan ben #!/bin/bash kullanacağım.

echo
Bu komutun yaptığı tek şey yanına yazdıklarınızı standart çıkışa (stdout) göndermek. Basitçe echo'nun yanına ne yazarsanız ekrana onu yazar.

Çıktı Yönlendirme (Output Redirection)
Uygulamalar çalışmaları esnasında çeşitli çıktılar üretirler. Bu çıktılar linux sistemler için stdout (1) ve stderr (2) olmak üzere ikiye ayrılırlar. Bunlardan stdout uygulamaların standart çıktılarıdır, stderr ise hata çıktıları. Çıktı yönlendirme işlemi >, >>, | sembolleriyle yapılır. Çıktılar > ve >> işaretleri ile bir dosyaya, | işareti ile de başka bir uygulamaya yönlendirilir. > işareti ile yapılan yönlendirmelerde gösterilen dosyayı yaratmaya çalışır, var ise üzerine yazar. >> ise var olan dosyanın sonuna ekleme yapar, dosya yok ise yaratmaya çalışır.

  • Standart çıktıyı bir dosyaya yazdırmak için;

    echo "Merhana Dünya" > stdout.txt
  • Çıktıları başka bir programın standart girişine yönlendirmek için | (pipe-line, boru) kullanılır.

    find .|grep deneme
  • Hata çıktılarını bir dosyaya yazdırmak için;

    find . |xargs grep 'deneme' 2> stderr.txt
  • Bütün çıktıları bir dosyaya yazdırmak için;

    find . |xargs grep 'deneme' &> allout.txt
  • Hata çıktılarını bir dosyaya, standart çıktıları bir dosyaya yazdırmak için;

    find . |xargs grep 'deneme' > stdout.txt 2>stderr.txt