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, 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ğ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:
Temel olarak, Bash betiği, tekrar tekrar kullanılabilen ve karmaşık işleri otomatikleştiren güçlü bir araçtır.
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.
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, 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:
Komut satırında kullanabileceğiniz çok çeşitli komutlar vardır. Bazı temel komutlar şunlardır:
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ı, 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:
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:
Ö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 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:
Ö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 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 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 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, 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 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 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:
Ö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.
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.
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!