Okuma Süresi: 5 dakika.

Bash Script Ders Notlarım - 1

İçerik Haritası

Selamlar. Bu yazı, Bash Script yazmaya yeni başlayanlar için temel bilgileri içeriyor. Değişkenler, diziler ve kullanıcı girdisi alma gibi konulara değinerek Bash ile otomasyon sağlamanın temel taşlarını açıklıyorum. İlerleyen yazılarda fonksiyonlar, hata yönetimi ve gelişmiş Bash tekniklerine değineceğim. Serinin sonunda ise ufak bir proje örneği olacak.

Bash Script Nedir

Bash Scripting, komut satırında otomasyon sağlamak için Bash kabuğunda yazılan betik dosyalarıdır. Komutları sıralı bir şekilde çalıştırarak görevleri otomatikleştirmeye, sistem yönetimini kolaylaştırmaya ve tekrar eden işlemleri hızlandırmaya yardımcı olur.

Shebang Nedir?

#!/bin/bash

Yukarıdaki şekilde yazılan shebang betiğin hangi yorumlayıcı ile çalıştırılacağını belirlemek için kullanılır. Örnekte /bin/bash olarak belirtilmiştir. Yani bu betik bash kabuğu kullanılarak yorumlanacaktır. Benzer şekilde Python için:

#!/bin/python3

Değişkenler

Bash Scripting’de değişken tanımlarken dikkat etmemiz gereken nokta değişken adı ve eşittir işareti arasında boşluk olmaması gerektiğidir. Eğer boşluk bırakırsak betik hata verecektir.

#!/bin/bash
ad="Dünya"

Yukarıdaki örnekte ad adında bir değişken oluşturduk ve bu değişkenin değeri olarak “Dünya” kelimesini atadık.

Özel Değişkenler

  • $0 : Scriptin adı.
  • $1, $2,… : Komut satırı argümanları.
  • $# : Komut satırı argümanlarının sayısı.
  • $@ : Tüm komut satırı argümanları.
  • $? : Son çalıştırılan kodun çıkış durumu. (Çıktı:0 : Başarılı, Çıktı :0 dışı : Hata)
  • $$ : Scriptin işlem kimliği. (PID)
  • $_ : Çalıştırılan son komutun son argümanı.

Örnek:

#!/bin/bash
echo "Script adı: $0"
echo "Birinci argüman: $1"
echo "Argüman sayısı: $#"

Bu script ./script.sh arguman1 arguman2 şeklinde çalıştırıldığında çıktısı:

Script adı: ./script.sh
Birinci argüman: arguman1
Argüman sayısı: 2

Çevresel Değişkenler

Sistemdeki kullanıcı ve işlem bilgilerini saklar.

  • HOME : Kullanıcının ana dizini.
  • PATH : Çalıştırılabilir dosyaların aranacağı dizinlerin listesi.
  • USER : Geçerli kullanıcı adı.
  • PWD : Geçerli çalışma dizini.
  • SHELL : Kullanıcının kabuğu.

Örnek:

#!/bin/bash
echo "Kullanıcı adı: $USER"
echo "Ana dizin: $HOME"

Sabitler

Bash’te sabitler değerleri değiştirilemeyen değişkenlerdir. Bash, değişkenlerin değerlerini değiştirmeyi engelleyen yerleşik bir sabit tanımlama sistemi sunmaz ama sabitler tanımlayabilmek için çeşitli teknikler vardır.

Sabit Tanımlama

Sabit tanımlamak için readonly yapısını kullanabiliriz.

#!/bin/bash
readonly PI=3.14

Yukarıdaki örnekte PI değişkeni readonly yöntemi ile sabit olarak tanımlanmıştır. Değiştirilmek istendiğinde hata verecektir.

Diziler

Bash’ta diziler birden çok değeri tek bir değişkende saklamamızı sağlar. Diziler, indekslenmiş elemanlar veya anahtar-değer çiftleri olarak tanımlanır.

İndekslenmiş Diziler

İndekslenmiş dizilerde elemanlara indeks numaraları ile erişilir.

Dizi Tanımlama ve Atama

#!/bin/bash
# İndekslenmiş Dizi Tanımlama ve Atama:
meyveler=("Elma" "Armut" "Çilek")

# Dizinin belli bir elemanına erişim:
echo "Birinci meyve: ${meyveler[0]}"

# Dizinin tüm elemanlarına erişim:
echo "Tüm elemanlar: ${meyveler[@]}"

# Dizinin uzunluğu:
echo "Dizi uzunluğu: ${#meyveler[@]}"

Yukarıdaki örnekte “meyveler” adında bir dizi tanımlanmış ve elemanları olarak “Elma”, “Armut”, “Çilek” atanmıştır.
Dizinin belirli bir elemanına erişmek için dizi\_adı[indeks numarası] kullanılır. Dizinin tüm elemanlarına erişmek için indeks numarası yerine ”@” kullanılır.

Anahtar-Değer Çiftleri (Associative Arrays)

Associative arrays, anahtar-değer çiftlerini saklamak için kullanılır ve Bash 4.0 sonrası sürümlerde desteklenir.

#!/bin/bash
# Associative Array Tanımlama ve Atama:

# Tanımlama:
declare -A calisan

# Atama:
calisan[isim]="Oğuzhan"
calisan[soyisim]="Kuşca"
calisan[yas]=24

# Değerleri okuma:
echo "Çalışan adı: ${calisan[isim]}"
echo "Çalışan yaşı: ${calisan[yas]}"

# Tüm anahtarları ve değerleri listeleme:
echo "Tüm anahtarlar: ${!calisan[@]}"
echo "Tüm değerler: ${calisan[@]}"

Yukarıdaki örnekte declare -A kullanılarak “calisan” adında bir associative array tanımlanmıştır. Sonrasında calisan[anahtar]=Değer şeklinde anahtar-değer atamaları yapılmıştır.
Elemanlara erişmek için dizi\_adı[anahtar] sözdizimi kullanılır.
NOT: Değişkenler, scriptlerde bilgi saklamak ve işlemek için kullanılırken, çevresel ve özel değişkenler sistem ve kullanıcı bilgilerini sağlar.

Kullanıcıdan Girdi Alma

Bash scriptlerinde kullanıcıdan girdi almak için read komutunu kullanabiliriz.
Temel kullanım:

#!/bin/bash
echo "İsminizi girin"
read isim
echo "Merhaba $isim"

Yukarıdaki örnekte kullanıcıdan ismini girmesini istedik ve sonrasında bu adı kullanarak mesaj yazdırdık.

read Komutunun Seçenekleri

  • -p : Kullanıcıya bir istem mesajı göstermek için kullanılır.
  • -s : Kullanıcı girdisini gizlemek için kullanılır. (Şifre gibi alanlarda kullanılabilir.)
  • -t : Girdi için belirli bir süre beklemek için kullanılır.
  • -n : Belirli sayıda karakter girildikten sonra otomatik olarak devam eder.

Örnekler:

#!/bin/bash

# İstem mesajı göstermek:
read -p "Lütfen yaşınızı girin:" yas
echo "Yaşınız: $yas"

# Gizli girdi almak:
read -sp "Lütfen şifrenizi girin:" sifre
echo
echo "Şifreniz alındı."

# Timeout ile girdi alma:
if read -t 5 -p "5 saniye içinde adınızı yazınız:" girdi
then
 echo "Adınız: $girdi"
else
 echo "Zaman aşımı!"
fi

# Belirli sayıda karakter girdikten sonra devam etmek:
read -n 1 -p "Bir karakter giriniz:" karakter
echo
echo "Girdiğiniz karakter: $karakter"

Bu yazıda Bash script yazmaya başlamanın temellerini öğrendik. Değişkenler, sabitler ve diziler gibi temel konulara göz attık. Bir sonraki yazılarda, daha ileri seviye konulara (örneğin fonksiyonlar, hata yönetimi) geçeceğiz.