Bash Betik Yazmayı Öğrenmek: Yöntem, Örnek İş Akışı ve Sık Hatalar
Bash ile betik yazmayı ve sistem otomasyonunu öğrenin: kabuk temelleri, akış kontrolü, hata yönetimi, metin işleme, uzak sunucu ve zamanlama.
Bash betiği nedir, ne zaman kullanılır?
Bash, Linux ve benzeri sistemlerde yaygın kullanılan komut kabuğudur. Terminalde elle yazdığınız komutları bir dosyaya yazıp sırayla çalıştırdığınızda bash betiği (script) elde edersiniz. Dosya adı genellikle .sh ile biter ve ilk satırında hangi yorumlayıcıyla çalışacağını belirten bir tanım bulunur.
Betik, tekrar eden sistem işlerini otomatikleştirmek için idealdir: yedek almak, günlük dosyalarını temizlemek, servis durumunu kontrol etmek, birden çok sunucuda aynı komutu çalıştırmak, dosyaları toplu yeniden adlandırmak. Karmaşık veri işleme, büyük uygulama mantığı ya da kullanıcı arayüzü gerektiren işlerde ise Python gibi bir dil daha uygundur. Kural olarak, işin çoğu mevcut komutları birbirine bağlamaksa bash, kendi mantığınızı yazmaksa başka bir dil tercih edilir.
Kabuk temelleri ve ilk betik
Betik yazmadan önce kabuğun temel kavramlarını bilmek gerekir: dosya ve dizin gezinme, izinler, yönlendirme (çıktıyı dosyaya yazmak), boru hattı (bir komutun çıktısını diğerine vermek), ortam değişkenleri ve joker karakterler. Bunlar günlük kullanımda yer ettiyse betik yazmak yalnızca bu komutları kalıcı hale getirmektir.
İlk betik şu adımlarla yazılır: • Dosyanın ilk satırına yorumlayıcıyı belirten shebang satırını koymak • Komutları sırayla yazmak ve açıklayıcı yorum satırları eklemek • Dosyaya çalıştırma izni vermek • Betiği çalıştırıp çıktısını gözlemlemek
Değişkenleri atarken eşittir işaretinin çevresine boşluk koyulmadığını ve değişkene başvururken dolar işareti kullanıldığını öğrenmek, yeni başlayanların en sık takıldığı noktaları baştan çözer.
Akış kontrolü ve fonksiyonlar
Betikleri güçlendiren yapılar koşullar, döngüler ve fonksiyonlardır. Koşul ifadeleriyle bir dosyanın var olup olmadığını, bir servisin çalışıp çalışmadığını ya da bir değerin beklenen aralıkta olup olmadığını kontrol edersiniz. Döngülerle bir klasördeki tüm dosyalar ya da bir listedeki tüm sunucular üzerinde aynı işlemi yaparsınız.
Fonksiyonlar tekrarlayan kod parçalarını adlandırarak betiği okunur kılar. Örneğin bir günlük yazma fonksiyonu ve bir hata mesajı fonksiyonu tanımlayıp betiğin her yerinde kullanabilirsiniz. Betiğe komut satırından parametre vermek, aynı betiği farklı dizinler ya da hedeflerle yeniden kullanmanızı sağlar. Değişken adlarını anlaşılır seçmek, aylar sonra kendi betiğinizi okurken size zaman kazandırır.
Hata yönetimi ve güvenli betik ilkeleri
Bash varsayılan olarak bir komut başarısız olsa bile sonraki satırdan devam eder. Bu, örneğin bir dizine girilemediği halde silme komutunun yanlış yerde çalışması gibi ciddi sonuçlar doğurabilir. Bu yüzden hata yönetimi betik yazmanın en önemli bölümüdür. Betiğin ilk satırlarında hata durumunda durmasını, tanımsız değişken kullanımını hata saymasını ve boru hattındaki hataları yakalamasını sağlayan kabuk seçeneklerini etkinleştirmek yaygın bir uygulamadır.
Güvenli betik için temel ilkeler: • Değişkenleri çift tırnak içinde kullanmak, böylece boşluk içeren adlar bozulmaz • Her komutun çıkış durumunu kontrol etmek ve anlamlı hata mesajı yazmak • Yıkıcı komutlardan (silme, taşıma) önce hedef yolu doğrulamak • Geçici dosyaları güvenli oluşturmak ve iş bitince temizlemek • Parolaları betiğin içine yazmamak
Bir betiği önce zarar vermeyen bir deneme modunda çalıştırmak da iyi bir alışkanlıktır.
Metin işleme ve veri dönüştürme
Sistem yöneticisinin verisinin büyük kısmı metindir: günlük dosyaları, yapılandırma dosyaları, komut çıktıları. Bash'in gücü, bu metni küçük araçlarla süzüp dönüştürebilmesindedir. grep ile satır arama, sed ile metin değiştirme, awk ile sütun bazlı işleme, sort ve uniq ile sıralama ve sayma, cut ile alan ayırma, tr ile karakter dönüştürme bu araçların başlıcalarıdır.
Örneğin bir web sunucusunun erişim günlüğünden en sık hata veren adresleri bulmak istediğinizde, hata satırlarını süzer, adres alanını ayırır, sıralar ve sayarsınız. Her adım tek bir iş yapan komuttur ve boru hattı ile bağlanır. Bu yaklaşım Unix felsefesinin özüdür: küçük araçlar, tek iş, birleştirilebilir çıktı. Yapılandırılmış veri (JSON gibi) için özel araçlar kullanmak, düzenli ifadelerle uğraşmaktan daha güvenlidir.
Sistem ve uzak sunucu otomasyonu, test ve zamanlama
Gerçek otomasyonda betik tek makinede kalmaz. Uzak sunucuya güvenli kabuk (SSH) ile bağlanıp komut çalıştırmak, dosya aktarmak ve birden çok sunucuda aynı işlemi yürütmek mümkündür. Anahtar tabanlı kimlik doğrulama, şifre girmeden çalışan betikler için gereklidir ve parolanın betik içinde tutulmasını önler. Kullanıcı yönetimi, disk kullanımı kontrolü, servis yeniden başlatma ve yedekleme tipik otomasyon işleridir.
Betiği yayına almadan önce test etmek gerekir. Örnek girdilerle çalıştırın, hata durumlarını bilerek tetikleyin ve çıktıyı doğrulayın. Çalıştırmayı zamanlamak için sistem zamanlayıcıları (cron ya da systemd zamanlayıcıları) kullanılır; zamanlanmış betiğin ortam değişkenlerinin etkileşimli oturumdan farklı olabileceğini ve çıktısını bir günlük dosyasına yazması gerektiğini unutmayın. Betikleri sürüm kontrol sisteminde tutmak, değişiklikleri izlemenizi sağlar.
Örnek bir iş akışı olarak gece yedekleme betiğini düşünün. Betik önce parametreyle gelen kaynak dizinin var olduğunu doğrular, hedefte tarihli bir klasör oluşturur, dosyaları arşivleyip kopyalar, her adımın çıkış durumunu kontrol eder, sonucu günlük dosyasına yazar ve eski yedekleri belirlediğiniz saklama kuralına göre temizler. Zamanlayıcıya bağlandığında kimse müdahale etmeden çalışır; bir adım başarısız olursa bildirim göndermesi beklenir.
Sık yapılan hatalar da bellidir: betiği yalnızca kendi makinenizdeki ortamda denemek, yolları göreli yazıp farklı dizinden çalıştırınca bozulmasına yol açmak, çıktıyı hiçbir yere kaydetmemek ve yıkıcı bir komutu önce yalnızca listeleme yaparak denemeden çalıştırmak. Bu alışkanlıkları baştan düzeltmek, betiğin güvenle devredilebilir olmasını sağlar.
Mindset programında Bash
Mindset'teki Bash ile Sistem Otomasyonu ve Betik Yazımı programı şu modül başlıklarını içerir: Kabuk Temelleri ve Betik Yapısı, Akış Kontrolü ve Fonksiyonlar, Hata Yönetimi ve Güvenli Betik İlkeleri, Metin İşleme ve Veri Dönüştürme, Sistem ve Uzak Sunucu Otomasyonu, Test, Zamanlama ve Proje.
Başlık sırası kabuk temellerinden başlayıp hata yönetimi, metin işleme ve uzak sunucu otomasyonu üzerinden uygulamalı bir proje ile tamamlanır.
İlgili Mindset programı
Bash ile Sistem Otomasyonu ve Betik Yazımı
Sık sorulan sorular
Bash öğrenmek için Linux bilmek şart mı?
Temel Linux komutlarını bilmek şarttır, çünkü betik bu komutların birleşiminden oluşur. Dosya gezinme, izinler ve yönlendirme gibi konulara hakimseniz betik yazmak doğal bir adım olur. Windows kullanıcıları için de alt sistem ya da sanal makine ile Linux ortamı kurmak mümkündür.
Bash mi Python mu öğrenmeliyim?
İkisi farklı işlere uygundur. Komutları birbirine bağlayan hızlı sistem işleri için bash pratiktir. Daha karmaşık mantık, veri yapıları, hata yönetimi ve uzun süre bakımı yapılacak araçlar için Python daha güçlüdür. Sistem yöneticileri genellikle ikisini birlikte bilir ve işe göre seçer.
Betiğim neden çalışmıyor, nereden başlayarak hata ayıklamalıyım?
Önce dosyada çalıştırma izni olup olmadığına, ilk satırdaki yorumlayıcı tanımına ve değişkenlerde boşluk ya da tırnak hatası olup olmadığına bakın. Betiği adım adım izleme moduyla çalıştırmak hangi satırın ne ürettiğini gösterir. Kabuk seçenekleriyle hatada durmasını sağlamak, sorunun yerini hızla bulmanıza yardım eder.
Bash betiği güvenli midir, nelere dikkat etmeliyim?
Betik, çalıştıran kullanıcının yetkisiyle işlem yapar; bu nedenle yetkiyi gereksiz yükseltmemek önemlidir. Dışarıdan gelen girdiyi doğrulamadan komuta vermeyin, değişkenleri tırnak içinde kullanın, parolaları betiğe yazmayın ve silme gibi yıkıcı işlemlerden önce hedefi kontrol edin.
İlgili rehberler
Kategori: DevOps ve Bulut Teknolojileri