Kabuk Programlamaya Giriş

# Kabuk Programlama (Shell Scripting) Nedir?
Kabuk programlama, Linux ortamında komutlar yazarak ve çalıştırarak görevleri otomatikleştirmenizi ve düzenlemenizi sağlayan güçlü bir programlama yöntemidir. Özellikle şu alanlarda değerlidir:
– Sistem yönetimi
– Görev otomatizasyonu
– Verimliliği artırma

Başlıklar:

# Shell Script (Kabuk Programlama) İndeksi

1. **Temel Kavramlar**
— Shell (Kabuk) Nedir?
— Shell Türleri (bash, sh, ksh, zsh)

2. **Değişkenler ve Veri Tipleri**
— Değişken Tanımlama
— Sabitler
— Diziler
— İlişkisel Diziler

3. **Temel Operatörler**
— Metin İşlemleri
— Aritmetik İşlemler
— Mantıksal Operatörler

4. **Kontrol Yapıları**
— if-else İfadeleri
— case İfadeleri
— Döngüler (for, while, until)
— break ve continue
— exit ve sleep

5. **Fonksiyonlar**
— Fonksiyon Tanımlama
— Parametre Geçirme
— Dönüş Değerleri
— Özyineleme

6. **Komut Satırı İşlemleri**
— getopts Kullanımı
— Seçenek ve Argüman İşleme
— basename ve dirname
— Dosya ve Dizin Kontrolleri

7. **Gelişmiş Özellikler**
— Süslü Parantez Genişletmesi
— seq Komutu
— nohup Kullanımı
— Rastgele Sayılar

8. **Örnek Proje**
— Hesap Makinesi Uygulaması
— Kurulum ve Çalıştırma
— Kod Açıklamaları
— Geliştirme Önerileri

## Kabuk (Shell) Türleri
İşte en yaygın kullanılan kabuklar:

1. **Bash (Bourne Again Shell)**
— En yaygın kullanılan kabuk
— Birçok Linux dağıtımında varsayılan kabuk

2. **sh (Bourne Shell)**
— Orijinal Unix kabuğu
— Bash’in öncüsü

3. **ksh (Korn Shell)**
— csh ve sh’nin özelliklerini birleştirir
— Unix ortamlarında popüler

4. **zsh (Z Shell)**
— Gelişmiş özelliklere sahip modern kabuk
— Yeni macOS sürümlerinde varsayılan kabuk

# Kabuk Türünüzü Kontrol Etme
Mevcut kabuğunuzu belirlemek için aşağıdaki komutu çalıştırın:
“`bash
echo $0
“`

# Dosya Oluşturma ve Kullanma
Unix ve Linux ortamlarında vi komutunu kullanarak dosya oluşturma ve düzenleme temel bir beceridir. İşte vi ile dosya oluşturma, içerik girme ve kaydetme adımları:

## 1. Yeni Dosya Oluşturmak için vi’yi Açma
– Terminalinizi açın
– Şu komutu yazın: `vi my_script.sh`
– Not: my_script.sh mevcut değilse, vi bu isimde yeni bir dosya oluşturacaktır

## 2. Temel vi Düzenleme Komutları
vi’yi açtığınızda, komut modundasınız. Yazma moduna geçmek için:
– `i` tuşuna basın. Artık dosyaya içerik yazabilirsiniz

## 3. vi’de İçerik Yazma
“Merhaba, Dünya!” yazan ve mevcut tarih/saati gösteren basit bir betik oluşturalım:
“`bash
#!/bin/bash
# Bu betik bir karşılama mesajı ve mevcut tarih/saati yazdırır
echo “Merhaba, Dünya!”
echo “Mevcut tarih ve saat:”
date
“`

## 4. Yazma Modundan Çıkma
– Komut moduna dönmek için `Esc` tuşuna basın

## 5. vi’de Kaydetme ve Çıkma
– Kaydet ve çık: `:wq` yazıp Enter’a basın
– Sadece kaydet: `:w` yazıp Enter’a basın
– Kaydetmeden çık: `:q!` yazıp Enter’a basın

## 6. Betiği Çalıştırılabilir Yapma
“`bash
chmod +x my_script.sh
“`

## 7. Betiği Çalıştırma
“`bash
./my_script.sh
“`

## 8. Çalıştırılabilir Yapmadan Betiği Çalıştırma
“`bash
bash my_script.sh
“`

Çıktı şuna benzer olacaktır:
“`
Merhaba, Dünya!
Mevcut tarih ve saat:
Sal Kas 6 12:34:56 UTC 2023
“`

# İşlem Kontrol Kısayolları
– `Ctrl + C`: Çalışan işlemi anında sonlandırır
– `Ctrl + Z`: İşlemi duraklatır ve arka plana gönderir (fg veya bg ile devam ettirilebilir)

# Kabuk Programlamada Yorumlar
Tek Satırlık Yorumlar:
“`bash
# Bu bir tek satırlık yorumdur
echo “Merhaba, Dünya!”
“`

# Çok Satırlı Yorumlar

Bash’te çok satırlı yorumlar için doğrudan bir sözdizimi yoktur, ancak bunu iki farklı yöntemle yapabilirsiniz:

## 1. Here-Document Kullanarak:
“`bash
: <<’COMMENT’
Bu bir çok satırlı yorumdur.
Buraya birden fazla satır ekleyebilirsiniz.
İstediğiniz kadar satır yazabilirsiniz.
COMMENT
“`

## 2. << Sözdizimini Doğrudan Kullanarak:
“`bash
<<COMMENT
Bu da çok satırlı yorum için
alternatif bir yöntemdir.
İstediğiniz kadar satır ekleyebilirsiniz.
COMMENT
“`

Not: Her iki yöntemde de ‘COMMENT’ yerine istediğiniz herhangi bir kelime kullanabilirsiniz, ancak başlangıç ve bitiş kelimeleri aynı olmalıdır.

# Değişkenler ve Dizilerle Çalışma

Değişkenler ve diziler, betiklerde veri depolama ve işleme olanağı sağlar, bu da otomasyonu daha esnek hale getirir.

## Değişkenler
Değişken tanımlama ve değerine erişmek için $ kullanma:
“`bash
NAME=”Linux”
echo “Welcome to $NAME Scripting”
“`

## Sabitler
readonly ile salt okunur değişkenler oluşturma:
“`bash
readonly VERSION=”1.0″
“`

## Diziler
Birden fazla değer depolama:
“`bash
myArray=(1 2 3 “Hello” “World”)
echo “${myArray[1]}”
# Çıktı: 2
“`

### Dizi İşlemleri:

#### Dizi Uzunluğunu Alma:
“`bash
echo “${#myArray[@]}” # veya
echo “${#myArray[*]}”
# Dizideki toplam eleman sayısını döndürür
“`

#### Diziden Belirli Değerleri Alma:
Belirli bir indeksten başlayarak değerleri alma:
“`bash
echo “${myArray[*]:1}”
# İkinci elemandan (indeks 1) başlayarak tüm elemanları getirir
“`

#### Belirli Aralıktaki Değerleri Alma:
“`bash
echo “${myArray[*]:1:2}”
# İndeks 1’den başlayarak 2 eleman getirir
“`

#### Dizi Güncelleme (Yeni eleman ekleme):
“`bash
myArray+=(5 6 8)
“`

### İlişkisel Dizilerle Çalışma:

#### Tanımlama ve Başlatma:
“`bash
declare -A myArray
myArray=( [name]=Paul [age]=20 )
“`

#### Değerlere Erişim:
“`bash
echo “${myArray[name]}”
“`

#### Dizi Uzunluğunu Alma:
“`bash
echo “${#myArray[@]}”
“`

#### Dizi Güncelleme:
“`bash
myArray+=( [city]=NewYork )
“`

💡 **İpucu**: Diziler, dosya adları veya yapılandırmalar gibi değer listelerini yönetmek için kullanışlıdır.

# Metin ve Aritmetik İşlemler

## Metin İşleme Örnekleri:

### Temel Metin İşlemleri:
“`bash
str=”Shell Scripting”

# Uzunluk
echo ${#str} # Çıktı: 15

# Değiştirme
echo ${str/Scripting/Programming} # Çıktı: Shell Programming

# Alt Metin Çıkarma
echo ${str:6:9} # Çıktı: Scripting
“`

### Gelişmiş Metin İşlemleri:
“`bash
myVar=”Hello World!”

# Metin uzunluğunu alma
length=${#myVar}
echo $length # Çıktı: 12

# Büyük harfe çevirme
upper=${myVar^^}
echo $upper # Çıktı: HELLO WORLD!

# Küçük harfe çevirme
lower=${myVar,,}
echo $lower # Çıktı: hello world!

# Alt metin değiştirme
replace=${myVar/World/Buddy}
echo $replace # Çıktı: Hello Buddy!

# Alt metin çıkarma (dilim)
slice=${myVar:6:5}
echo $slice # Çıktı: World
“`

# KULLANICI ETKİLEŞİMLERİ

## Kullanıcıdan Veri Alma

### Temel Veri Alma:
“`bash
read var_name
echo “Girdiğiniz: $var_name”
# Örnek Çıktı: (Kullanıcı “John” yazar)
# Girdiğiniz: John
“`

### İstemle Veri Alma:
“`bash
read -p “Adınız: “ NAME
echo “Merhaba, $NAME!”
# Örnek Çıktı: 
# Adınız: John
# Merhaba, John!
“`

Temel Farklar:
– Temel Veri Alma: İstem olmadan veri alır
– İstemli Veri Alma: Kullanıcıyı yönlendiren bir istem gösterir

## Aritmetik İşlemler

### let Komutu Kullanımı:
“`bash
# Artırma
let a++ # a değerini 1 artırır
“`

# Kabuk Programlamada Koşullu İfadeler ve İşlemler

## Aritmetik İşlemler

### Çarpma ile Atama:
“`bash
# let kullanarak
let a=5*10
echo $a # Çıktı: 50

# (( )) kullanarak
((a=5*10))
echo $a # Çıktı: 50
“`

### Karmaşık Hesaplamalar:
“`bash
echo $((5 * (3 + 2))) # Çıktı: 25
“`

Not: `let` geleneksel, `(( ))` ise daha modern ve karmaşık aritmetik ifadelere izin verir.

## Koşullu İfadeler

### if İfadesi:
“`bash
if [ $a -gt $b ]; then
echo “a, b’den büyüktür”
fi
“`

### if-else İfadesi:
“`bash
if [ $a -gt $b ]; then
echo “a, b’den büyüktür”
else
echo “a, b’den büyük değildir”
fi
“`

### elif (else if) İfadesi:
“`bash
if [ $a -gt $b ]; then
echo “a, b’den büyüktür”
elif [ $a -eq $b ]; then
echo “a, b’ye eşittir”
else
echo “a, b’den küçüktür”
fi
“`

### case İfadesi:
“`bash
case $a in
a) echo “a değeri 1” ;;
b) echo “a değeri 2” ;;
*) echo “a değeri ne 1 ne de 2” ;;
esac
“`

## Karşılaştırma Operatörleri

– **Eşittir**: `-eq` veya `==`
“`bash
[ $a -eq $b ]
“`

– **Büyük Eşittir**: `-ge`
“`bash
[ $a -ge $b ]
“`

– **Küçük Eşittir**: `-le`
“`bash
[ $a -le $b ]
“`

– **Eşit Değildir**: `-ne` veya `!=`
“`bash
[ $a -ne $b ]
“`

– **Büyüktür**: `-gt`
“`bash
[ $a -gt $b ]
“`

– **Küçüktür**: `-lt`
“`bash
[ $a -lt $b ]
“`

  • *Önemli Notlar:**
    – Koşullarda operatörlerin etrafında boşluk bırakın
    – `elif` ve `else` isteğe bağlıdır ama çoklu koşullar için kullanışlıdır.
  • *Önemli Notlar:**
    – Koşullarda operatörlerin etrafında boşluk bırakın
    – `elif` ve `else` isteğe bağlıdır ama çoklu koşullar için kullanışlıdır.

# Mantıksal Operatörler ve Döngüler

## Mantıksal Operatörler

### && (VE) Operatörü:
“`bash
a=10
b=5
if [ $a -gt 5 ] && [ $b -lt 10 ]; then
echo “Her iki koşul da doğru”
else
echo “Bir veya her iki koşul yanlış”
fi
“`

### || (VEYA) Operatörü:
“`bash
a=10
b=15
if [ $a -gt 5 ] || [ $b -lt 10 ]; then
echo “En az bir koşul doğru”
else
echo “Hiçbir koşul doğru değil”
fi
“`

### && ve || Operatörlerini Birleştirme:
“`bash
a=10
b=5
c=15
if [ $a -gt 5 ] && [ $b -lt 10 ] || [ $c -eq 15 ]; then
echo “Koşul sağlandı”
else
echo “Koşul sağlanmadı”
fi
“`

Açıklama:
– `&&` her iki koşulun da doğru olmasını gerektirir
– `||` ilk koşul başarısız olursa ikinci koşulu kontrol eder

### Üçlü Operatör (Tek Satırlık If-Else):
“`bash
a=10
[ $a -gt 5 ] && echo “Büyük” || echo “Büyük Değil”
“`

## Döngüler

### For Döngüsü
Liste veya değer aralığı üzerinde yineleme yapar.

Temel Sözdizimi:
“`bash
for item in liste; do
# Her öğe için çalıştırılacak komutlar
done
“`

Örnek:
“`bash
for i in 1 2 3; do
echo “Sayı: $i”
done
# Çıktı:
# Sayı: 1
# Sayı: 2
# Sayı: 3
“`

Aralık Örneği:
“`bash
for i in {1..3}; do
echo “Sayaç: $i”
done
# Çıktı:
# Sayaç: 1
# Sayaç: 2
# Sayaç: 3
“`

### While Döngüsü
Belirtilen koşul doğru olduğu sürece çalışır.

Sözdizimi:
“`bash
while [ koşul ]; do
# Çalıştırılacak komutlar
done
“`

Örnek:
“`bash
count=1
while [ $count -le 3 ]; do
echo “Sayaç: $count”
((count++)) # Sayacı artır
done
# Çıktı:
# Sayaç: 1
# Sayaç: 2
# Sayaç: 3
“`

# Döngü Türleri ve Kullanımları

## Until Döngüsü
Koşul doğru oluncaya kadar çalışmaya devam eder.

Sözdizimi:
“`bash
until [ koşul ]; do
# Çalıştırılacak komutlar
done
“`

Örnek:
“`bash
count=1
until [ $count -gt 3 ]; do
echo “Sayaç: $count”
((count++))
done
# Çıktı:
# Sayaç: 1
# Sayaç: 2
# Sayaç: 3
“`

## Sonsuz Döngüler
Manuel olarak durdurulana kadar (örn: Ctrl+C) çalışmaya devam eder.

### For ile Sonsuz Döngü:
“`bash
for (( ; ; )); do
echo “Bu bir sonsuz döngüdür”
done
“`

### While ile Sonsuz Döngü:
“`bash
while :; do
echo “While ile sonsuz döngü”
done
“`

### Until ile Sonsuz Döngü:
“`bash
until false; do
echo “Until ile sonsuz döngü”
done
“`

## Select Döngüsü
Kullanıcının bir listeden seçim yapmasını sağlayan basit bir menü sistemi oluşturur.

Sözdizimi:
“`bash
select seçenek in liste; do
# Kullanıcı seçimine göre komutlar
done
“`

Örnek:
“`bash
PS3=”Bir meyve seçin: “
select meyve in Elma Muz Portakal Çıkış; do
case $meyve in
Elma) echo “Elma’yı seçtiniz”;;
Muz) echo “Muz’u seçtiniz”;;
Portakal) echo “Portakal’ı seçtiniz”;;
Çıkış) break;;
*) echo “Geçersiz seçenek”;;
esac
done
“`

Örnek Çıktı:
“`
1) Elma
2) Muz
3) Portakal
4) Çıkış
Bir meyve seçin: 2
Muz’u seçtiniz
“`

Açıklama:
– `PS3` istem mesajını belirler
– `select` döngüsü seçenekleri gösterir ve her seçim ilgili case ifadesini çalıştırır
– `break` komutu kullanıcı “Çıkış”ı seçtiğinde döngüden çıkar

## Döngü Türlerinin Özeti
– **For Döngüsü**: Liste veya aralık üzerinde yineleme yapar
– **While Döngüsü**: Koşul doğru olduğu sürece devam eder
– **Until Döngüsü**: Koşul doğru oluncaya kadar devam eder
– **Sonsuz Döngü**: Kesintiye uğratılana kadar çalışır
– **Select Döngüsü**: Kullanıcı seçimi için menü gösterir

💡 **İpucu**: Döngüler tekrarlayan görevleri otomatikleştirmek için güçlü araçlardır. Dosyalar, diziler veya aralıklar üzerinde yineleme yapmak gibi çeşitli amaçlar için kullanılabilirler. Örneğin, bir dizindeki tüm dosyaları yeniden adlandırmak için döngü kullanabilirsiniz.

# Kabuk Programlamada Fonksiyonlar

## 1. Fonksiyon Tanımlama
İki farklı sözdizimi kullanılabilir:
“`bash
function fonksiyon_adı {
# kodlar
}
# veya
fonksiyon_adı() {
# kodlar
}
“`

## 2. Temel Fonksiyon
“`bash
selamla() {
echo “Merhaba, kabuk betiğine hoş geldiniz!”
}
selamla # Fonksiyonu çağırma
“`

## 3. Parametreli Fonksiyonlar
“`bash
kullanici_selamla() {
echo “Merhaba, $1!”
}
kullanici_selamla “Ahmet”
“`

## 4. Dönüş Değerleri
“`bash
sayilari_topla() {
sonuc=$(( $1 + $2 ))
echo $sonuc
}
toplam=$(sayilari_topla 3 5)
echo “Toplam: $toplam”
“`

## 5. Koşullu Mantık ve Döngüler
“`bash
cift_kontrol() {
if (( $1 % 2 == 0 )); then
echo “$1 çift sayıdır”
else
echo “$1 tek sayıdır”
fi
}
cift_kontrol 7 # Çıktı: “7 tek sayıdır”
“`

## 7. Varsayılan Değerler
“`bash
selamla() {
local isim=${1:-Misafir}
echo “Merhaba, $isim!”
}
selamla “Ahmet” # Çıktı: “Merhaba, Ahmet!”
selamla # Çıktı: “Merhaba, Misafir!”
“`

## 8. Referans ile Parametre Geçme
“`bash
deger_degistir() {
eval $1=\$2
}
deger_degistir degisken 100
echo “Değişkenin yeni değeri: $degisken”
“`

## 9. Argüman Geçme
### Konumsal Argümanlar ($1, $2, $3, vb.)
“`bash
selamla() {
echo “Merhaba, $1! $2 yaşındasın.”
}
selamla “Ahmet” 25
“`

### Tüm Argümanlar ($@)
“`bash
hepsini_yazdir() {
for arg in “$@”; do
echo “$arg”
done
}
hepsini_yazdir “Elma” “Armut” “Kiraz”
“`

### Tek String Olarak Tüm Argümanlar ($*)
“`bash
string_olarak_yazdir() {
echo “$*”
}
string_olarak_yazdir “Elma” “Armut” “Kiraz”
“`

### Argüman Sayısı ($#)
“`bash
arguman_say() {
echo “Argüman sayısı: $#”
}
arguman_say “Elma” “Armut” “Kiraz”
“`

## Özet
– Fonksiyonlar kodu düzenli ve yeniden kullanılabilir hale getirir
– Argümanlar $1, $2 vb. ile erişilebilir ve varsayılan değerler atanabilir
– Fonksiyonlar içinde döngüler ve koşullar kullanılabilir
– Fonksiyonlar echo ile değer döndürür ve bu değerler değişkenlerde saklanabilir.

# Kabuk Programlamada Özel Komutlar ve Kontrol Yapıları

## shift Operatörü
Konumsal parametreleri (argümanları) sola kaydırmak için kullanılır.

Sözdizimi:
“`bash
shift # Bir pozisyon sola kaydırır
shift n # n pozisyon sola kaydırır
“`

### Örnek 1: Tek Pozisyon Kaydırma
“`bash
kaydirma_ornegi() {
echo “Orijinal argümanlar: $1, $2, $3”
shift
echo “Kaydırma sonrası: $1, $2, $3”
}
kaydirma_ornegi “bir” “iki” “üç”
# Çıktı:
# Orijinal argümanlar: bir, iki, üç
# Kaydırma sonrası: iki, üç
“`

### Örnek 2: Çoklu Kaydırma
“`bash
coklu_kaydirma() {
echo “Orijinal argümanlar: $1, $2, $3, $4”
shift 2
echo “2 kez kaydırma sonrası: $1, $2”
}
coklu_kaydirma “elma” “armut” “kiraz” “erik”
“`

### Örnek 3: Döngü ile Kullanım
“`bash
argumanlari_isle() {
while [ “$#” -gt 0 ]; do
echo “İşlenen argüman: $1”
shift
done
}
argumanlari_isle “arg1” “arg2” “arg3” “arg4”
“`

## Kontrol Komutları

### 1. break Komutu
Döngüyü erken sonlandırır.
“`bash
for i in {1..5}; do
if [ $i -eq 3 ]; then
break
fi
echo $i
done
“`

### 2. continue Komutu
Mevcut döngü iterasyonunu atlar.
“`bash
for i in {1..5}; do
if [ $i -eq 3 ]; then
continue
fi
echo $i
done
“`

### 3. İç İçe Döngülerde break ve continue
“`bash
for i in {1..3}; do
for j in {1..3}; do
if [ $i -eq 2 ] && [ $j -eq 2 ]; then
break 2 # İki seviye döngüden çıkar
fi
echo “i=$i, j=$j”
done
done
“`

### 4. sleep Komutu
Betiği belirli bir süre duraklatır.
“`bash
sleep 5 # 5 saniye bekler
“`

  • *Önemli Noktalar:**
    – `shift` ilk argümanı ($1) kaldırır ve diğerlerini sola kaydırır
    – `break n` ile iç içe döngülerden çıkılabilir
    – `continue n` ile iç içe döngülerde iterasyon atlanabilir
    – `sleep` komutu betik yürütmesini duraklatmak için kullanılır.
  • *Önemli Noktalar:**
    – `shift` ilk argümanı ($1) kaldırır ve diğerlerini sola kaydırır
    – `break n` ile iç içe döngülerden çıkılabilir
    – `continue n` ile iç içe döngülerde iterasyon atlanabilir
    – `sleep` komutu betik yürütmesini duraklatmak için kullanılır.

# Temel Komutlar ve Genişletme Özellikleri

## Kontrol Komutları

### 1. exit Komutu
Betiği durum koduyla sonlandırır (0: başarılı, 0 dışı: hata)
“`bash
exit 1 # Hata durumuyla çıkış
“`

### 2. $? (Son Komut Çıkış Durumu)
Son çalıştırılan komutun çıkış durumunu saklar
“`bash
mkdir myklasor
echo $? # Başarılıysa 0, başarısızsa 1 döndürür
“`

## seq Komutu
Sayı dizileri oluşturmak için kullanılır.

### Temel Kullanım:
“`bash
# 1’den 5’e kadar sayılar
seq 1 5
# Çıktı: 1 2 3 4 5

# Özel adım boyutu (1’den 10’a 2’şer artarak)
seq 1 2 10
# Çıktı: 1 3 5 7 9

# Ondalık sayılar
seq 0 0.2 1
# Çıktı: 0.0 0.2 0.4 0.6 0.8 1.0

# Ters sıralama
seq 5 -1 1
# Çıktı: 5 4 3 2 1
“`

### Döngü ile Kullanım:
“`bash
for i in $(seq 1 5); do
echo “Sayı: $i”
done
“`

### seq Seçenekleri:
“`bash
# Biçimlendirme (-f)
seq -f “Sayı: %.2f” 1 5
# Çıktı: Sayı: 1.00 Sayı: 2.00 …

# Ayırıcı değiştirme (-s)
seq -s “,” 1 5
# Çıktı: 1,2,3,4,5

# Sıfırla doldurma (-w)
seq -w 1 5
# Çıktı: 01 02 03 04 05
“`

## Süslü Parantez Genişletmesi
Tek bir ifadeden birden çok metin dizisi oluşturma özelliği.

### Temel Örnekler:
“`bash
# Kelime listesi
echo {elma,armut,kiraz}
# Çıktı: elma armut kiraz

# Sayı aralığı
echo {1..5}
# Çıktı: 1 2 3 4 5

# Harf aralığı
echo {a..e}
# Çıktı: a b c d e
“`

  • *Özet:**
    – `exit`: Betikten çıkış yapar
    – `$?`: Son komutun durumunu kontrol eder
    – `seq`: Sayı dizileri oluşturur
    – Süslü parantez genişletmesi: Metin dizileri oluşturur.
  • *Özet:**
    – `exit`: Betikten çıkış yapar
    – `$?`: Son komutun durumunu kontrol eder
    – `seq`: Sayı dizileri oluşturur
    – Süslü parantez genişletmesi: Metin dizileri oluşturur.

# Süslü Parantez Genişletmesi ve getops Komutu

## Gelişmiş Süslü Parantez Kullanımı

### Adım Boyutlu Aralık:
“`bash
echo {1..10..2}
# Çıktı: 1 3 5 7 9
“`

### Metin ile Değişken Birleştirme:
“`bash
echo dosya{1..3}.txt
# Çıktı: dosya1.txt dosya2.txt dosya3.txt
“`

### İç İçe Genişletme:
“`bash
echo {A,B}{1,2}
# Çıktı: A1 A2 B1 B2
“`

### Çoklu Eleman Genişletme:
“`bash
echo {A,B,C}{1,2,3}
# Çıktı: A1 A2 A3 B1 B2 B3 C1 C2 C3
“`

### Dosya ve Dizinlerle Kullanım:
“`bash
mkdir klasor{1,2,3}
# klasor1, klasor2 ve klasor3 dizinlerini oluşturur
“`

## getopts Komutu
Komut satırı seçeneklerini (bayrakları) işlemek için kullanılır.

### Temel Sözdizimi:
“`bash
getopts “secenek_dizisi” degisken
“`

### Örnek 1: Basit Seçenek İşleme
“`bash
#!/bin/bash
while getopts “ab” secenek; do
case $secenek in
a) echo “A seçeneği seçildi” ;;
b) echo “B seçeneği seçildi” ;;
\?) echo “Geçersiz seçenek”; exit 1 ;;
esac
done

# Kullanım:
# ./betik.sh -a
# Çıktı: A seçeneği seçildi
“`

### Örnek 2: Argümanlı Seçenekler
“`bash
#!/bin/bash
while getopts “f:n:” secenek; do
case $secenek in
f) echo “F seçeneği seçildi, argüman: $OPTARG” ;;
n) echo “N seçeneği seçildi, argüman: $OPTARG” ;;
\?) echo “Geçersiz seçenek”; exit 1 ;;
esac
done

# Kullanım:
# ./betik.sh -f dosya.txt
# Çıktı: F seçeneği seçildi, argüman: dosya.txt
“`

### Örnek 3: Uzun Seçeneklerle Kullanım
“`bash
#!/bin/bash
while getopts “f:n:” secenek; do
case $secenek in
f) echo “Dosya seçeneği: $OPTARG” ;;
n) echo “İsim seçeneği: $OPTARG” ;;
\?) echo “Geçersiz seçenek”; exit 1 ;;
esac
done

# Kullanım:
# ./betik.sh -f metin.txt -n Ahmet
“`

  • *Önemli Noktalar:**
    – Süslü parantez genişletmesi diğer kabuk işlemlerinden önce gerçekleşir
    – Virgüller arasında boşluk olmamalıdır
    – getopts ile seçenekler sistematik şekilde işlenebilir
    – Argüman gerektiren seçenekler için `:` kullanılır
  • *Önemli Noktalar:**
    – Süslü parantez genişletmesi diğer kabuk işlemlerinden önce gerçekleşir
    – Virgüller arasında boşluk olmamalıdır
    – getopts ile seçenekler sistematik şekilde işlenebilir
    – Argüman gerektiren seçenekler için `:` kullanılır

# Gelişmiş Komut Satırı İşlemleri ve Örnek Proje

## getopts Ayrıntılı Kullanımı

### Örnek 4: Çoklu Argüman ve Seçenek İşleme
“`bash
#!/bin/bash
while getopts “a:b:c:” secenek; do
case $secenek in
a) echo “A seçeneği değeri: $OPTARG” ;;
b) echo “B seçeneği değeri: $OPTARG” ;;
c) echo “C seçeneği değeri: $OPTARG” ;;
\?) echo “Geçersiz seçenek”; exit 1 ;;
esac
done
“`

## Dosya İşleme Komutları

### basename
“`bash
# Dosya adını yoldan ayırır
basename /home/kullanici/dosya.txt # Çıktı: dosya.txt
basename /home/kullanici/dosya.txt .txt # Çıktı: dosya
“`

### dirname
“`bash
# Dizin yolunu döndürür
dirname /home/kullanici/dosya.txt # Çıktı: /home/kullanici
“`

### realpath
“`bash
# Mutlak yolu döndürür
realpath dosya.txt # Çıktı: /home/kullanici/belgeler/dosya.txt
“`

## Dosya ve Dizin Kontrolleri
“`bash
if [ -d /home/kullanici/Belgeler ]; then
echo “Dizin mevcut”
fi

if [ ! -f /home/kullanici/olmayan.txt ]; then
echo “Dosya mevcut değil”
fi
“`

## nohup Kullanımı
“`bash
# Arka planda çalıştırma
nohup ./betik.sh &

# Çıktıyı yönlendirme
nohup ./betik.sh > /dev/null 2>&1 &

# Çalışan işlemleri kontrol etme
ps aux | grep betik.sh
“`

## Örnek Proje: Hesap Makinesi
“`bash
#!/bin/bash

# Toplama fonksiyonu
topla() {
echo “Sonuç: $(($1 + $2))”
}

# Çıkarma fonksiyonu
cikar() {
echo “Sonuç: $(($1 — $2))”
}

# Çarpma fonksiyonu
carp() {
echo “Sonuç: $(($1 * $2))”
}

# Bölme fonksiyonu
bol() {
if [ $2 -eq 0 ]; then
echo “Hata: Sıfıra bölme hatası!”
else
echo “Sonuç: $(($1 / $2))”
fi
}

# Menü
echo “Basit Hesap Makinesi”
echo “İşlem seçin:”
echo “1. Toplama”
echo “2. Çıkarma”
echo “3. Çarpma”
echo “4. Bölme”

read -p “Seçiminiz (1/2/3/4): “ secim
read -p “İlk sayı: “ sayi1
read -p “İkinci sayı: “ sayi2

case $secim in
1) topla $sayi1 $sayi2 ;;
2) cikar $sayi1 $sayi2 ;;
3) carp $sayi1 $sayi2 ;;
4) bol $sayi1 $sayi2 ;;
*) echo “Geçersiz seçim” ;;
esac
“`

# Hesap Makinesi Betiği — Kurulum ve Kullanım

## Kurulum Adımları

### 1. Betiği Çalıştırılabilir Yapma
“`bash
chmod +x calculator.sh
“`

### 2. Betiği Çalıştırma
“`bash
./calculator.sh
“`

## Betiğin Çalışma Mantığı
– Kullanıcıdan bir işlem seçmesini ister (toplama, çıkarma, çarpma, bölme)
– İki sayı girmesini bekler
– Seçilen işlemi gerçekleştirir
– Bölme işleminde sıfıra bölme kontrolü yapar

## Örnek Çalıştırma
“`
$ ./calculator.sh
Basit Hesap Makinesi
İşlem seçin:
1. Toplama
2. Çıkarma
3. Çarpma
4. Bölme
Seçiminiz (1/2/3/4): 1
İlk sayı: 10
İkinci sayı: 5
Sonuç: 15
“`

## Geliştirme Önerileri
Bu basit projeyi şu özelliklerle geliştirebilirsiniz:
– Karekök alma ve üs alma gibi ileri matematik işlemleri
– Sürekli çalışan bir döngü ile tekrarlı hesaplama
– Ondalıklı sayı desteği
– Hata kontrollerinin artırılması
– Geçmiş işlemleri kaydetme
– Bilimsel hesap makinesi özellikleri

Bu proje, kabuk programlamada temel kavramları öğrenmek için iyi bir örnektir:
– Koşullu ifadeler
– Kullanıcı girdisi alma
– Matematiksel işlemler
– Fonksiyon kullanımı
– Hata kontrolü

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*