Yazılar

Linux'da Bash Komut Dosyası Oluşturma

Linux'da Bash Komut Dosyası Oluşturma

Linux İşletim Sistemi

11/10/2023 12:10

Serhat P.

20 dk. okuma

Kendi otomatik görevlerinizi ve özelleştirilmiş komutlarınızı oluşturmaya hazır mısınız? Şimdi Bash komut dosyası oluşturmanın gücünü keşfedin ve Linux'ta verimliliğinizi artırın!

Bash komut dosyasına giriş

Bash, Linux ve UNIX tabanlı işletim sistemlerinde sıklıkla kullanılan bir kabuk programıdır (shell). Genellikle komut satırından tek tek komutların çalıştırılmasını sağlarken, aynı zamanda komutların bir araya getirildiği komut dosyalarını (script) çalıştırma yeteneğine de sahiptir. Bash komut dosyası oluşturma, otomatikleştirilmiş görevleri, özelleştirilmiş komutları ve daha karmaşık iş akışlarını gerçekleştirmek için mükemmel bir araçtır. Bu dosyalar, belirli bir sıra ve mantıkla bir dizi Bash komutunu içerir ve genellikle '.sh' uzantısıyla kaydedilir. Basit bir metin düzenleyici kullanarak oluşturulabilir ve çalıştırılmadan önce uygun izinlerle donatılmalıdır. Bash komut dosyasının temellerini öğrenmek, Linux'ta verimliliğinizi ve otomasyon kapasitenizi önemli ölçüde artırabilir.

Bash betiğinin temellerini anlama

Bash betiği, adından da anlaşılacağı üzere, Bash kabuğunda çalıştırılmak üzere yazılmış bir dizi komutu içerir. Bir betiğin en başında '#!/bin/bash' şeklinde bir shebang satırı bulunur; bu, betiğin hangi yorumlayıcıyla çalıştırılacağını belirtir.

Bash betiğinin temelleri, aşağıdakileri içerir:

  • Komutlar: Bash komut dosyaları, bir dizi komuttan oluşur. Komutlar, Linux işletim sisteminde bulunan ve çeşitli işlemleri gerçekleştiren programlardır. Örneğin, echo komutu, bir metin mesajını yazdırır.
  • Açıklamalar: Açıklamalar, komut dosyasının ne yaptığını açıklamak için kullanılır. Açıklamalar, yorum satırları olarak da bilinir ve # işaretiyle başlarlar.
  • Değişkenler: Değişkenler, komut dosyalarında verileri depolamak için kullanılır. Değişkenler, var_name=value şeklinde tanımlanır.
  • Koşullar: Koşullar, komut dosyasının belirli koşullar altında nasıl çalışacağını belirlemek için kullanılır. Koşullar, if, else ve elif anahtar kelimeleri kullanılarak oluşturulur.
  • Döngüler: Döngüler, komut dosyasının bir komutu veya komut grubunu tekrar tekrar çalıştırmasına olanak tanır. Döngüler, while, for ve until anahtar kelimeleri kullanılarak oluşturulur.

Temel olarak, Bash betiği, tekrar tekrar kullanılabilen ve karmaşık işleri otomatikleştiren güçlü bir araçtır.

Bash betiklerinde chmod'un (izinler) önemi

Bash betikleri, Linux'da otomasyonun vazgeçilmez bir parçasıdır; ancak bu betiklerin doğru şekilde çalışabilmesi için gerekli izinlere sahip olmaları şarttır. İşte burada 'chmod' komutu devreye girer. Bash betiği oluşturduğunuzda, varsayılan olarak bu dosya üzerinde çalıştırma izniniz olmayabilir. 'chmod' komutu, bu betik dosyasına çalıştırma izni vererek onu yürütülebilir hale getirmenize olanak tanır. Örneğin, 'chmod +x betik_adı.sh' komutu, 'betik_adı.sh' isimli dosyaya çalıştırma izni ekler. İzinler sadece çalıştırma yeteneği ile sınırlı değildir; okuma, yazma ve çalıştırma izinlerini, kullanıcının, grubun veya diğerlerinin erişimine göre ayarlamak da mümkündür. Bu nedenle, betiğinizi güvenli bir şekilde paylaşmak veya yürütmek istiyorsanız, doğru chmod izinlerini ayarlamak esastır. Kısacası, 'chmod', Linux'ta Bash betiklerinin etkin ve güvenli bir şekilde çalıştırılmasının anahtarıdır.

#!/bin/bash (shebang satırı)'nı anlamak

Bir Bash betiğini incelediğinizde, genellikle dosyanın en başında '#!/bin/bash' şeklinde bir satır göreceksiniz. Bu özel satıra "shebang" denir ve betiğin hangi yorumlayıcı ile çalıştırılacağını belirtir.

#!/bin/bash shebang satırı, aşağıdaki gibidir:

#! /bin/bash

Shebang'in '#!' ile başlaması, işletim sistemine bu dosyanın bir betik olduğunu ve belirtilen yolda bulunan yorumlayıcı ile çalıştırılması gerektiğini söyler. Bash için, bu yorumlayıcı '/bin/bash' olarak belirtilir. Ancak, Bash dışında başka bir kabuk veya dil için betik yazarken shebang satırı değişebilir. Örneğin, Python için '#!/usr/bin/python3' şeklinde bir shebang kullanılır. Shebang, betiği doğrudan komut satırından çalıştırırken önemlidir, çünkü bu sayede betiğin hangi yorumlayıcı ile çalıştırılacağını belirlemenize gerek kalmaz. Kısacası, shebang satırı, Bash betiğinin hangi kabuk veya programla yürütüleceğini belirtmek için esastır ve Linux'taki betiklerin doğru bir şekilde çalışmasını sağlar.

Linux'ta komut satırına giriş

Linux, grafik kullanıcı arayüzlerinin (GUI) yanı sıra güçlü bir komut satırı arayüzüne (CLI) de sahip olan çok yönlü bir işletim sistemidir. Komut satırı, kullanıcıların doğrudan komutları girerek işletim sistemini kontrol etmelerine olanak tanır. Özellikle sistem yönetimi, dosya işlemleri veya betik yazma gibi görevlerde, komut satırı GUI'den çok daha hızlı ve esnek bir araçtır. Bash, Linux'ta en yaygın olarak kullanılan komut satırı kabuğudur.

Kullanıcılar komut satırından aşağıdakiler dahil olmak üzere çeşitli görevleri gerçekleştirebilir:

  • Dosya ve dizinleri yönetme
  • Programları çalıştırmak
  • Sistem ayarlarını değiştirmek
  • Otomasyon görevleri gerçekleştirmek

Komut satırında temel komutlar

Komut satırında kullanabileceğiniz çok çeşitli komutlar vardır. Bazı temel komutlar şunlardır:

  • ls: Dosya ve dizinleri listeler.
  • cd: Dosya veya dizine gider.
  • mkdir: Yeni bir dizin oluşturur.
  • touch: Yeni bir dosya oluşturur.
  • rm: Dosyayı veya dizini siler.
  • cp: Dosyayı veya dizini kopyalar.
  • mv: Dosyayı veya dizini taşır.
  • cat: Dosyanın içeriğini görüntüler.
  • man: Komutun açıklamasını görüntüler.

Komut satırı, kullanıcıların Bash betikleri oluşturarak karmaşık iş akışlarını otomatikleştirmeleri için bir başlangıç noktasıdır. Linux'ta komut satırının öğrenilmesi, kullanıcılara daha derinlemesine kontrol ve otomasyon yeteneği kazandırır.

Bash komut dosyalarını kullanarak görevleri otomatikleştirme (cron işleri)

Bash komut dosyaları, bir dizi komutu tek bir dosyada birleştirerek, kullanıcıların sık sık yaptıkları işlemleri otomatikleştirmelerine olanak tanır. Bash komut dosyalarını kullanarak, kullanıcılar aşağıdakiler dahil olmak üzere çeşitli görevleri otomatikleştirebilir:

  • Dosya ve dizinleri yedekle
  • Günlükleri analiz et
  • Sistem ayarlarını güncelle
  • Uygulamaları başlat ve kapat

Bash komut dosyalarını otomatikleştirmenin bir yolu, bunları cron ile planlamaktır. Cron, Linux işletim sistemlerinde bulunan bir görev planlama aracıdır. Cron kullanarak, komut dosyalarını belirli bir zamanda veya belirli bir aralıklarla çalıştırabilirsiniz.

Cron işleri oluşturmak için, aşağıdaki adımları takip edebilirsiniz:

  • crontab komutunu kullanarak crontab dosyasını açın.
  • crontab dosyasına, komut dosyasının yolunu ve çalıştırılmak istenen zamanı veya aralığı ekleyin.
  • Ctrl+O tuşlarına basarak dosyayı kaydedin.
  • Ctrl+X tuşlarına basarak dosyayı kapatın.

Örneğin, aşağıdaki crontab satırı, /home/kullanıcı/scripts/myscript.sh komut dosyasını her gün saat 09:00'da çalıştıracaktır:

0 9 * * * /home/kullanıcı/scripts/myscript.sh

Linux'da Görev Planlama: Cron ve Anacron konulu önceki blog yazımızda, cron ve anacron hakkında daha fazla bilgi bulabilirsiniz.

Bash komut dosyasında parametreleri kullanma

Bash betikleri, kullanıcıdan alınan parametrelerle esnek bir şekilde çalışabilme yeteneğine sahiptir. Bu, betiğin farklı senaryolarda veya farklı girdi değerleriyle çalıştırılmasına olanak tanır. Parametreler, betiği çalıştırırken komut satırından verilir.

Bash komut dosyasında parametre kullanmak için, aşağıdaki adımları takip edebilirsiniz:

  • Komut dosyasında, parametreyi tanımlamak için - karakteri kullanın.
  • Komut dosyasında, parametreyi kullanmak için ${parametre_ismi} formatını kullanın.

Örneğin, aşağıdaki komut dosyası, kullanıcıdan bir ad girmesini ister ve girilen adı ekrana yazdırır:

#!/bin/bash

# Parametreyi tanımla
ismi=$1

# Parametreyi kullan
echo "Merhaba, ${isim}"

Bu komut dosyasını çalıştırmak için, aşağıdaki komutu kullanabilirsiniz:

./myscript.sh Makdos

Bu komut, aşağıdaki çıktıyı üretecektir:

Merhaba, Makdos

Parametreleri etkili bir şekilde kullanmak, betiklerin daha modüler ve uyarlanabilir olmasını sağlar, böylece geniş bir uygulama yelpazesi için kullanılabilirler.

Bash komut dosyalarında döngüler oluşturma

Bash betiklerinde döngüler, belirli bir komut veya komut grubunu belirli bir koşul gerçekleşene kadar ya da belirli bir sayıda tekrarlamak için vazgeçilmezdir. Bash'te en yaygın olarak kullanılan döngüler 'for' ve 'while' döngüleridir. 'For' döngüsü, belirli bir liste üzerinde iterasyon yapmak için kullanılır. Örneğin, bir dosya listesi üzerinde işlem yapmak veya belirli bir sayı aralığındaki sayılarla işlem yapmak için 'for' döngüsü idealdir. 

Örneğin, aşağıdaki komut dosyası, bir dizindeki tüm dosyaları listeler:

#!/bin/bash

# Dizindeki tüm dosyaları listele
for dosya in $(ls /home/kullanıcı/dosyalar)
do
  echo $dosya
done

'While' döngüsü ise belirli bir koşul doğru olduğu sürece komutları tekrarlamak için kullanılır.

Örneğin, aşağıdaki komut dosyası, bir kullanıcının 10'dan küçük bir sayı girene kadar bir sayı girmesini ister:

#!/bin/bash

# Kullanıcıdan bir sayı girmesini iste
sayi=$1

# Sayı 10'dan küçük olduğu sürece döngüyü çalıştır
while [ $sayi -lt 10 ]
do
  echo "Lütfen 10'dan küçük bir sayı girin:"
  read sayi
done 

Bash'te döngüler, betiklerde karmaşık iş akışları oluşturmanın ve otomasyonu en üst düzeye çıkarmanın anahtarlarından biridir. İster bir dizindeki tüm dosyalar üzerinde işlem yapmak, ister belirli bir duruma yanıt olarak bir dizi komutu tekrarlamak olsun, Bash'teki döngüler bu tür görevleri basit ve etkili bir şekilde gerçekleştirmenizi sağlar.

Bash betiklerinde koşullu deyimleri uygulama

Bash betiklerinde koşullu deyimler, belirli şartlara bağlı olarak farklı komutları çalıştırma yeteneği kazandırır. En yaygın kullanılan koşullu deyimler 'if', 'elif' ve 'else' ile temsil edilir. Bu deyimlerin kombinasyonu, betiklerinizde karmaşık mantık yapıları oluşturmanıza olanak tanır. Örneğin, bir dosyanın var olup olmadığını kontrol etmek için 'if [ -e dosya_adi ]; then ... fi' yapısını kullanabilirsiniz. Koşullu deyimler ayrıca sayısal veya metinsel değerlerin karşılaştırılmasında da kullanılır. Bunun yanında, 'case' deyimi ile çoklu koşulları değerlendirmek de mümkündür. Bash'te koşullu deyimleri etkili bir şekilde kullanmak, betiklerin daha dinamik, esnek ve hatalara karşı dayanıklı olmasını sağlar. Bir betiğin belirli bir koşula yanıt olarak nasıl tepki vereceğini belirlemek, Linux'ta otomasyonun gerçek gücünü ortaya koyar.

if-else deyimi, aşağıdaki formatta kullanılır:

if koşul
then
  # koşul doğruysa bu blok çalıştırılır
else
  # koşul yanlışsa bu blok çalıştırılır
fi

Örneğin, aşağıdaki komut dosyası, bir kullanıcının girdiği bir sayının çift olup olmadığını kontrol eder:

#!/bin/bash

# Kullanıcıdan bir sayı girmesini iste
sayi=$1

# Sayının çift olup olmadığını kontrol et
if [ $sayi % 2 -eq 0 ]
then
  echo "Sayı çifttir."
else
  echo "Sayı tektir."
fi

Bash betiklerinde fonksiyonları anlama

Bash betikleri içinde fonksiyonlar, belirli bir işlevi yerine getiren komut gruplarına isim vermenizi ve bu grupları defalarca çağırmanızı sağlar, böylece kodunuzu hem daha düzenli hem de yeniden kullanılabilir hale getirir. Bir fonksiyon, 'function' anahtar kelimesiyle tanımlanabilir veya bu kelimeyi atlayarak doğrudan fonksiyon ismiyle de tanımlanabilir. Fonksiyon tanımlamasının ardından süslü parantezler içerisinde fonksiyonun yapacağı işlemler belirtilir.

Örneğin, aşağıdaki komut dosyası, bir kullanıcının girdiği bir sayının karekökünü hesaplayan bir fonksiyon tanımlar:

#!/bin/bash

# Karekök fonksiyonunu tanımla
function karekok()
{
  # Parametreyi al
  sayi=$1
  # Karekök hesapla
  karekok=$(echo "$sayi" | bc -l sqrt)
  # Karekök'ü döndür
  echo $karekok
}
# Fonksiyonu çağır
karekok 16

Bu komut dosyası, aşağıdaki çıktıyı üretecektir:

4

Fonksiyonların etkili bir şekilde kullanımı, betiklerin daha modüler ve bakımı kolay olmasına yardımcı olur.

Bash betiklerinde değişkenler nasıl kullanılır?

Bash betiklerinde değişkenler, bilgi depolamak ve bu bilgiye daha sonra erişmek için kullanılır. Bir değişken tanımlamak için özel bir anahtar kelimeye ihtiyaç duyulmaz; sadece değişkenin adını belirtip eşittir (=) işaretiyle değerini atamanız yeterlidir.

Örneğin, aşağıdaki komut dosyası, bir kullanıcının girdiği bir sayıyı saklamak için bir değişken tanımlar:

#!/bin/bash

# Sayıyı tanımla
sayi=10

Bu değişkenin değerine erişmek için ise dolar işareti ($) kullanılır, yani echo $sayi komutu.

Bu komut dosyası, aşağıdaki çıktıyı üretecektir:

Sayı: 10

Bash'te değişken isimleri büyük-küçük harf duyarlıdır, yani 'Degisken' ve 'degisken' iki farklı değişken olarak kabul edilir. Ayrıca, betiklerde önceden tanımlı bazı özel değişkenler (örn. $?, $#, $* gibi) vardır ve bu değişkenler belirli bilgileri saklar. Örneğin, $? son çalıştırılan komutun çıkış durumunu saklar. Değişkenleri efektif bir şekilde kullanmak, betiklerin daha dinamik, okunabilir ve yeniden kullanılabilir hale gelmesine olanak tanır.

Bash betiklerinde hata ayıklama

Bash betikleri yazarken karşılaşılan hatalar, özellikle karmaşık betiklerde, baş ağrıtıcı olabilir. Ancak Bash, betiklerdeki hataları bulma ve düzeltme sürecini kolaylaştırmak için birkaç yararlı araca sahiptir. Betiği bash -x betik_adı.sh komutuyla çalıştırarak, betiğin her bir satırının nasıl değerlendirildiğini ve hangi komutların çalıştırıldığını adım adım görebilirsiniz. Bu, olası sorunların kaynağını izole etmek için mükemmel bir yöntemdir. Ayrıca, betik içinde set -e seçeneğini kullanarak, herhangi bir hata meydana geldiğinde betiğin durmasını sağlayabilirsiniz. set -u seçeneği ise tanımlanmamış değişkenlerin kullanılması durumunda betiğin sona ermesini sağlar. Hata mesajlarını anlamak, problemin doğru bir şekilde teşhis edilmesi için kritiktir. Bash hata ayıklama araçlarını etkili bir şekilde kullanmak, betiklerinizin daha güvenilir ve verimli çalışmasını sağlar.

Bash komut dosyasında süreç kontrolü

Bash betikleri, sadece basit komutları sıralı bir şekilde çalıştırmakla kalmaz, aynı zamanda birden fazla işlemi veya süreci aynı anda kontrol edebilme yeteneğine de sahiptir.

Bash komut dosyalarında süreç kontrolü için, aşağıdaki teknikler kullanılabilir:

  • wait komutu: Bu komut, bir veya daha fazla sürecin tamamlanmasını bekler.
  • kill komutu: Bu komut, bir veya daha fazla süreci sonlandırır.
  • & operatörü: Bu operatör, bir komutu arka planda çalıştırır.

Örneğin, '&' operatörü ile bir komutun arka planda çalıştırılmasını sağlayarak elde edilir. Örneğin, 'komut1 & komut2' şeklinde bir kullanımda, 'komut1' arka planda çalışırken 'komut2' ön planda çalışmaya başlar. Bu, özellikle uzun süreli işlemleri paralel olarak çalıştırmak istediğinizde yararlıdır. 'wait' komutu, arka planda çalışan bir sürecin tamamlanmasını beklemek için kullanılır. Bunun yanı sıra, 'trap' komutu, betik içinde belirli sinyallere veya olaylara yanıt vermek için kullanılır; bu, betiğin beklenmedik bir şekilde sonlandırılması durumunda temizlik görevleri gibi eylemleri tetiklemek için kullanışlıdır. Genel olarak, Bash'te süreç kontrolü, betiklerin daha esnek, tepkisel ve performanslı olmasını sağlar.

Bash komut dosyalarının yürütülmesi

Bir Bash komut dosyası oluşturduktan sonra, onu çalıştırma zamanı gelir. Ancak, doğrudan çalıştırmadan önce betiğin yürütme izinlerine sahip olması gerekir. Bu izni chmod +x betik_adı.sh komutuyla ekleyebilirsiniz. İzinlerle ilgili işlem tamamlandığında, betiği './betik_adı.sh' şeklinde çalıştırabilirsiniz. './' ön eki, betiğin mevcut dizinde bulunduğunu belirtir. 

Eğer betiği farklı bir dizinde çalıştırmak isterseniz, tam yolunu belirtmelisiniz. Alternatif olarak, 'bash betik_adı.sh' komutunu kullanarak betiği doğrudan Bash ile çalıştırabilirsiniz; bu durumda yürütme iznine gerek duyulmaz. Ancak, bu yaklaşım betiğin shebang ('#!/bin/bash') satırını dikkate almadan Bash ile yürütülmesini sağlar. Genel olarak, Bash komut dosyalarını yürütmek, Linux'ta otomasyonun ve komutların toplu işlenmesinin anahtarıdır.

Sonuç

Bash komut dosyaları, Linux'ta otomasyonun ve tekrarlanan görevlerin etkili bir şekilde gerçekleştirilmesinin temel taşıdır. Bu makalede, Bash betiklerinin temel bileşenlerini ve nasıl etkili bir şekilde kullanılacağını ele aldık. Ancak, Bash scripting konusu çok geniş bir alan olup, burada anlatılanlar sadece başlangıç seviyesi için bir rehberdir. Daha ileri Bash scripting teknikleri, fonksiyonlar, döngüler ve hata ayıklama üzerine daha derinlemesine bilgi edinmek isteyenler için birçok online kaynak ve kitap bulunmaktadır.

Ayrıca, çeşitli online forumlar ve topluluklar, karşılaşılan sorunları çözmek ve yeni teknikler öğrenmek için harika kaynaklardır. Bash scripting yolculuğunuzda başarılar dileriz!

MakdosTech Footer Logo

Tüm Hakları Saklıdır 2024 • Makdos Tech

Yazıların izinsiz veya atıfsız paylaşılması yasaktır.