Bash öğrenmenin en verimli yolu, kabuğun kendi kurallarını sırayla oturtmaktır: önce bir betiği yazıp çalıştırmayı, değişkenleri ve tırnakları öğrenirsiniz; ardından koşullar ve döngüler, fonksiyonlar ve genişletmeler, diziler, yönlendirmeler ve sağlam betik yazma teknikleri gelir. Bu sayfa, GNU Bash Reference Manual'ın bölüm sırasını temel alan bir öğrenme yolu sunar ve serideki 49 yazının tamamını konu gruplarına ayırarak listeler.
Linux'un ne olduğunu ve temel sistem komutlarını (dosya listeleme, arama, süreç ve disk araçları) ayrı yazılarda anlattık: Linux nedir ve Linux sunucu komutları. Bu seri ise kabuğun kendisine odaklanır: dilin sözdizimi, genişletmeler, yerleşik komutlar, kabuk değişkenleri ve etkileşimli kullanım. Örneklerin hepsi gerçekten çalıştırıldı; çıktı yorumları gerçek çıktıyla aynıdır.
Bash nedir?
Bash, GNU işletim sisteminin kabuğu, yani komut dili yorumlayıcısıdır. Adı "Bourne-Again SHell" ifadesinin kısaltmasıdır ve Unix'in yedinci sürümünde ortaya çıkan klasik sh kabuğunu yazan Stephen Bourne'a gönderme yapan bir kelime oyunudur. Kılavuz Bash'i büyük ölçüde sh ile uyumlu, Korn kabuğundan (ksh) ve C kabuğundan (csh) faydalı özellikler almış bir kabuk olarak tanımlar. Hedefi, IEEE POSIX standardının kabuk ve araçlar bölümüne uyumlu bir uygulama olmaktır.
Kılavuza göre bir Unix kabuğu aynı anda iki şeydir: bir komut yorumlayıcısı ve bir programlama dili. Komut yorumlayıcısı olarak sistemdeki araçlara kullanıcı arayüzü sağlar; programlama dili olarak bu araçları birleştirmenize izin verir. Komutları bir dosyaya yazdığınızda o dosya da bir komuta dönüşür. Kabuk etkileşimli olarak (klavyeden yazdıklarınızı okuyarak) ya da etkileşimsiz olarak (bir dosyadan veya bir metin dizgesinden komut okuyarak) çalışabilir.
Kabuğun gücünün büyük kısmı gömülü programlama dilinden gelir: değişkenler, akış denetimi yapıları, tırnaklama ve fonksiyonlar. Bunun yanında cd, break, continue ve exec gibi yerleşik komutlar (builtin) kabuğun içinde yer alır, çünkü kabuğun kendi durumunu değiştirirler ve ayrı bir program olarak yazılamazlar. İş denetimi, komut satırı düzenleme, komut geçmişi ve takma adlar ise etkileşimli kullanım için eklenmiş özelliklerdir.
Bash ile sh arasındaki fark
sh tek bir program adı değil, POSIX standardının tanımladığı kabuk dilini temsil eden bir isimdir. Bash bu dili uygular ama varsayılan davranışı bazı noktalarda standarttan ayrılır. Bash'i --posix seçeneğiyle başlattığınızda, çalışırken set -o posix komutunu verdiğinizde ya da Bash'i sh adıyla çağırdığınızda POSIX moduna geçer; bu modda farklı olan davranışlar standarda göre değişir. Kılavuz, sh adıyla çağrılan Bash'in başlangıç dosyalarını okuduktan sonra POSIX moduna girdiğini belirtir.
Pratikte fark şuraya çıkar: [[ ]], diziler, ${degisken//a/b} gibi gelişmiş genişletmeler ve $'...' tırnaklama gibi özellikler Bash'e özgüdür. Betiğinizin başına #!/bin/sh yazarsanız, sistemde sh olarak hangi kabuk kuruluysa betik onunla çalışır ve bu özellikler orada bulunmayabilir. Bash özelliklerini kullanan bir betiğin ilk satırında Bash'i açıkça istemek bu yüzden önemlidir. POSIX modunun ayrıntılı listesi ve taşınabilir betik ipuçları için Bash ve sh farkı yazısına bakın.
#!/usr/bin/env bash
# ilk.sh: Bash'e özgü iki özellik
meyveler=(elma armut) # dizi
if [[ ${#meyveler[@]} -eq 2 ]]; then
echo "İki meyve var: ${meyveler[*]}"
fi
# çıktı: İki meyve var: elma armutBu küçük betikteki dizi tanımı ve [[ ]] testi POSIX sh dilinde yoktur. Aynı dosyayı Bash ile çalıştırdığınızda sorun yaşamazsınız; başka bir sh uygulamasıyla çalıştırdığınızda ise sözdizimi hatası alabilirsiniz.
Bu seriyi nasıl kullanmalısınız?
Yazılar, kılavuzun bölüm düzenine yakın bir öğrenme yolu izler. Kabuğa yeniyseniz ilk iki grubu sırayla okuyun; bu iki grup, günlük işlerin büyük kısmını otomatikleştirmeye yeter. Daha sonra ihtiyacınıza göre ilerleyebilirsiniz: veri işleyen betikler yazıyorsanız diziler ve girdi/çıktı gruplarına, sunucuda bakım betikleri çalıştırıyorsanız sağlam betik yazma grubuna, terminalde çok zaman geçiriyorsanız etkileşimli kabuk grubuna geçin.
Kılavuz Bash 5.3 sürümünü anlatıyor; örnekleri GNU Bash 5.2.37 ile çalıştırdık. Kılavuzda anlatılıp 5.2.37'de çalışmayan birkaç özellik (örneğin ${ komut; } biçimindeki komut ikamesi) ilgili yazılarda açıkça işaretleniyor. Kendi sisteminizdeki sürümü öğrenmek ve uyumluluk modunu anlamak için Bash sürümü ve uyumluluk modu yazısına bakabilirsiniz.
1. İlk adımlar

- Bash script yazma ve çalıştırma: shebang satırını,
bash dosya.shile./dosya.sharasındaki farkı ve betiğin hangi kabukta çalıştığını öğrenirsiniz. - Bash değişkenler ve atama: atama kuralını (eşittir çevresinde boşluk yok),
$varile${var}farkını,export,unsetvereadonlykomutlarını görürsünüz. - Tek tırnak ile çift tırnak farkı: ters eğik çizgi, tek tırnak, çift tırnak ve
$'...'biçiminin hangi karakterleri koruduğunu ve kelime bölmeyi nasıl engellediğini öğrenirsiniz. - echo ve printf kullanımı:
echoseçeneklerini,printfbiçim belirteçlerini,%q,%bveprintf -vkullanımını karşılaştırırsınız. - read ile kullanıcı girdisi:
readkomutunun-r,-p,-s,-t,-aseçeneklerini ve satırıIFSile alanlara bölmeyi öğrenirsiniz. - Script argümanları ve özel değişkenler:
$1,$@,$*,$#,$?,$$gibi özel parametreleri veshiftileset --kullanımını görürsünüz.
2. Koşullar ve döngüler
![2. Koşullar ve döngüler: if, elif, else koşulları, test ile [[ ]] farkı, case esac kullanımı, for döngüsü](/assets/blog/bash-ogrenme-rehberi-b5.webp)
- if, elif, else koşulları: Bash'te koşulun bir komutun çıkış durumu olduğunu ve
!ile sonucu nasıl tersine çevireceğinizi öğrenirsiniz. - test ile [[ ]] farkı:
test,[ ]ve[[ ]]arasındaki farkları ve-f,-z,-eqgibi koşul ifadelerini karşılaştırırsınız. - case esac kullanımı: desenlerle dallanmayı,
|ile birden çok deseni ve;;,;&,;;&sonlandırıcılarının farkını görürsünüz. - for döngüsü: liste üzerinde dönen
for, C tarzıfor (( ))ve"$@"üzerinde güvenli döngü kurmayı öğrenirsiniz. - while ve until döngüsü: dosyayı satır satır okumayı,
breakvecontinueile döngüyü yönetmeyi ve sonsuz döngü kurmayı görürsünüz. - Ve/veya operatörleri ve komut listeleri:
;,&,&&ve||listelerinin önceliğini vea && b || ctuzağını öğrenirsiniz. - Bash aritmetik işlemler:
$(( )),(( ))veletile tamsayı aritmetiğini, taban gösterimlerini ve sıfıra bölme hatasını görürsünüz.
3. Fonksiyonlar ve genişletmeler
- Bash fonksiyon tanımlama: fonksiyon tanımlama biçimlerini, argüman almayı ve değeri
returnya daechoile döndürmenin farkını öğrenirsiniz. - local değişken ve kapsam:
localile dinamik kapsamı,declare -nile sonucu bir değişkene yazmayı veFUNCNAMEdizisini görürsünüz. - Parametre genişletme ile varsayılan değer:
${v:-x},${v:=x},${v:?mesaj}ve${v:+x}biçimlerini ve iki noktanın yarattığı farkı öğrenirsiniz. - String işlemleri: kesme ve değiştirme: uzunluk, alt dizgi, önek ve sonek silme, değiştirme ve büyük/küçük harf dönüşümlerini örneklerle görürsünüz.
- Komut ikamesi:
$( )ile ters tırnak farkını, sondaki yeni satırların silinmesini ve iç içe kullanımı öğrenirsiniz. - Brace expansion ve tilde:
{a,b}ve{1..10..2}biçimlerini,~genişletmesini ve genişletmelerin hangi sırayla yapıldığını görürsünüz.
4. Diziler ve desenler
- Bash dizi (array) kullanımı: indeksli dizi tanımlamayı,
+=ile eleman eklemeyi,${a[@]}ve${#a[@]}biçimlerini ve dilimlemeyi öğrenirsiniz. - İlişkisel dizi (declare -A): anahtar/değer dizileri kurmayı, üzerinde dönmeyi ve bir anahtarın var olup olmadığını denetlemeyi görürsünüz.
- declare ve readonly:
declareile verilen-i,-r,-l,-u,-x,-ngibi nitelikleri vedeclare -pile incelemeyi öğrenirsiniz. - mapfile ve readarray: bir dosyanın satırlarını tek komutla diziye okumayı ve
-t,-n,-s,-dseçeneklerini görürsünüz. - Joker karakterler (glob):
*,?,[...]desenlerini, karakter sınıflarını venullglob,dotglob,globstarseçeneklerini öğrenirsiniz. - extglob genişletilmiş desenler:
?(),*(),+(),@()ve!()desenlerini dosya adlarında,caseiçinde ve[[ ]]içinde kullanmayı görürsünüz.
5. Girdi, çıktı ve süreçler
- Yönlendirme: stdout ve stderr:
>,>>,2>,&>ve2>&1yönlendirmelerini ve yazım sırasının neden önemli olduğunu öğrenirsiniz. - Here document ve here string:
<<EOFile çok satırlı girdi vermeyi, tırnaklı sonlandırıcının genişletmeyi kapatmasını ve<<<biçimini görürsünüz. - Pipe, PIPESTATUS ve pipefail: boru hattının çıkış durumunu,
PIPESTATUSdizisini veset -o pipefailile hata yakalamayı öğrenirsiniz. - Process substitution:
<( )ve>( )ile bir komutun çıktısını dosya gibi kullanmayı ve döngüde değişken kaybını önlemeyi görürsünüz. - Dosya tanımlayıcıları ve exec:
execile tanımlayıcı açıp kapatmayı,{fd}>ile otomatik numara almayı ve betiğin tüm çıktısını bir dosyaya yönlendirmeyi öğrenirsiniz. - Regex eşleşme ve BASH_REMATCH:
[[ =~ ]]ile genişletilmiş düzenli ifade eşleştirmeyi ve yakalanan gruplarıBASH_REMATCHdizisinden okumayı görürsünüz.
6. Sağlam betik yazma

- set -euo pipefail ile güvenli betik:
set -e,set -uvepipefailseçeneklerinin ne yaptığını ve-eseçeneğinin devreye girmediği durumları öğrenirsiniz. - trap ile sinyal ve temizlik:
EXIT,ERR,INTveTERMtuzaklarıyla geçici dosyaları temizlemeyi ve sinyallere tepki vermeyi görürsünüz. - Exit kodları ve çıkış durumu: 0 ile 255 arasındaki çıkış durumlarının anlamını, 126, 127 ve 128+n değerlerini ve
exitilereturnfarkını öğrenirsiniz. - getopts ile seçenek ayrıştırma:
getoptsdöngüsü kurmayı,OPTARGveOPTINDdeğişkenlerini ve sessiz hata modunu görürsünüz. - Hata ayıklama ve set -x:
set -x,PS4,LINENO,BASH_SOURCEvecallerile bir betiğin adım adım ne yaptığını izlemeyi öğrenirsiniz. - Subshell ve çalışma ortamı:
( )ile{ }farkını, alt kabukta yapılan değişikliklerin neden kaybolduğunu ve ortam değişkenlerini görürsünüz.
7. Etkileşimli kabuk
- .bashrc ve .bash_profile farkı: login ve login olmayan, etkileşimli ve etkileşimsiz kabukların hangi başlangıç dosyalarını okuduğunu öğrenirsiniz.
- Bash alias tanımlama: takma ad tanımlamayı, kalıcı hale getirmeyi ve ne zaman takma ad yerine fonksiyon kullanmanız gerektiğini görürsünüz.
- PS1 prompt özelleştirme: komut istemindeki
\u,\h,\wgibi kaçışları,PROMPT_COMMANDdeğişkenini ve renk kodlarını öğrenirsiniz. - Komut geçmişi (history): geçmiş boyutunu ve kaydını ayarlayan değişkenleri,
!!ve!$gibi geçmiş genişletmelerini vefckomutunu görürsünüz. - Klavye kısayolları ve Readline: satır düzenleme kısayollarını,
inputrcdosyasını,bindkomutunu ve vi/emacs düzenleme kiplerini öğrenirsiniz. - Arka plan işleri: jobs, fg, bg: komutları arka plana almayı,
jobs,fg,bg,waitvedisownile iş denetimini görürsünüz.
8. İleri konular ve hatalar
- shopt seçenekleri:
shoptile kabuk seçeneklerini açıp kapatmayı vesetileshoptarasındaki farkı öğrenirsiniz. - source ve nokta komutu: bir kütüphane dosyasını mevcut kabukta çalıştırmayı ve betiğin doğrudan mı çalıştırıldığını yoksa içe mi aktarıldığını anlamayı görürsünüz.
- eval ve dolaylı değişken:
evalkomutunun risklerini,${!isim}ile dolaylı genişletmeyi ve daha güvenlideclare -nseçeneğini öğrenirsiniz. - Bash ve sh farkı, POSIX modu: POSIX modunda değişen davranışları, Bourne kabuğundan farkları ve taşınabilirliği bozan Bash'e özgü yazımları görürsünüz.
- Bash sürümü ve uyumluluk modu:
BASH_VERSIONveBASH_VERSINFOile sürümü okumayı veBASH_COMPATile eski sürüm davranışını seçmeyi öğrenirsiniz. - Sık hata mesajları ve çözümleri: "command not found", "bad substitution", "unary operator expected", "unbound variable" ve satır sonu kaynaklı "bad interpreter" gibi hataların nedenlerini ve çözümlerini görürsünüz.
Örnekleri nasıl çalıştırmalısınız?
Serideki örneklerin çoğu bir dosyaya yazılıp bash ornek.sh komutuyla çalıştırılacak biçimde hazırlandı. Kodun içindeki # çıktı: yorumları ekrana basılan satırları, # $? = 1 biçimindeki yorumlar ise bir önceki komutun çıkış durumunu gösterir. Hata mesajları Bash'in standart biçimindedir: önce betiğin adı, sonra satır numarası, ardından mesaj gelir. Bir örneği denerken boş bir klasörde çalışmanız, dosya oluşturan veya silen örneklerin başka dosyalarınıza dokunmasını önler.
Türkçe karakter içeren metinlerle çalışırken kabuğun bir UTF-8 yerel ayarıyla (locale) çalıştığından emin olun. Yerel ayar UTF-8 değilse ${#metin} gibi işlemler harf yerine bayt sayabilir ve büyük/küçük harf dönüşümleri beklediğiniz gibi çalışmayabilir. Sunucunuzda kabuğa nasıl bağlanacağınızı SSH ile sunucuya bağlanma yazısında, uzun süren işler için kalıcı terminal oturumlarını tmux ve screen yazısında bulabilirsiniz.
Sık Sorulan Sorular
Bash öğrenmek için hangi yazıdan başlamalıyım?
İlk betiğinizi yazmak için Bash script yazma ve çalıştırma yazısıyla başlayın, ardından değişkenler ve tırnaklama yazılarına geçin. Tırnaklama kurallarını erken öğrenmek, ileride karşılaşacağınız hataların büyük bölümünü önler.
Bash ile sh aynı şey mi?
Hayır. sh, POSIX kabuk dilinin adıdır ve sisteminizde farklı bir kabuk tarafından sağlanıyor olabilir. Bash bu dili uygular ve üzerine diziler, [[ ]], gelişmiş genişletmeler gibi özellikler ekler. Bash, sh adıyla çağrıldığında POSIX moduna girer.
Bu yazılardaki örnekler hangi Bash sürümüyle denendi?
Kaynak olarak Bash 5.3 kılavuzunu kullandık; örnekleri GNU Bash 5.2.37 ile çalıştırdık. 5.2.37'de çalışmayan özellikler ilgili yazılarda ayrıca belirtiliyor.
Linux komutları da bu seride anlatılıyor mu?
Hayır. grep, sed, awk, find gibi araçlar kabuğun parçası değil, ayrı programlardır. Sık kullanılan sistem komutları için Linux sunucu komutları ve Linux sunucu yönetimi temelleri yazılarına bakın.
Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: Linux nedir · Linux sunucu komutları · Cron job rehberi · Regex başlangıç rehberi