## 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...
# 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}”
# Çı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=( =Paul =20 )
```
#### Değerlere Erişim:
```bash
echo “${myArray}”
```
#### Dizi Uzunluğunu Alma:
```bash
echo “${#myArray}”
```
#### Dizi Güncelleme:
```bash
myArray+=( =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 ; then
echo “a, b’den büyüktür”
fi
```
### if-else İfadesi:
```bash
if ; 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 ; then
echo “a, b’den büyüktür”
elif ; 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
```
- **Büyük Eşittir**: `-ge`
```bash
```
- **Küçük Eşittir**: `-le`
```bash
```
- **Eşit Değildir**: `-ne` veya `!=`
```bash
```
- **Büyüktür**: `-gt`
```bash
```
- **Küçüktür**: `-lt`
```bash
```
- *Ö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 && ; 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 || ; 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 && || ; 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
&& 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 ; do
# Çalıştırılacak komutlar
done
```
Örnek:
```bash
count=1
while ; 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 ; do
# Çalıştırılacak komutlar
done
```
Örnek:
```bash
count=1
until ; 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() {
s $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 ; 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 ; then
break
fi
echo $i
done
```
### 2. continue Komutu
Mevcut döngü iterasyonunu atlar.
```bash
for i in {1..5}; do
if ; 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 && ; 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 ; then
echo “Dizin mevcut”
fi
if ; 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 ; 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ü