{"id":253,"title":"Kabuk Programlamaya Giri\u015f","content":"<p># Kabuk Programlama (Shell Scripting) Nedir?<br>Kabuk programlama, Linux ortam\u0131nda komutlar yazarak ve \u00e7al\u0131\u015ft\u0131rarak g\u00f6revleri otomatikle\u015ftirmenizi ve d\u00fczenlemenizi sa\u011flayan g\u00fc\u00e7l\u00fc bir programlama y\u00f6ntemidir. \u00d6zellikle \u015fu alanlarda de\u011ferlidir:<br>- Sistem y\u00f6netimi<br>- G\u00f6rev otomatizasyonu<br>- Verimlili\u011fi art\u0131rma<\/p><p>Ba\u015fl\u0131klar:<\/p><p># Shell Script (Kabuk Programlama) \u0130ndeksi<\/p><p>1. **Temel Kavramlar**<br>\u2014 Shell (Kabuk) Nedir?<br>\u2014 Shell T\u00fcrleri (bash, sh, ksh, zsh)<\/p><p>2. **De\u011fi\u015fkenler ve Veri Tipleri**<br>\u2014 De\u011fi\u015fken Tan\u0131mlama<br>\u2014 Sabitler<br>\u2014 Diziler<br>\u2014 \u0130li\u015fkisel Diziler<\/p><p>3. **Temel Operat\u00f6rler**<br>\u2014 Metin \u0130\u015flemleri<br>\u2014 Aritmetik \u0130\u015flemler<br>\u2014 Mant\u0131ksal Operat\u00f6rler<\/p><p>4. **Kontrol Yap\u0131lar\u0131**<br>\u2014 if-else \u0130fadeleri<br>\u2014 case \u0130fadeleri<br>\u2014 D\u00f6ng\u00fcler (for, while, until)<br>\u2014 break ve continue<br>\u2014 exit ve sleep<\/p><p>5. **Fonksiyonlar**<br>\u2014 Fonksiyon Tan\u0131mlama<br>\u2014 Parametre Ge\u00e7irme<br>\u2014 D\u00f6n\u00fc\u015f De\u011ferleri<br>\u2014 \u00d6zyineleme<\/p><p>6. **Komut Sat\u0131r\u0131 \u0130\u015flemleri**<br>\u2014 getopts Kullan\u0131m\u0131<br>\u2014 Se\u00e7enek ve Arg\u00fcman \u0130\u015fleme<br>\u2014 basename ve dirname<br>\u2014 Dosya ve Dizin Kontrolleri<\/p><p>7. **Geli\u015fmi\u015f \u00d6zellikler**<br>\u2014 S\u00fcsl\u00fc Parantez Geni\u015fletmesi<br>\u2014 seq Komutu<br>\u2014 nohup Kullan\u0131m\u0131<br>\u2014 Rastgele Say\u0131lar<\/p><p>8. **\u00d6rnek Proje**<br>\u2014 Hesap Makinesi Uygulamas\u0131<br>\u2014 Kurulum ve \u00c7al\u0131\u015ft\u0131rma<br>\u2014 Kod A\u00e7\u0131klamalar\u0131<br>\u2014 Geli\u015ftirme \u00d6nerileri<\/p><p>## Kabuk (Shell) T\u00fcrleri<br>\u0130\u015fte en yayg\u0131n kullan\u0131lan kabuklar:<\/p><p>1. **Bash (Bourne Again Shell)**<br>\u2014 En yayg\u0131n kullan\u0131lan kabuk<br>\u2014 Bir\u00e7ok Linux da\u011f\u0131t\u0131m\u0131nda varsay\u0131lan kabuk<\/p><p>2. **sh (Bourne Shell)**<br>\u2014 Orijinal Unix kabu\u011fu<br>\u2014 Bash\u2019in \u00f6nc\u00fcs\u00fc<\/p><p>3. **ksh (Korn Shell)**<br>\u2014 csh ve sh\u2019nin \u00f6zelliklerini birle\u015ftirir<br>\u2014 Unix ortamlar\u0131nda pop\u00fcler<\/p><p>4. **zsh (Z Shell)**<br>\u2014 Geli\u015fmi\u015f \u00f6zelliklere sahip modern kabuk<br>\u2014 Yeni macOS s\u00fcr\u00fcmlerinde varsay\u0131lan kabuk<\/p><p># Kabuk T\u00fcr\u00fcn\u00fcz\u00fc Kontrol Etme<br>Mevcut kabu\u011funuzu belirlemek i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<br>```bash<br>echo $0<br>```<\/p><p># Dosya Olu\u015fturma ve Kullanma<br>Unix ve Linux ortamlar\u0131nda vi komutunu kullanarak dosya olu\u015fturma ve d\u00fczenleme temel bir beceridir. \u0130\u015fte vi ile dosya olu\u015fturma, i\u00e7erik girme ve kaydetme ad\u0131mlar\u0131:<\/p><p>## 1. Yeni Dosya Olu\u015fturmak i\u00e7in vi\u2019yi A\u00e7ma<br>- Terminalinizi a\u00e7\u0131n<br>- \u015eu komutu yaz\u0131n: `vi my_script.sh`<br>- Not: my_script.sh mevcut de\u011filse, vi bu isimde yeni bir dosya olu\u015fturacakt\u0131r<\/p><p>## 2. Temel vi D\u00fczenleme Komutlar\u0131<br>vi\u2019yi a\u00e7t\u0131\u011f\u0131n\u0131zda, komut modundas\u0131n\u0131z. Yazma moduna ge\u00e7mek i\u00e7in:<br>- `i` tu\u015funa bas\u0131n. Art\u0131k dosyaya i\u00e7erik yazabilirsiniz<\/p><p>## 3. vi\u2019de \u0130\u00e7erik Yazma<br>\u201cMerhaba, D\u00fcnya!\u201d yazan ve mevcut tarih\/saati g\u00f6steren basit bir betik olu\u015ftural\u0131m:<br>```bash<br>#!\/bin\/bash<br># Bu betik bir kar\u015f\u0131lama mesaj\u0131 ve mevcut tarih\/saati yazd\u0131r\u0131r<br>echo \u201cMerhaba, D\u00fcnya!\u201d<br>echo \u201cMevcut tarih ve saat:\u201d<br>date<br>```<\/p><p>## 4. Yazma Modundan \u00c7\u0131kma<br>- Komut moduna d\u00f6nmek i\u00e7in `Esc` tu\u015funa bas\u0131n<\/p><p>## 5. vi\u2019de Kaydetme ve \u00c7\u0131kma<br>- Kaydet ve \u00e7\u0131k: `:wq` yaz\u0131p Enter\u2019a bas\u0131n<br>- Sadece kaydet: `:w` yaz\u0131p Enter\u2019a bas\u0131n<br>- Kaydetmeden \u00e7\u0131k: `:q!` yaz\u0131p Enter\u2019a bas\u0131n<\/p><p>## 6. Beti\u011fi \u00c7al\u0131\u015ft\u0131r\u0131labilir Yapma<br>```bash<br>chmod +x my_script.sh<br>```<\/p><p>## 7. Beti\u011fi \u00c7al\u0131\u015ft\u0131rma<br>```bash<br>.\/my_script.sh<br>```<\/p><p>## 8. \u00c7al\u0131\u015ft\u0131r\u0131labilir Yapmadan Beti\u011fi \u00c7al\u0131\u015ft\u0131rma<br>```bash<br>bash my_script.sh<br>```<\/p><p>\u00c7\u0131kt\u0131 \u015funa benzer olacakt\u0131r:<br>```<br>Merhaba, D\u00fcnya!<br>Mevcut tarih ve saat:<br>Sal Kas 6 12:34:56 UTC 2023<br>```<\/p><p># \u0130\u015flem Kontrol K\u0131sayollar\u0131<br>- `Ctrl + C`: \u00c7al\u0131\u015fan i\u015flemi an\u0131nda sonland\u0131r\u0131r<br>- `Ctrl + Z`: \u0130\u015flemi duraklat\u0131r ve arka plana g\u00f6nderir (fg veya bg ile devam ettirilebilir)<\/p><p># Kabuk Programlamada Yorumlar<br>Tek Sat\u0131rl\u0131k Yorumlar:<br>```bash<br># Bu bir tek sat\u0131rl\u0131k yorumdur<br>echo \u201cMerhaba, D\u00fcnya!\u201d<br>```<\/p><p># \u00c7ok Sat\u0131rl\u0131 Yorumlar<\/p><p>Bash\u2019te \u00e7ok sat\u0131rl\u0131 yorumlar i\u00e7in do\u011frudan bir s\u00f6zdizimi yoktur, ancak bunu iki farkl\u0131 y\u00f6ntemle yapabilirsiniz:<\/p><p>## 1. Here-Document Kullanarak:<br>```bash<br>: &lt;&lt;\u2019COMMENT\u2019<br>Bu bir \u00e7ok sat\u0131rl\u0131 yorumdur.<br>Buraya birden fazla sat\u0131r ekleyebilirsiniz.<br>\u0130stedi\u011finiz kadar sat\u0131r yazabilirsiniz.<br>COMMENT<br>```<\/p><p>## 2. &lt;&lt; S\u00f6zdizimini Do\u011frudan Kullanarak:<br>```bash<br>&lt;&lt;COMMENT<br>Bu da \u00e7ok sat\u0131rl\u0131 yorum i\u00e7in<br>alternatif bir y\u00f6ntemdir.<br>\u0130stedi\u011finiz kadar sat\u0131r ekleyebilirsiniz.<br>COMMENT<br>```<\/p><p>Not: Her iki y\u00f6ntemde de \u2018COMMENT\u2019 yerine istedi\u011finiz herhangi bir kelime kullanabilirsiniz, ancak ba\u015flang\u0131\u00e7 ve biti\u015f kelimeleri ayn\u0131 olmal\u0131d\u0131r.<\/p><p># De\u011fi\u015fkenler ve Dizilerle \u00c7al\u0131\u015fma<\/p><p>De\u011fi\u015fkenler ve diziler, betiklerde veri depolama ve i\u015fleme olana\u011f\u0131 sa\u011flar, bu da otomasyonu daha esnek hale getirir.<\/p><p>## De\u011fi\u015fkenler<br>De\u011fi\u015fken tan\u0131mlama ve de\u011ferine eri\u015fmek i\u00e7in $ kullanma:<br>```bash<br>NAME=\u201dLinux\u201d<br>echo \u201cWelcome to $NAME Scripting\u201d<br>```<\/p><p>## Sabitler<br>readonly ile salt okunur de\u011fi\u015fkenler olu\u015fturma:<br>```bash<br>readonly VERSION=\u201d1.0\"<br>```<\/p><p>## Diziler<br>Birden fazla de\u011fer depolama:<br>```bash<br>myArray=(1 2 3 \u201cHello\u201d \u201cWorld\u201d)<br>echo \u201c${myArray}\u201d<br># \u00c7\u0131kt\u0131: 2<br>```<\/p><p>### Dizi \u0130\u015flemleri:<\/p><p>#### Dizi Uzunlu\u011funu Alma:<br>```bash<br>echo \u201c${#myArray}\u201d # veya<br>echo \u201c${#myArray}\u201d<br># Dizideki toplam eleman say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr<br>```<\/p><p>#### Diziden Belirli De\u011ferleri Alma:<br>Belirli bir indeksten ba\u015flayarak de\u011ferleri alma:<br>```bash<br>echo \u201c${myArray:1}\u201d<br># \u0130kinci elemandan (indeks 1) ba\u015flayarak t\u00fcm elemanlar\u0131 getirir<br>```<\/p><p>#### Belirli Aral\u0131ktaki De\u011ferleri Alma:<br>```bash<br>echo \u201c${myArray:1:2}\u201d<br># \u0130ndeks 1'den ba\u015flayarak 2 eleman getirir<br>```<\/p><p>#### Dizi G\u00fcncelleme (Yeni eleman ekleme):<br>```bash<br>myArray+=(5 6 8)<br>```<\/p><p>### \u0130li\u015fkisel Dizilerle \u00c7al\u0131\u015fma:<\/p><p>#### Tan\u0131mlama ve Ba\u015flatma:<br>```bash<br>declare -A myArray<br>myArray=( =Paul =20 )<br>```<\/p><p>#### De\u011ferlere Eri\u015fim:<br>```bash<br>echo \u201c${myArray}\u201d<br>```<\/p><p>#### Dizi Uzunlu\u011funu Alma:<br>```bash<br>echo \u201c${#myArray}\u201d<br>```<\/p><p>#### Dizi G\u00fcncelleme:<br>```bash<br>myArray+=( =NewYork )<br>```<\/p><p>\ud83d\udca1 **\u0130pucu**: Diziler, dosya adlar\u0131 veya yap\u0131land\u0131rmalar gibi de\u011fer listelerini y\u00f6netmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p><p># Metin ve Aritmetik \u0130\u015flemler<\/p><p>## Metin \u0130\u015fleme \u00d6rnekleri:<\/p><p>### Temel Metin \u0130\u015flemleri:<br>```bash<br>str=\u201dShell Scripting\u201d<\/p><p># Uzunluk<br>echo ${#str} # \u00c7\u0131kt\u0131: 15<\/p><p># De\u011fi\u015ftirme<br>echo ${str\/Scripting\/Programming} # \u00c7\u0131kt\u0131: Shell Programming<\/p><p># Alt Metin \u00c7\u0131karma<br>echo ${str:6:9} # \u00c7\u0131kt\u0131: Scripting<br>```<\/p><p>### Geli\u015fmi\u015f Metin \u0130\u015flemleri:<br>```bash<br>myVar=\u201dHello World!\u201d<\/p><p># Metin uzunlu\u011funu alma<br>length=${#myVar}<br>echo $length # \u00c7\u0131kt\u0131: 12<\/p><p># B\u00fcy\u00fck harfe \u00e7evirme<br>upper=${myVar^^}<br>echo $upper # \u00c7\u0131kt\u0131: HELLO WORLD!<\/p><p># K\u00fc\u00e7\u00fck harfe \u00e7evirme<br>lower=${myVar,,}<br>echo $lower # \u00c7\u0131kt\u0131: hello world!<\/p><p># Alt metin de\u011fi\u015ftirme<br>replace=${myVar\/World\/Buddy}<br>echo $replace # \u00c7\u0131kt\u0131: Hello Buddy!<\/p><p># Alt metin \u00e7\u0131karma (dilim)<br>slice=${myVar:6:5}<br>echo $slice # \u00c7\u0131kt\u0131: World<br>```<\/p><p># KULLANICI ETK\u0130LE\u015e\u0130MLER\u0130<\/p><p>## Kullan\u0131c\u0131dan Veri Alma<\/p><p>### Temel Veri Alma:<br>```bash<br>read var_name<br>echo \u201cGirdi\u011finiz: $var_name\u201d<br># \u00d6rnek \u00c7\u0131kt\u0131: (Kullan\u0131c\u0131 \u201cJohn\u201d yazar)<br># Girdi\u011finiz: John<br>```<\/p><p>### \u0130stemle Veri Alma:<br>```bash<br>read -p \u201cAd\u0131n\u0131z: \u201c NAME<br>echo \u201cMerhaba, $NAME!\u201d<br># \u00d6rnek \u00c7\u0131kt\u0131:&nbsp;<br># Ad\u0131n\u0131z: John<br># Merhaba, John!<br>```<\/p><p>Temel Farklar:<br>- Temel Veri Alma: \u0130stem olmadan veri al\u0131r<br>- \u0130stemli Veri Alma: Kullan\u0131c\u0131y\u0131 y\u00f6nlendiren bir istem g\u00f6sterir<\/p><p>## Aritmetik \u0130\u015flemler<\/p><p>### let Komutu Kullan\u0131m\u0131:<br>```bash<br># Art\u0131rma<br>let a++ # a de\u011ferini 1 art\u0131r\u0131r<br>```<\/p><p># Kabuk Programlamada Ko\u015fullu \u0130fadeler ve \u0130\u015flemler<\/p><p>## Aritmetik \u0130\u015flemler<\/p><p>### \u00c7arpma ile Atama:<br>```bash<br># let kullanarak<br>let a=5*10<br>echo $a # \u00c7\u0131kt\u0131: 50<\/p><p># (( )) kullanarak<br>((a=5*10))<br>echo $a # \u00c7\u0131kt\u0131: 50<br>```<\/p><p>### Karma\u015f\u0131k Hesaplamalar:<br>```bash<br>echo $((5 * (3 + 2))) # \u00c7\u0131kt\u0131: 25<br>```<\/p><p>Not: `let` geleneksel, `(( ))` ise daha modern ve karma\u015f\u0131k aritmetik ifadelere izin verir.<\/p><p>## Ko\u015fullu \u0130fadeler<\/p><p>### if \u0130fadesi:<br>```bash<br>if ; then<br>echo \u201ca, b\u2019den b\u00fcy\u00fckt\u00fcr\u201d<br>fi<br>```<\/p><p>### if-else \u0130fadesi:<br>```bash<br>if ; then<br>echo \u201ca, b\u2019den b\u00fcy\u00fckt\u00fcr\u201d<br>else<br>echo \u201ca, b\u2019den b\u00fcy\u00fck de\u011fildir\u201d<br>fi<br>```<\/p><p>### elif (else if) \u0130fadesi:<br>```bash<br>if ; then<br>echo \u201ca, b\u2019den b\u00fcy\u00fckt\u00fcr\u201d<br>elif ; then<br>echo \u201ca, b\u2019ye e\u015fittir\u201d<br>else<br>echo \u201ca, b\u2019den k\u00fc\u00e7\u00fckt\u00fcr\u201d<br>fi<br>```<\/p><p>### case \u0130fadesi:<br>```bash<br>case $a in<br>a) echo \u201ca de\u011feri 1\u201d ;;<br>b) echo \u201ca de\u011feri 2\u201d ;;<br>*) echo \u201ca de\u011feri ne 1 ne de 2\u201d ;;<br>esac<br>```<\/p><p>## Kar\u015f\u0131la\u015ft\u0131rma Operat\u00f6rleri<\/p><p>- **E\u015fittir**: `-eq` veya `==`<br>```bash<br><br>```<\/p><p>- **B\u00fcy\u00fck E\u015fittir**: `-ge`<br>```bash<br><br>```<\/p><p>- **K\u00fc\u00e7\u00fck E\u015fittir**: `-le`<br>```bash<br><br>```<\/p><p>- **E\u015fit De\u011fildir**: `-ne` veya `!=`<br>```bash<br><br>```<\/p><p>- **B\u00fcy\u00fckt\u00fcr**: `-gt`<br>```bash<br><br>```<\/p><p>- **K\u00fc\u00e7\u00fckt\u00fcr**: `-lt`<br>```bash<br><br>```<\/p><ul><li>*\u00d6nemli Notlar:**<br>- Ko\u015fullarda operat\u00f6rlerin etraf\u0131nda bo\u015fluk b\u0131rak\u0131n<br>- `elif` ve `else` iste\u011fe ba\u011fl\u0131d\u0131r ama \u00e7oklu ko\u015fullar i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li><li>*\u00d6nemli Notlar:**<br>- Ko\u015fullarda operat\u00f6rlerin etraf\u0131nda bo\u015fluk b\u0131rak\u0131n<br>- `elif` ve `else` iste\u011fe ba\u011fl\u0131d\u0131r ama \u00e7oklu ko\u015fullar i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li><\/ul><p># Mant\u0131ksal Operat\u00f6rler ve D\u00f6ng\u00fcler<\/p><p>## Mant\u0131ksal Operat\u00f6rler<\/p><p>### &amp;&amp; (VE) Operat\u00f6r\u00fc:<br>```bash<br>a=10<br>b=5<br>if &amp;&amp; ; then<br>echo \u201cHer iki ko\u015ful da do\u011fru\u201d<br>else<br>echo \u201cBir veya her iki ko\u015ful yanl\u0131\u015f\u201d<br>fi<br>```<\/p><p>### || (VEYA) Operat\u00f6r\u00fc:<br>```bash<br>a=10<br>b=15<br>if || ; then<br>echo \u201cEn az bir ko\u015ful do\u011fru\u201d<br>else<br>echo \u201cHi\u00e7bir ko\u015ful do\u011fru de\u011fil\u201d<br>fi<br>```<\/p><p>### &amp;&amp; ve || Operat\u00f6rlerini Birle\u015ftirme:<br>```bash<br>a=10<br>b=5<br>c=15<br>if &amp;&amp; || ; then<br>echo \u201cKo\u015ful sa\u011fland\u0131\u201d<br>else<br>echo \u201cKo\u015ful sa\u011flanmad\u0131\u201d<br>fi<br>```<\/p><p>A\u00e7\u0131klama:<br>- `&amp;&amp;` her iki ko\u015fulun da do\u011fru olmas\u0131n\u0131 gerektirir<br>- `||` ilk ko\u015ful ba\u015far\u0131s\u0131z olursa ikinci ko\u015fulu kontrol eder<\/p><p>### \u00dc\u00e7l\u00fc Operat\u00f6r (Tek Sat\u0131rl\u0131k If-Else):<br>```bash<br>a=10<br> &amp;&amp; echo \u201cB\u00fcy\u00fck\u201d || echo \u201cB\u00fcy\u00fck De\u011fil\u201d<br>```<\/p><p>## D\u00f6ng\u00fcler<\/p><p>### For D\u00f6ng\u00fcs\u00fc<br>Liste veya de\u011fer aral\u0131\u011f\u0131 \u00fczerinde yineleme yapar.<\/p><p>Temel S\u00f6zdizimi:<br>```bash<br>for item in liste; do<br># Her \u00f6\u011fe i\u00e7in \u00e7al\u0131\u015ft\u0131r\u0131lacak komutlar<br>done<br>```<\/p><p>\u00d6rnek:<br>```bash<br>for i in 1 2 3; do<br>echo \u201cSay\u0131: $i\u201d<br>done<br># \u00c7\u0131kt\u0131:<br># Say\u0131: 1<br># Say\u0131: 2<br># Say\u0131: 3<br>```<\/p><p>Aral\u0131k \u00d6rne\u011fi:<br>```bash<br>for i in {1..3}; do<br>echo \u201cSaya\u00e7: $i\u201d<br>done<br># \u00c7\u0131kt\u0131:<br># Saya\u00e7: 1<br># Saya\u00e7: 2<br># Saya\u00e7: 3<br>```<\/p><p>### While D\u00f6ng\u00fcs\u00fc<br>Belirtilen ko\u015ful do\u011fru oldu\u011fu s\u00fcrece \u00e7al\u0131\u015f\u0131r.<\/p><p>S\u00f6zdizimi:<br>```bash<br>while ; do<br># \u00c7al\u0131\u015ft\u0131r\u0131lacak komutlar<br>done<br>```<\/p><p>\u00d6rnek:<br>```bash<br>count=1<br>while ; do<br>echo \u201cSaya\u00e7: $count\u201d<br>((count++)) # Sayac\u0131 art\u0131r<br>done<br># \u00c7\u0131kt\u0131:<br># Saya\u00e7: 1<br># Saya\u00e7: 2<br># Saya\u00e7: 3<br>```<\/p><p># D\u00f6ng\u00fc T\u00fcrleri ve Kullan\u0131mlar\u0131<\/p><p>## Until D\u00f6ng\u00fcs\u00fc<br>Ko\u015ful do\u011fru oluncaya kadar \u00e7al\u0131\u015fmaya devam eder.<\/p><p>S\u00f6zdizimi:<br>```bash<br>until ; do<br># \u00c7al\u0131\u015ft\u0131r\u0131lacak komutlar<br>done<br>```<\/p><p>\u00d6rnek:<br>```bash<br>count=1<br>until ; do<br>echo \u201cSaya\u00e7: $count\u201d<br>((count++))<br>done<br># \u00c7\u0131kt\u0131:<br># Saya\u00e7: 1<br># Saya\u00e7: 2<br># Saya\u00e7: 3<br>```<\/p><p>## Sonsuz D\u00f6ng\u00fcler<br>Manuel olarak durdurulana kadar (\u00f6rn: Ctrl+C) \u00e7al\u0131\u015fmaya devam eder.<\/p><p>### For ile Sonsuz D\u00f6ng\u00fc:<br>```bash<br>for (( ; ; )); do<br>echo \u201cBu bir sonsuz d\u00f6ng\u00fcd\u00fcr\u201d<br>done<br>```<\/p><p>### While ile Sonsuz D\u00f6ng\u00fc:<br>```bash<br>while :; do<br>echo \u201cWhile ile sonsuz d\u00f6ng\u00fc\u201d<br>done<br>```<\/p><p>### Until ile Sonsuz D\u00f6ng\u00fc:<br>```bash<br>until false; do<br>echo \u201cUntil ile sonsuz d\u00f6ng\u00fc\u201d<br>done<br>```<\/p><p>## Select D\u00f6ng\u00fcs\u00fc<br>Kullan\u0131c\u0131n\u0131n bir listeden se\u00e7im yapmas\u0131n\u0131 sa\u011flayan basit bir men\u00fc sistemi olu\u015fturur.<\/p><p>S\u00f6zdizimi:<br>```bash<br>select se\u00e7enek in liste; do<br># Kullan\u0131c\u0131 se\u00e7imine g\u00f6re komutlar<br>done<br>```<\/p><p>\u00d6rnek:<br>```bash<br>PS3=\u201dBir meyve se\u00e7in: \u201c<br>select meyve in Elma Muz Portakal \u00c7\u0131k\u0131\u015f; do<br>case $meyve in<br>Elma) echo \u201cElma\u2019y\u0131 se\u00e7tiniz\u201d;;<br>Muz) echo \u201cMuz\u2019u se\u00e7tiniz\u201d;;<br>Portakal) echo \u201cPortakal\u2019\u0131 se\u00e7tiniz\u201d;;<br>\u00c7\u0131k\u0131\u015f) break;;<br>*) echo \u201cGe\u00e7ersiz se\u00e7enek\u201d;;<br>esac<br>done<br>```<\/p><p>\u00d6rnek \u00c7\u0131kt\u0131:<br>```<br>1) Elma<br>2) Muz<br>3) Portakal<br>4) \u00c7\u0131k\u0131\u015f<br>Bir meyve se\u00e7in: 2<br>Muz\u2019u se\u00e7tiniz<br>```<\/p><p>A\u00e7\u0131klama:<br>- `PS3` istem mesaj\u0131n\u0131 belirler<br>- `select` d\u00f6ng\u00fcs\u00fc se\u00e7enekleri g\u00f6sterir ve her se\u00e7im ilgili case ifadesini \u00e7al\u0131\u015ft\u0131r\u0131r<br>- `break` komutu kullan\u0131c\u0131 \u201c\u00c7\u0131k\u0131\u015f\u201d\u0131 se\u00e7ti\u011finde d\u00f6ng\u00fcden \u00e7\u0131kar<\/p><p>## D\u00f6ng\u00fc T\u00fcrlerinin \u00d6zeti<br>- **For D\u00f6ng\u00fcs\u00fc**: Liste veya aral\u0131k \u00fczerinde yineleme yapar<br>- **While D\u00f6ng\u00fcs\u00fc**: Ko\u015ful do\u011fru oldu\u011fu s\u00fcrece devam eder<br>- **Until D\u00f6ng\u00fcs\u00fc**: Ko\u015ful do\u011fru oluncaya kadar devam eder<br>- **Sonsuz D\u00f6ng\u00fc**: Kesintiye u\u011frat\u0131lana kadar \u00e7al\u0131\u015f\u0131r<br>- **Select D\u00f6ng\u00fcs\u00fc**: Kullan\u0131c\u0131 se\u00e7imi i\u00e7in men\u00fc g\u00f6sterir<\/p><p>\ud83d\udca1 **\u0130pucu**: D\u00f6ng\u00fcler tekrarlayan g\u00f6revleri otomatikle\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r. Dosyalar, diziler veya aral\u0131klar \u00fczerinde yineleme yapmak gibi \u00e7e\u015fitli ama\u00e7lar i\u00e7in kullan\u0131labilirler. \u00d6rne\u011fin, bir dizindeki t\u00fcm dosyalar\u0131 yeniden adland\u0131rmak i\u00e7in d\u00f6ng\u00fc kullanabilirsiniz.<\/p><p># Kabuk Programlamada Fonksiyonlar<\/p><p>## 1. Fonksiyon Tan\u0131mlama<br>\u0130ki farkl\u0131 s\u00f6zdizimi kullan\u0131labilir:<br>```bash<br>function fonksiyon_ad\u0131 {<br># kodlar<br>}<br># veya<br>fonksiyon_ad\u0131() {<br># kodlar<br>}<br>```<\/p><p>## 2. Temel Fonksiyon<br>```bash<br>selamla() {<br>echo \u201cMerhaba, kabuk beti\u011fine ho\u015f geldiniz!\u201d<br>}<br>selamla # Fonksiyonu \u00e7a\u011f\u0131rma<br>```<\/p><p>## 3. Parametreli Fonksiyonlar<br>```bash<br>kullanici_selamla() {<br>echo \u201cMerhaba, $1!\u201d<br>}<br>kullanici_selamla \u201cAhmet\u201d<br>```<\/p><p>## 4. D\u00f6n\u00fc\u015f De\u011ferleri<br>```bash<br>sayilari_topla() {<br>sonuc=$(( $1 + $2 ))<br>echo $sonuc<br>}<br>toplam=$(sayilari_topla 3 5)<br>echo \u201cToplam: $toplam\u201d<br>```<\/p><p>## 5. Ko\u015fullu Mant\u0131k ve D\u00f6ng\u00fcler<br>```bash<br>cift_kontrol() {<br>if (( $1 % 2 == 0 )); then<br>echo \u201c$1 \u00e7ift say\u0131d\u0131r\u201d<br>else<br>echo \u201c$1 tek say\u0131d\u0131r\u201d<br>fi<br>}<br>cift_kontrol 7 # \u00c7\u0131kt\u0131: \u201c7 tek say\u0131d\u0131r\u201d<br>```<\/p><p>## 7. Varsay\u0131lan De\u011ferler<br>```bash<br>selamla() {<br>local isim=${1:-Misafir}<br>echo \u201cMerhaba, $isim!\u201d<br>}<br>selamla \u201cAhmet\u201d # \u00c7\u0131kt\u0131: \u201cMerhaba, Ahmet!\u201d<br>selamla # \u00c7\u0131kt\u0131: \u201cMerhaba, Misafir!\u201d<br>```<\/p><p>## 8. Referans ile Parametre Ge\u00e7me<br>```bash<br>deger_degistir() {<br>eval $1=\\$2<br>}<br>deger_degistir degisken 100<br>echo \u201cDe\u011fi\u015fkenin yeni de\u011feri: $degisken\u201d<br>```<\/p><p>## 9. Arg\u00fcman Ge\u00e7me<br>### Konumsal Arg\u00fcmanlar ($1, $2, $3, vb.)<br>```bash<br>selamla() {<br>echo \u201cMerhaba, $1! $2 ya\u015f\u0131ndas\u0131n.\u201d<br>}<br>selamla \u201cAhmet\u201d 25<br>```<\/p><p>### T\u00fcm Arg\u00fcmanlar ($@)<br>```bash<br>hepsini_yazdir() {<br>for arg in \u201c$@\u201d; do<br>echo \u201c$arg\u201d<br>done<br>}<br>hepsini_yazdir \u201cElma\u201d \u201cArmut\u201d \u201cKiraz\u201d<br>```<\/p><p>### Tek String Olarak T\u00fcm Arg\u00fcmanlar ($*)<br>```bash<br>string_olarak_yazdir() {<br>echo \u201c$*\u201d<br>}<br>string_olarak_yazdir \u201cElma\u201d \u201cArmut\u201d \u201cKiraz\u201d<br>```<\/p><p>### Arg\u00fcman Say\u0131s\u0131 ($#)<br>```bash<br>arguman_say() {<br>echo \u201cArg\u00fcman say\u0131s\u0131: $#\u201d<br>}<br>arguman_say \u201cElma\u201d \u201cArmut\u201d \u201cKiraz\u201d<br>```<\/p><p>## \u00d6zet<br>- Fonksiyonlar kodu d\u00fczenli ve yeniden kullan\u0131labilir hale getirir<br>- Arg\u00fcmanlar $1, $2 vb. ile eri\u015filebilir ve varsay\u0131lan de\u011ferler atanabilir<br>- Fonksiyonlar i\u00e7inde d\u00f6ng\u00fcler ve ko\u015fullar kullan\u0131labilir<br>- Fonksiyonlar echo ile de\u011fer d\u00f6nd\u00fcr\u00fcr ve bu de\u011ferler de\u011fi\u015fkenlerde saklanabilir.<\/p><p># Kabuk Programlamada \u00d6zel Komutlar ve Kontrol Yap\u0131lar\u0131<\/p><p>## shift Operat\u00f6r\u00fc<br>Konumsal parametreleri (arg\u00fcmanlar\u0131) sola kayd\u0131rmak i\u00e7in kullan\u0131l\u0131r.<\/p><p>S\u00f6zdizimi:<br>```bash<br>shift # Bir pozisyon sola kayd\u0131r\u0131r<br>shift n # n pozisyon sola kayd\u0131r\u0131r<br>```<\/p><p>### \u00d6rnek 1: Tek Pozisyon Kayd\u0131rma<br>```bash<br>kaydirma_ornegi() {<br>echo \u201cOrijinal arg\u00fcmanlar: $1, $2, $3\u201d<br>shift<br>echo \u201cKayd\u0131rma sonras\u0131: $1, $2, $3\u201d<br>}<br>kaydirma_ornegi \u201cbir\u201d \u201ciki\u201d \u201c\u00fc\u00e7\u201d<br># \u00c7\u0131kt\u0131:<br># Orijinal arg\u00fcmanlar: bir, iki, \u00fc\u00e7<br># Kayd\u0131rma sonras\u0131: iki, \u00fc\u00e7<br>```<\/p><p>### \u00d6rnek 2: \u00c7oklu Kayd\u0131rma<br>```bash<br>coklu_kaydirma() {<br>echo \u201cOrijinal arg\u00fcmanlar: $1, $2, $3, $4\u201d<br>shift 2<br>echo \u201c2 kez kayd\u0131rma sonras\u0131: $1, $2\u201d<br>}<br>coklu_kaydirma \u201celma\u201d \u201carmut\u201d \u201ckiraz\u201d \u201cerik\u201d<br>```<\/p><p>### \u00d6rnek 3: D\u00f6ng\u00fc ile Kullan\u0131m<br>```bash<br>argumanlari_isle() {<br>while ; do<br>echo \u201c\u0130\u015flenen arg\u00fcman: $1\u201d<br>shift<br>done<br>}<br>argumanlari_isle \u201carg1\u201d \u201carg2\u201d \u201carg3\u201d \u201carg4\u201d<br>```<\/p><p>## Kontrol Komutlar\u0131<\/p><p>### 1. break Komutu<br>D\u00f6ng\u00fcy\u00fc erken sonland\u0131r\u0131r.<br>```bash<br>for i in {1..5}; do<br>if ; then<br>break<br>fi<br>echo $i<br>done<br>```<\/p><p>### 2. continue Komutu<br>Mevcut d\u00f6ng\u00fc iterasyonunu atlar.<br>```bash<br>for i in {1..5}; do<br>if ; then<br>continue<br>fi<br>echo $i<br>done<br>```<\/p><p>### 3. \u0130\u00e7 \u0130\u00e7e D\u00f6ng\u00fclerde break ve continue<br>```bash<br>for i in {1..3}; do<br>for j in {1..3}; do<br>if &amp;&amp; ; then<br>break 2 # \u0130ki seviye d\u00f6ng\u00fcden \u00e7\u0131kar<br>fi<br>echo \u201ci=$i, j=$j\u201d<br>done<br>done<br>```<\/p><p>### 4. sleep Komutu<br>Beti\u011fi belirli bir s\u00fcre duraklat\u0131r.<br>```bash<br>sleep 5 # 5 saniye bekler<br>```<\/p><ul><li>*\u00d6nemli Noktalar:**<br>- `shift` ilk arg\u00fcman\u0131 ($1) kald\u0131r\u0131r ve di\u011ferlerini sola kayd\u0131r\u0131r<br>- `break n` ile i\u00e7 i\u00e7e d\u00f6ng\u00fclerden \u00e7\u0131k\u0131labilir<br>- `continue n` ile i\u00e7 i\u00e7e d\u00f6ng\u00fclerde iterasyon atlanabilir<br>- `sleep` komutu betik y\u00fcr\u00fctmesini duraklatmak i\u00e7in kullan\u0131l\u0131r.<\/li><li>*\u00d6nemli Noktalar:**<br>- `shift` ilk arg\u00fcman\u0131 ($1) kald\u0131r\u0131r ve di\u011ferlerini sola kayd\u0131r\u0131r<br>- `break n` ile i\u00e7 i\u00e7e d\u00f6ng\u00fclerden \u00e7\u0131k\u0131labilir<br>- `continue n` ile i\u00e7 i\u00e7e d\u00f6ng\u00fclerde iterasyon atlanabilir<br>- `sleep` komutu betik y\u00fcr\u00fctmesini duraklatmak i\u00e7in kullan\u0131l\u0131r.<\/li><\/ul><p># Temel Komutlar ve Geni\u015fletme \u00d6zellikleri<\/p><p>## Kontrol Komutlar\u0131<\/p><p>### 1. exit Komutu<br>Beti\u011fi durum koduyla sonland\u0131r\u0131r (0: ba\u015far\u0131l\u0131, 0 d\u0131\u015f\u0131: hata)<br>```bash<br>exit 1 # Hata durumuyla \u00e7\u0131k\u0131\u015f<br>```<\/p><p>### 2. $? (Son Komut \u00c7\u0131k\u0131\u015f Durumu)<br>Son \u00e7al\u0131\u015ft\u0131r\u0131lan komutun \u00e7\u0131k\u0131\u015f durumunu saklar<br>```bash<br>mkdir myklasor<br>echo $? # Ba\u015far\u0131l\u0131ysa 0, ba\u015far\u0131s\u0131zsa 1 d\u00f6nd\u00fcr\u00fcr<br>```<\/p><p>## seq Komutu<br>Say\u0131 dizileri olu\u015fturmak i\u00e7in kullan\u0131l\u0131r.<\/p><p>### Temel Kullan\u0131m:<br>```bash<br># 1'den 5'e kadar say\u0131lar<br>seq 1 5<br># \u00c7\u0131kt\u0131: 1 2 3 4 5<\/p><p># \u00d6zel ad\u0131m boyutu (1'den 10'a 2'\u015fer artarak)<br>seq 1 2 10<br># \u00c7\u0131kt\u0131: 1 3 5 7 9<\/p><p># Ondal\u0131k say\u0131lar<br>seq 0 0.2 1<br># \u00c7\u0131kt\u0131: 0.0 0.2 0.4 0.6 0.8 1.0<\/p><p># Ters s\u0131ralama<br>seq 5 -1 1<br># \u00c7\u0131kt\u0131: 5 4 3 2 1<br>```<\/p><p>### D\u00f6ng\u00fc ile Kullan\u0131m:<br>```bash<br>for i in $(seq 1 5); do<br>echo \u201cSay\u0131: $i\u201d<br>done<br>```<\/p><p>### seq Se\u00e7enekleri:<br>```bash<br># Bi\u00e7imlendirme (-f)<br>seq -f \u201cSay\u0131: %.2f\u201d 1 5<br># \u00c7\u0131kt\u0131: Say\u0131: 1.00 Say\u0131: 2.00 \u2026<\/p><p># Ay\u0131r\u0131c\u0131 de\u011fi\u015ftirme (-s)<br>seq -s \u201c,\u201d 1 5<br># \u00c7\u0131kt\u0131: 1,2,3,4,5<\/p><p># S\u0131f\u0131rla doldurma (-w)<br>seq -w 1 5<br># \u00c7\u0131kt\u0131: 01 02 03 04 05<br>```<\/p><p>## S\u00fcsl\u00fc Parantez Geni\u015fletmesi<br>Tek bir ifadeden birden \u00e7ok metin dizisi olu\u015fturma \u00f6zelli\u011fi.<\/p><p>### Temel \u00d6rnekler:<br>```bash<br># Kelime listesi<br>echo {elma,armut,kiraz}<br># \u00c7\u0131kt\u0131: elma armut kiraz<\/p><p># Say\u0131 aral\u0131\u011f\u0131<br>echo {1..5}<br># \u00c7\u0131kt\u0131: 1 2 3 4 5<\/p><p># Harf aral\u0131\u011f\u0131<br>echo {a..e}<br># \u00c7\u0131kt\u0131: a b c d e<br>```<\/p><ul><li>*\u00d6zet:**<br>- `exit`: Betikten \u00e7\u0131k\u0131\u015f yapar<br>- `$?`: Son komutun durumunu kontrol eder<br>- `seq`: Say\u0131 dizileri olu\u015fturur<br>- S\u00fcsl\u00fc parantez geni\u015fletmesi: Metin dizileri olu\u015fturur.<\/li><li>*\u00d6zet:**<br>- `exit`: Betikten \u00e7\u0131k\u0131\u015f yapar<br>- `$?`: Son komutun durumunu kontrol eder<br>- `seq`: Say\u0131 dizileri olu\u015fturur<br>- S\u00fcsl\u00fc parantez geni\u015fletmesi: Metin dizileri olu\u015fturur.<\/li><\/ul><p># S\u00fcsl\u00fc Parantez Geni\u015fletmesi ve getops Komutu<\/p><p>## Geli\u015fmi\u015f S\u00fcsl\u00fc Parantez Kullan\u0131m\u0131<\/p><p>### Ad\u0131m Boyutlu Aral\u0131k:<br>```bash<br>echo {1..10..2}<br># \u00c7\u0131kt\u0131: 1 3 5 7 9<br>```<\/p><p>### Metin ile De\u011fi\u015fken Birle\u015ftirme:<br>```bash<br>echo dosya{1..3}.txt<br># \u00c7\u0131kt\u0131: dosya1.txt dosya2.txt dosya3.txt<br>```<\/p><p>### \u0130\u00e7 \u0130\u00e7e Geni\u015fletme:<br>```bash<br>echo {A,B}{1,2}<br># \u00c7\u0131kt\u0131: A1 A2 B1 B2<br>```<\/p><p>### \u00c7oklu Eleman Geni\u015fletme:<br>```bash<br>echo {A,B,C}{1,2,3}<br># \u00c7\u0131kt\u0131: A1 A2 A3 B1 B2 B3 C1 C2 C3<br>```<\/p><p>### Dosya ve Dizinlerle Kullan\u0131m:<br>```bash<br>mkdir klasor{1,2,3}<br># klasor1, klasor2 ve klasor3 dizinlerini olu\u015fturur<br>```<\/p><p>## getopts Komutu<br>Komut sat\u0131r\u0131 se\u00e7eneklerini (bayraklar\u0131) i\u015flemek i\u00e7in kullan\u0131l\u0131r.<\/p><p>### Temel S\u00f6zdizimi:<br>```bash<br>getopts \u201csecenek_dizisi\u201d degisken<br>```<\/p><p>### \u00d6rnek 1: Basit Se\u00e7enek \u0130\u015fleme<br>```bash<br>#!\/bin\/bash<br>while getopts \u201cab\u201d secenek; do<br>case $secenek in<br>a) echo \u201cA se\u00e7ene\u011fi se\u00e7ildi\u201d ;;<br>b) echo \u201cB se\u00e7ene\u011fi se\u00e7ildi\u201d ;;<br>\\?) echo \u201cGe\u00e7ersiz se\u00e7enek\u201d; exit 1 ;;<br>esac<br>done<\/p><p># Kullan\u0131m:<br># .\/betik.sh -a<br># \u00c7\u0131kt\u0131: A se\u00e7ene\u011fi se\u00e7ildi<br>```<\/p><p>### \u00d6rnek 2: Arg\u00fcmanl\u0131 Se\u00e7enekler<br>```bash<br>#!\/bin\/bash<br>while getopts \u201cf:n:\u201d secenek; do<br>case $secenek in<br>f) echo \u201cF se\u00e7ene\u011fi se\u00e7ildi, arg\u00fcman: $OPTARG\u201d ;;<br>n) echo \u201cN se\u00e7ene\u011fi se\u00e7ildi, arg\u00fcman: $OPTARG\u201d ;;<br>\\?) echo \u201cGe\u00e7ersiz se\u00e7enek\u201d; exit 1 ;;<br>esac<br>done<\/p><p># Kullan\u0131m:<br># .\/betik.sh -f dosya.txt<br># \u00c7\u0131kt\u0131: F se\u00e7ene\u011fi se\u00e7ildi, arg\u00fcman: dosya.txt<br>```<\/p><p>### \u00d6rnek 3: Uzun Se\u00e7eneklerle Kullan\u0131m<br>```bash<br>#!\/bin\/bash<br>while getopts \u201cf:n:\u201d secenek; do<br>case $secenek in<br>f) echo \u201cDosya se\u00e7ene\u011fi: $OPTARG\u201d ;;<br>n) echo \u201c\u0130sim se\u00e7ene\u011fi: $OPTARG\u201d ;;<br>\\?) echo \u201cGe\u00e7ersiz se\u00e7enek\u201d; exit 1 ;;<br>esac<br>done<\/p><p># Kullan\u0131m:<br># .\/betik.sh -f metin.txt -n Ahmet<br>```<\/p><ul><li>*\u00d6nemli Noktalar:**<br>- S\u00fcsl\u00fc parantez geni\u015fletmesi di\u011fer kabuk i\u015flemlerinden \u00f6nce ger\u00e7ekle\u015fir<br>- Virg\u00fcller aras\u0131nda bo\u015fluk olmamal\u0131d\u0131r<br>- getopts ile se\u00e7enekler sistematik \u015fekilde i\u015flenebilir<br>- Arg\u00fcman gerektiren se\u00e7enekler i\u00e7in `:` kullan\u0131l\u0131r<\/li><li>*\u00d6nemli Noktalar:**<br>- S\u00fcsl\u00fc parantez geni\u015fletmesi di\u011fer kabuk i\u015flemlerinden \u00f6nce ger\u00e7ekle\u015fir<br>- Virg\u00fcller aras\u0131nda bo\u015fluk olmamal\u0131d\u0131r<br>- getopts ile se\u00e7enekler sistematik \u015fekilde i\u015flenebilir<br>- Arg\u00fcman gerektiren se\u00e7enekler i\u00e7in `:` kullan\u0131l\u0131r<\/li><\/ul><p># Geli\u015fmi\u015f Komut Sat\u0131r\u0131 \u0130\u015flemleri ve \u00d6rnek Proje<\/p><p>## getopts Ayr\u0131nt\u0131l\u0131 Kullan\u0131m\u0131<\/p><p>### \u00d6rnek 4: \u00c7oklu Arg\u00fcman ve Se\u00e7enek \u0130\u015fleme<br>```bash<br>#!\/bin\/bash<br>while getopts \u201ca:b:c:\u201d secenek; do<br>case $secenek in<br>a) echo \u201cA se\u00e7ene\u011fi de\u011feri: $OPTARG\u201d ;;<br>b) echo \u201cB se\u00e7ene\u011fi de\u011feri: $OPTARG\u201d ;;<br>c) echo \u201cC se\u00e7ene\u011fi de\u011feri: $OPTARG\u201d ;;<br>\\?) echo \u201cGe\u00e7ersiz se\u00e7enek\u201d; exit 1 ;;<br>esac<br>done<br>```<\/p><p>## Dosya \u0130\u015fleme Komutlar\u0131<\/p><p>### basename<br>```bash<br># Dosya ad\u0131n\u0131 yoldan ay\u0131r\u0131r<br>basename \/home\/kullanici\/dosya.txt # \u00c7\u0131kt\u0131: dosya.txt<br>basename \/home\/kullanici\/dosya.txt .txt # \u00c7\u0131kt\u0131: dosya<br>```<\/p><p>### dirname<br>```bash<br># Dizin yolunu d\u00f6nd\u00fcr\u00fcr<br>dirname \/home\/kullanici\/dosya.txt # \u00c7\u0131kt\u0131: \/home\/kullanici<br>```<\/p><p>### realpath<br>```bash<br># Mutlak yolu d\u00f6nd\u00fcr\u00fcr<br>realpath dosya.txt # \u00c7\u0131kt\u0131: \/home\/kullanici\/belgeler\/dosya.txt<br>```<\/p><p>## Dosya ve Dizin Kontrolleri<br>```bash<br>if ; then<br>echo \u201cDizin mevcut\u201d<br>fi<\/p><p>if ; then<br>echo \u201cDosya mevcut de\u011fil\u201d<br>fi<br>```<\/p><p>## nohup Kullan\u0131m\u0131<br>```bash<br># Arka planda \u00e7al\u0131\u015ft\u0131rma<br>nohup .\/betik.sh &amp;<\/p><p># \u00c7\u0131kt\u0131y\u0131 y\u00f6nlendirme<br>nohup .\/betik.sh &gt; \/dev\/null 2&gt;&amp;1 &amp;<\/p><p># \u00c7al\u0131\u015fan i\u015flemleri kontrol etme<br>ps aux | grep betik.sh<br>```<\/p><p>## \u00d6rnek Proje: Hesap Makinesi<br>```bash<br>#!\/bin\/bash<\/p><p># Toplama fonksiyonu<br>topla() {<br>echo \u201cSonu\u00e7: $(($1 + $2))\u201d<br>}<\/p><p># \u00c7\u0131karma fonksiyonu<br>cikar() {<br>echo \u201cSonu\u00e7: $(($1 \u2014 $2))\u201d<br>}<\/p><p># \u00c7arpma fonksiyonu<br>carp() {<br>echo \u201cSonu\u00e7: $(($1 * $2))\u201d<br>}<\/p><p># B\u00f6lme fonksiyonu<br>bol() {<br>if ; then<br>echo \u201cHata: S\u0131f\u0131ra b\u00f6lme hatas\u0131!\u201d<br>else<br>echo \u201cSonu\u00e7: $(($1 \/ $2))\u201d<br>fi<br>}<\/p><p># Men\u00fc<br>echo \u201cBasit Hesap Makinesi\u201d<br>echo \u201c\u0130\u015flem se\u00e7in:\u201d<br>echo \u201c1. Toplama\u201d<br>echo \u201c2. \u00c7\u0131karma\u201d<br>echo \u201c3. \u00c7arpma\u201d<br>echo \u201c4. B\u00f6lme\u201d<\/p><p>read -p \u201cSe\u00e7iminiz (1\/2\/3\/4): \u201c secim<br>read -p \u201c\u0130lk say\u0131: \u201c sayi1<br>read -p \u201c\u0130kinci say\u0131: \u201c sayi2<\/p><p>case $secim in<br>1) topla $sayi1 $sayi2 ;;<br>2) cikar $sayi1 $sayi2 ;;<br>3) carp $sayi1 $sayi2 ;;<br>4) bol $sayi1 $sayi2 ;;<br>*) echo \u201cGe\u00e7ersiz se\u00e7im\u201d ;;<br>esac<br>```<\/p><p># Hesap Makinesi Beti\u011fi \u2014 Kurulum ve Kullan\u0131m<\/p><p>## Kurulum Ad\u0131mlar\u0131<\/p><p>### 1. Beti\u011fi \u00c7al\u0131\u015ft\u0131r\u0131labilir Yapma<br>```bash<br>chmod +x calculator.sh<br>```<\/p><p>### 2. Beti\u011fi \u00c7al\u0131\u015ft\u0131rma<br>```bash<br>.\/calculator.sh<br>```<\/p><p>## Beti\u011fin \u00c7al\u0131\u015fma Mant\u0131\u011f\u0131<br>- Kullan\u0131c\u0131dan bir i\u015flem se\u00e7mesini ister (toplama, \u00e7\u0131karma, \u00e7arpma, b\u00f6lme)<br>- \u0130ki say\u0131 girmesini bekler<br>- Se\u00e7ilen i\u015flemi ger\u00e7ekle\u015ftirir<br>- B\u00f6lme i\u015fleminde s\u0131f\u0131ra b\u00f6lme kontrol\u00fc yapar<\/p><p>## \u00d6rnek \u00c7al\u0131\u015ft\u0131rma<br>```<br>$ .\/calculator.sh<br>Basit Hesap Makinesi<br>\u0130\u015flem se\u00e7in:<br>1. Toplama<br>2. \u00c7\u0131karma<br>3. \u00c7arpma<br>4. B\u00f6lme<br>Se\u00e7iminiz (1\/2\/3\/4): 1<br>\u0130lk say\u0131: 10<br>\u0130kinci say\u0131: 5<br>Sonu\u00e7: 15<br>```<\/p><p>## Geli\u015ftirme \u00d6nerileri<br>Bu basit projeyi \u015fu \u00f6zelliklerle geli\u015ftirebilirsiniz:<br>- Karek\u00f6k alma ve \u00fcs alma gibi ileri matematik i\u015flemleri<br>- S\u00fcrekli \u00e7al\u0131\u015fan bir d\u00f6ng\u00fc ile tekrarl\u0131 hesaplama<br>- Ondal\u0131kl\u0131 say\u0131 deste\u011fi<br>- Hata kontrollerinin art\u0131r\u0131lmas\u0131<br>- Ge\u00e7mi\u015f i\u015flemleri kaydetme<br>- Bilimsel hesap makinesi \u00f6zellikleri<\/p><p>Bu proje, kabuk programlamada temel kavramlar\u0131 \u00f6\u011frenmek i\u00e7in iyi bir \u00f6rnektir:<br>- Ko\u015fullu ifadeler<br>- Kullan\u0131c\u0131 girdisi alma<br>- Matematiksel i\u015flemler<br>- Fonksiyon kullan\u0131m\u0131<br>- Hata kontrol\u00fc<\/p>","excerpt":"## Kabuk Programlama (Shell Scripting) Nedir?Kabuk programlama, Linux ortam\u0131nda komutlar yazarak ve \u00e7al\u0131\u015ft\u0131rarak g\u00f6revleri otomatikle\u015ftirmenizi ve d\u00fczenlemenizi sa\u011flayan g\u00fc\u00e7l\u00fc bir programlama y\u00f6ntemidir. \u00d6zellikle \u015fu alanlarda de\u011ferlidir:- Sistem y\u00f6netimi- G\u00f6rev otomatizasyonu- Verimlili\u011fi...","created_at":"2024-12-29 11:38:07","updated_at":"2026-09-23 16:36:20","category_id":10,"view_count":587,"reading_time":17,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2024-12-29 11:38:07","featured_image":"resimyok.jpg","slug":"kabuk-programlamaya-giris","category_name":"nix Linux Unix","category_slug":"nix-linux-unix"}