Shell(Bash,sh, zsh,) Programming- Kabuk Programlama

Benzer belgeler
Kabuk Programlama (Bash)

Linux'ta Kabuk ve Kabuk Programlama

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

KABUK PROGRAMLAMA (shell programming- scripting)

Linux Dosya Yapısı. Eren BAŞTÜRK.

Linux altında komut satırında...

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

Komut Penceresi ile Çalışmaya Başlamak

Python Programlama Dili

Regular Expressions Version 0.1

Akış Kontrol Mekanizmaları

k ise bir gerçek sayı olsun. Buna göre aşağıdaki işlemler Matlab da yapılabilir.

Temel Linux Eğitimi. İçindekiler

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

Bash ile Programlama. Cem Ahmet Mercan. Ulusal Yüksek Başarımlı Hesaplama Merkezi (UHeM) 13 Temmuz 2017

PBS Betiği Hazırlama ve PBS Komutları. Feyza Eryol

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

BİLGİ İŞLEM DERS 3. Yrd Doç Dr. Ferhat ÖZOK MSGSU FİZİK BÖLÜMÜ MSGSU FİZİK BÖLÜMÜ

yazılabilir. Bundan sonra programın ismi yazılıp enter tuşuna basıldığı zaman bir program Linux komutuymuş gibi çalışacaktır.

HSancak Nesne Tabanlı Programlama I Ders Notları

LABORATUVAR ÇALIŞMASI 1 - Python a Giriş

İNTERNET PROGRAMCILIĞI - II

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

Pardus 2013 te Metin Editörleri

Pythonda değişkenlerin türlerini tanımlamaya gerek yoktur

How to ASP Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU. 29 Eki. 1 Kas. 2013

NESNEYE YÖNELİK PROGRAMLAMA

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

disp VEYA fprintf KOMUTLARIYLA EKRANA MESAJ YAZDIRMA

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

$ rm dosya1 dosya2 dosya3 dosya4 dosya5 dosya6 dosya7 dosya8

*nix' lerde Etkin ve Pratik Arama Yöntemleri

İNTERNET PROGRAMCILIĞI DERSİ ÇALIŞMA SORULARI

How to ASP Language. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU. Hafta V

Komutlar (Devam) ls -a > deneme (ls -a komutunun çıktısı deneme isimli. ls -a >> deneme (ls -a komutunun çıktısı deneme

5. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir.

VISUAL BASIC DE İŞLETİM SİSTEMİ DENETİM KOMUTLARI VE FONKSİYONLARI

HSancak Nesne Tabanlı Programlama I Ders Notları

ALGORİTMA VE PROGRAMLAMA I

CHAPTER 3. ZAMANLANMIŞ GÖREVLER (Automated Tasks)

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Internet Programming I. Hafta III. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

BÖLÜM 4 KONTROL DEYİMLERİ

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Temel Li nux Eği t i mi Böl üm

Print Komutu ile Değişkenleri Yazdırmak

Genel Programlama II

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

Bilindik engelleme yöntemlerinin dışında olan, kurumsal web filitreleri nasıl aşılır?

Linux Ubuntu Kurulumu

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

GRAFİK TASARIM. ACTION SCRIPT 3.0 Ders1 YARD. DOÇ. DR. MEHTAP YALÇINKAYA

C Programlama Dilininin Basit Yapıları

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Burada a değişkeninin türü integer olarak verildi. Peki biz bu ifadeyi tırnak içerisinde yazarsak ne olur?

Linux işletim sistemlerinde dosya hiyerarşisinde en üstte bulunan dizindir. Diğer bütün dizinler kök dizinin altında bulunur.

man komut man ls (ls komutu hakkında bilgi verir.) man pwd (pwd komutu hakkında bilgi verir.)

Ruby. Prof.Dr.Timur Karaçay Başkent Üniversitesi

qmail ile üniversite mail sistemi yönetimi Devrim Sipahi Dokuz Eylül Üniversitesi

Açık Kaynak Kodlu Yazılım

Linux Dosya ve Dizin Yapısı

qmail ile üniversite mail sistemi yönetimi Devrim Sipahi Dokuz Eylül Üniversitesi

PBS Betiği Hazırlama ve PBS Komutları

İnternet Programcılığı Dersi 2.Dönem Ders Notu

PROGRAMLAMA DİLLERİ I

Internet Programming II

İşletim Sistemleri. İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 5. Bölüm Karar ve Çevrim Kontrol Yapıları

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Linux Kurulumu (Sürüm 1.52) İçindekiler

Dr. Fatih AY Tel: fatihay@fatihay.net

Programlama Dili Prensipleri. Lab Notları 8 ve 9

ALGORİTMA VE PROGRAMLAMA I

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

Temel Linux Komutları

Program Akış Kontrol Yapıları

BİLGİ İŞLEM DERS 1. Yrd Doç Dr. Ferhat ÖZOK MSGSU FİZİK BÖLÜMÜ MSGSU FİZİK BÖLÜMÜ

SIMAN KULLANIM KILAVUZU

ALGORİTMA VE PROGRAMLAMA I

OMÜ HAVACILIK VE UZAY BİLİMLERİ FAKÜLTESİ METEOROLOJİ MÜHENDİSLİĞİ BÖLÜMÜ MET103 BİLGİSAYAR PROGRAMLAMA I BÜTÜNLEME SINAVI

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

1.1. Yazılım Geliştirme Süreci

1.PROGRAMLAMAYA GİRİŞ

Özyineleme (Recursion)

Kurumsal Güvenlik ve Web Filtreleme

MatLab. Mustafa Coşar

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Kurumsal Güvenlik ve Web Filtreleme

Internet Programming I. Hafta III. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Bilgisayarın Yapıtaşları

Transkript:

dostaki bat dosyasi gibi çalışabilir dosyalar oluşturma Linux altında hızlı ve pratik programlama yapmanın en kısa yolu shell(kabuk) programlamadır diyebiliriz. İşletim sisteminin doğal komutlarını çalıştırma ve ek herhangi bir yorumlayıcı istememesi shell script(betik) dilini diğerlerinden ayıran en önemli faktördür. Yazdığınız bir kodu tüm Linux/UNIX sistemlerde değişiklik yapmadan kullanabilirsiniz. Linux altında shell(kabuk) programlama birçok farklı shell ile yapılabilir. Linux ve UNIX sistemlerde yaygın kullanılan bazı kabuk(shell)lar; sh (Shell, Bourne Shell): Ilk UNIX kabuğudur ve çoğu UNIX dağıtımı ile birlikte öntanımlı kabuk olarak dağıtılır. ksh (Korn Shell): sh uyumlu, birçok ek programlama özelliği de içeren bir kabuk. bash(bourne Again Shell): Kullanım kolaylığı bakımından en çok rağbet gören bash, sh ve ksh uyumluluğunu korurken, özellikle etkileşimli kullanıma yönelik (komut tamamlama, gibi) birçok yenilik de içerir. csh (C shell): Berkeley Üniversitesi nde geliştirilen csh in C diline benzer bir programlama yapısı vardır. Özellikle programcılar tarafından tercih edilir. tcsh: csh ın biraz geliştirilmiş hali diyebiliriz. Bash kullanarak pratik programlama Linux üzerinde kullanıcının işletim sistemini kullanması için temel iki yol vardır. Bunlardan biri GUI olarak adlandırdığımız grak arabirimler diğeri de konsol/shell olarak adlandırabileceğimiz komut satırı yönetimidir. Kabuk programlamada aslında konsoldan verilen komutları belirli bir düzene uyarak çalıştırmaktan ibarettir. Yani konsoldan çalıştırdığımız komutları bir dosyaya sırası ile yazarak en basitinden bir shell script yazmış oluruz. Tabiki belirli amaçlara yönelmiş programlar için fonksiyon, dizi, döngüler gibi daha üst düzey yapılar kullanmamız gerekebilir ki bash bunları fazlasıyla sağlamaktadır. Kod yazmaya başlamadan bir ek daha yapalım. Yazı boyunca kodladığımız örnekleri sizlerde herhangi bir Linux altında yazıp çalıştırabilirsiniz. Editör olarak KDE altında Kedit, Gnome altında Gedit kullanmanızı tavsiye ederim. Eger her işimi konsoldan yapmak istiyorum derseniz pico, nano ya da Vi gibi konsol tabanlı editörleri de kullanmayı deneyebilirsiniz. Eğer elinizin altında halihazırda bir Linux/UNIX yoksa ve kuracak durumda da değilseniz internet üzerinden ücretsiz olarak Shell hesabı sağlayan rmalardan bir hesap edinerek örnek kodları deneyebilirsiniz. http://www.ductape.net/~mitja/freeunix.shtml adresi çeşitli Linux ve UNIX sistemler üzerinde ücretsiz olarak shell hesabına sahip olmak isteyenler için iyi bir başlangıç noktası. Buradan bir hesap edindikten sonra Putty SSH programı ile sunucunuza bağlanarak örnek kodları çalıştırabilirsiniz. Lafı fazla uzatmadan programlama dünyasının o meşhur ilk programı ile kodlamaya başlayalım.. Evet, Hello World! / Merhaba dünya! programından bahsediyorum. echo Merhaba Dunya! Böylece ilk shell script(betik)imizi yazmış olduk. Yukarıdaki basit programda dikkatimizi çeken bir satır var, bu satır sonraki alt satırların hangi kabuk tarafından yorumlanacağını bildiren standart bir tanımdır ve her bash scriptinde olmalıdır. Eğer bash programı /bin/bash değilde farklı bir yerde ise scriptlerin başına o değer yazılmalıdır. Linux altında bir programın hangi dizin altında olduğunu which komutu ile bulabiliriz. $ which bash /bin/bash Scriptimizi kaydettikten sonra çalıştırma hakkı verelim. Bunun için Linux dünyasında chmod komutu kullanılır. Scriptimizi hello.sh adı ile kaydettiğimizi varsayarsak aşağıdaki komut ile scriptimize çalıştırma hakkı vermiş oluruz. 1

$ chmod 700 hello.sh $./hello.sh Merhaba Dunya! Çevresel Değişkenler Her işletim sistemi çeşitli amaçlarla kullanılmak üzere çevresel değişkenlere sahiptir. Linux gibi sistem yönetiminin çoğunlukla komut satırından yapıldığı sistemlerde bu değişkenlerin önemi bir kat daha fazladır. Linux altında sık kullanılan çevresel değişkenler ve manaları: HOME USER PS1 = O anki kullanıcının ev dizinini gösterir = O anki kullanıcının kim olduğunu gösterir = Kullanıcının komut satırındaki işaret( huzeyfe@ linux $ gibi) SHELL = Kullanıcının komut yürttüğü kabuk ismi Çevresel değişkenleri aynı normal değişkenler gibi kullanabiliriz. #echo $HOME /root $echo $SHELL /bin/bash Çevresel Değişken tanımlama Çevresel değişkenler işletim sistemi kurulumu ile birlikte hazır geleceği gibi kendimizde tanımlayabiliriz ve devamlı kullanım için kaydedebiliriz. Mesela YASAK_BOLGE diye bir çevresel değişken tanımlayıp bunu tüm programlar için geçerli kılmak istersek aşağıdaki komut işimizi görecektir. $export YASAK_BOLGE= /home/huzeyfe/tools/security Bu yaptığımız tanımlamalar sistemin bir sonraki açılışında kaybolacaktır, kalıcı hale getirmek için /etc/bashrc ya da kendi ev dizinimizdeki.bashrc dosyasına yazmalıyız. Değişkenler Programlama dillerinin vazgeçilmez öğelerinden biri değişkenlerdir. Bash ile birlikte değişken tanımı ve kullanımı oldukça kolaydır. Diğer dillerden farklı olarak tanımladığımız değişkenin tipinin belirtilmesine gerek yoktur, değişkenin kullanıldığı yere göre tipi belirlenir. $ adim= Huzeyfe ONAL $echo $adim Huzeyfe ONAL Aynı değişkeni $adim= Huzeyfe ONAL seklinde de yapabilirdik. Değişken kullanırken çift tırnak ( ) ya da tek tırnak( ) kullanmanın farkı : arasında kullanacağımız bazı özel karekterler BASH tarafından farklı komutmuş gibi işlem görecektir. Mesela bash için! karekterinin özel bir anlamı vardır ve biz bu karekteri arasında kullanırsak ekrana! karekteri basılmazda! karekterinin bash için ifade ettiği değer basılır. Bu tip hatalardan kaçınmak için yeri geldiğinde tek tırnak ( ) kullanılır. Çift tırnağın aksine tek tırnak arasında aldığı tüm karekterleri olduğu gibi yansıtır. Komut çıktısını değişkene atama Linux altında herhangi bir komutun çıktısı sonradan kullanmak amacıyla değişkene atılabilir. Çalıştırılan komutu () arasına alarak ve başına $ işareti koyarak değişkene atama yapar ve istediğimiz yerde kullanabiliriz, nasıl mı? Örnek; MYFILES=$(ls /etc grep ab) 2

$ echo $MYFILES crontab entropychatdisable fstab inittab mtab quotatab updfstab İlk satırda /etc dizini listelenerek içerisinde ab kelimesi(birleşik ab karekterleri) geçen tüm dosyalar MYFILES değişkenine atanıyor. Sonraki satırda ise bu değişkenin içeriği ekrana basılıyor. İlk satırdaki karekteri Linux dünyasında pipe olarak geçer ve bir komutun çıktısını bir sonraki komuta girdi olarak aktarmaya yarar, yani ls /etc/nin çıktısı grep komutuna parametre olarak aktarılmış Özel Değişkenler. Bash ile programlama yaparken kullanabileceğimiz bazı özel değişkenler vardır. Bunları kullanmak için tanımlamamız gerekmez. Mesela bu değişkenlerden {IcerikVeri} çalışan programın adını verirken ilk parametreyi, 2. parametreyi ve $# değişkeni de toplam parametre sayısını gösterir. echo program ismi= {IcerikVeri} echo ilk parametre= echo ikinci parametre=n echo Toplam parametre sayisi=$# $./test.sh parametre_1 parametre_2 program ismi=test.sh ilk parametre= parametre_1 ikinci parametre= parametre_2 Toplam parametre sayisi=3 Kullanıcı ile iletişim Yazacağımız scriptlerde bazen kullanıcı ile iletişim gerekir, bu durumda read komutunu kullanarak kullanıcıdan bilgi alır ve bu bilgiyi bir değişkene atayarak kullanabiliriz. Basit bir etkileşim scripti; #!/bin/sh echo n Adinizi Giriniz: read name echo Merhaba $name! Scriptimize ad.sh olarak adlandırıp çalıştıralım $chmod 700 ad.sh $./ad.sh Adinizi Giriniz: Engin KUŞAK Merhaba Engin KUŞAK! Read komutuna t parametresi vererek kullanıcının belirli bir süre içinde giriş yapmasını sağlayabiliriz. Eğer belirlene sürede kullanıcı herhangi bir şey girmezse bir sonraki adım işleme sokulur yani kullanıcı hakkını kaybetmiş olur. Benzer şekilde kullanıcının girdiği verileri ekrana yazmak istemezsek mesela parola gibi- read komutunu s parametresi ile denemeliyiz. Örnek; echo -n 3 saniye icinde giris yapmalisiniz! > if read -t 3 response; echo Basarilar, 3 saniyeyi gecirmediniz 3

echo Biraz daha hizli yazmalisiniz! echo -n Kullanici Adiniz: read -t 4 user echo -n Parolaniz : read -s parola echo $user kullanicisi ve $parola sifresi ile sisteme giris yaptiniz! $./a.sh 3 saniye icinde giris yapmalisiniz! > aa1133 Basarilar, 3 saniyeyi gecirmediniz Kullanici Adiniz:engin Parolaniz : elifsu kullanicisi ve Deneme123 sifresi ile sisteme giris yaptiniz! Aritmetik işlemler Temel 4 işlemi kullanarak bash altında ileri düzey matematik işlemleri yapabiliriz. Bash altında aritmetik işlemler için $(()) yapısı kullanılır. Örnekler; $ echo $(( 100 / 3 )) 33 $ myvar= 56 $ echo $(( $myvar + 12 )) 68 x=8 y=4 z=$(($x + $y)) echo $x + $y toplami= $z Tek mi, Çift mi Scripti Aşağıdaki script kullanıcıdan sayı girmesini bekler ve girilen sayının tek mi, çift mi olduğunu bulur. Bu basit örnekleri geliştirmek mümkündür number=0 echo -n Bir sayi girini > read number 4

echo Girdiginiz Sayi $number if [ $((number % 2)) -eq 0 ]; echo Girdiginiz sayi cifttir echo Girdiginiz sayi tektir. scripti sayi.sh olarak kaydedip çalıştıralım. $./sayi.sh Bir sayi girini > 9 Girdiginiz Sayi 9 Girdiginiz sayi tektir. $./sayi.sh Bir sayi girini > 24440 Girdiginiz Sayi 24440 Girdiginiz sayi cifttir IF Koşul Deyimi Hemen her programlama dilinde kendine yer bulan IF yapısı bash programlamada da karşımıza çıkıyor. Basitce bir şarta bağlı olarak program işletmeye yarayan IF yapısı scriptlerimizi daha kontrollü yazmamıza olanak sağlıyor. Bash scriptlerindeki temel if yapısı aşağıdıdaki gibidir; if [ şart ] program_govdesi daha gelişmiş bir if yapısı ise if, elif ve den oluşur. if [ koşul ] komutlar elif [ koşul2 ] komutlar_2 elif [ koşul3 ].. 5

komutlar_x Bu yapı ile biraz daha gelişmiş koşullu yapılar kullanabiliriz. İlk uyan elif koşulundan sonra program if yapısını terkeder. Eğer if ya da elif şartlarından birine uymazsa sıra ye gelir ve burada verilen komut uygulanır. Örnek; if [ "$sayi" -eq 3 ] echo sayi 3 e esittir 3 if [ "$sbt" = "3" ] echo sbt degeri 3 dur ilk örnekde aritmetik bir karşılaştırma yapılırken ikinci örnekte string karşılaştırması yapılıyor. String karşılaştırma işlemlerinde değişken ve karşılaştırma yapılan taraf mutlaka arasında verilmelidir, aksi takdirde hata alabilirsiniz. İlişkisel Operatörler Bir önceki aritmetik if örneğinde eq ifadesi kullandık, peki ne işe yarar bu eq ve benzeri ifadeler? Bu ifadeler bash programlamada kullanılan özel karşılaştırma operatörleridir ve her birinin anlamı vardır. (Ingilizce). Aritmetik karşılaştırmalar için kullanılan bu operatörlerden bazıları ve anlamları; -eq Eşittir -lt küçüktür -gt büyüktür -ge büyük eşittir -le küçük eşittir Dosya İlişkili Operatörler -f le Dosya siradan bir dosya mi -r le Dosya var ve okunabilir durumda mi -w le Dosya var ve yazılabilir durumda mi -x le Dosya var ve çalıştırılabilir durumda mi -d le Hedef dosya bir dizin mi -s le Hedef dosyanın boyutu sıfırdan büyük mü -a VE işlemi için kullanılır. -o VEYA işlemi için kullanılır if [ -n "$str1" -a -n "$str2" ] 6

echo $str1 ve $str2 boştur Örnek; if [ $var = "Yes" ] echo Deger = Yes elif [ $var = "No" ] echo Deger= No echo Gecersiz Deger.. Case Yapısı Case yapısı if-- yapısının biraz gelişmiş versiyonudur. Bir değişkene ait çoklu seçim vardır ve bu seçimlerden her biri farklı bir değeri temsil etmektedir. Hangi değişken şarta uyduysa o değişkenin temsil ettiği komut yürütülür. Eğer herhangi bir koşula uymazsa *) ile başlayan satırdaki komut devreye girer. Case temel yapısı; case seçenek in durum1) komutlar ;; durum2) komutlar ;; durum3) komutlar ;; *) komut_x esac Takvim Örneği; Aşağıdaki script ayları ve isimleri eşleştirmiştir. Bu scripti geliştirip kullanıcıdan ay ı sayı olarak girmesini isteyip karşılığını yazdırabiliriz. #!/bin/sh case in 01 1) echo Month is January ;; 02 2) echo Month is February ;; 03 3) echo Month is March ;; 04 4) echo Month is April ;; 05 5) echo Month is May ;; 06 6) echo Month is June ;; 07 7) echo Month is July ;; 7

08 echo Month is August ;; 09 9) echo Month is September ;; 10) echo Month is October ;; 11) echo Month is November ;; 12) echo Month is December ;; *) echo Gecersiz Parametre!! ;; esac NOT: Her satırın sonuna ;; eklemezsek program uyduğu case koşulunu değil tüm koşulları ekrana basacaktır Sayı bulmaca Scripti; echo -n 1 ile 3 arasinda bir sayi giriniz > read character case $character in 1 ) echo Bir girdiniz. ;; 2 ) echo Iki girdiniz.. ;; 3 ) echo Uc girdiniz. ;; * ) echo bir ile uc arasinda bir deger girmediniz! Esac Aynı scripti if yapısı kullanarak yazmak isteseydik aşağıdaki gibi olacaktı. Her iki scripti incelersek if ile case arasında farkı daha iyi anlamış oluruz echo -n ile 3 arasinda bir sayi giriniz > read character if [ "$character" = "1" ]; echo Bir Girdiniz. if [ "$character" = "2" ]; echo Iki girdiniz.. if [ "$character" = "3" ]; echo Uc girdiniz 8

echo Yanlis deger girdiniz. For, while Döngüleri Bir işi belirli sayıda ya da belirli koşula kadar yapmak için kullanılan for-while döngüleri programlama dillerinin vazgeçilmez kalasik öğelerinden biridir. Hiç unutmuyorum ilk programlama dersi aldığımız zamanlarda henuz for yapısını öğrenmemiştik ve hoca ekrana 1 den 100 e kadar sayıların çıktısını yazdırmamızı istemişti. Tabii haliyle döngü nedir bilmediğimiz için biraz düşünüp : ne var bunda, alt atla yazariz demiştik..bir müddet sonra hocamız bizim programımızı incelemeye geldiğinde kendisini gülmekten alamamıştı ve Ya bine kadar yazın desem ne yapacaksınız çocuklar demişti. Sonraki ders döngüler idi ve biz can kulağı ile dersi dinliyorduk. Temel For yapısı; For degisken in Do Komutlar.. Örnek; for aylar in Ocak Subat Mart nisan Mayis Haziran temmuz Agustos do echo $aylar script çalıştırıldığında sırası ile Ocak subat okuyarak ekrana basacaktır. Bir diğer örnekle konuyu pekiştirelim: /etc/ dizininde r ile başlayan tüm dosyalar listelenerelk aralarında dizin özelliği taşıyanlar ekrana dizin adı (dir), dizin özelliği taşımayanlar ise dosya_adi (le ) şekilde yazdırılacaktır. for myle in /etc/r* do if [ -d "$myle" ] echo $myle (dir) 9

echo $myle (le) Sistemdeki kullanıcıları Listeleme Scripti /etc/passwd dosyasında bulunan kullanıcıları listelemek için aşağıdaki scripti kullanabiliriz. Script içerisinde kullanılan awk bash gibi bir script dilidir ve script içerisindeki görevi /etc/passwd dosyasındaki satırları : karekterine göre ayrıştırıp ilk kolonu seçmektir. PASSWD_FILE=/etc/passwd a=1 for name in $(awk -F: {print } < $PASSWD_FILE ) do echo USER $a = $name let a += 1 exit 0 $chmod 700 user.sh $./user.sh USER #1 = root USER #2 = daemon USER #3 = operator USER #4 = bin USER #5 = smmsp USER #6 = popa3d USER #7 = sshd USER #8 = _portmap USER #9 = _identd While, until Kullanımı Koşul tuttuğu sürece ve koşul gerçekleşene kadar işlem yap mantığı ile çalışan while ve Until yapısı bash altında kullanabileceğimiz döngü çeşitlerindendir. Temel While yapısı; while [ koşul ] do işlemler myvar=0 while [ $myvar -ne 10 ] 10

do echo $myvar myvar=$(( $myvar + 1 )) myvar değişkeninin 0 a eşitle ve karşılaştırmaya başla, değişken 10 olmadığı müddetçe ekrana değişkenin değerini yaz ve değerini bir artır. until while in tam tersi denilebilir. Aşağıdaki örnekte değşkenimiz 10 olana dek ekrana yaz diyoruz. myvar=0 until [ $myvar -eq 10 ] do echo $myvar myvar=$(( $myvar + 1 )) Fonksiyonlarla işlemler Programımız içinde sık kullanacağımız bazı yapıları bir düzen altında tanımlayarak devamlı kullanabiliriz. Mesela programımız içerisinde kullanıcıdan veri alacak bir bölüm olsun ve biz bu bölümü birden fazla yerde kullanmak isteyelim, normalde her kullanacağımız yerde gidip aynı şeyleri yazmamız gerekecekti. Oysa bu bloğu fonksiyon olarak tanımlarsak kullanmamız gereken yerde sadece fonksiyonu adıyla çağırmamız yeterlidir. Temel Fonksiyon Yapısı; Bash programlamada iki çeşit fonksiyon tanımı yapılabilir. function fonksiyon_adi { komutlar } ya da fonksiyon_adi () { komutlar } Örnek; # ekrana hello yazmak için kullanılan fonksiyon hello() { echo Su an hello() fonksiyonunu cagirdiniz.. } echo hello() fonksiyonu cagriliyor.. hello #Diger tanimlama yontemi function hello() { echo hello() fonksiyonunu cagirdiniz.. } NOT:Fonksiyonlar kullanılmadan önce tanımlanmalıdır. 11

Fonksiyon tanımlarken dikkat edeceğimiz bir husus. Normal dillerde fonksiyon içinde tanımlanan değişken sadece o fonksiyon içerisinde geçeli olurdu. Halbuki bash de fonksiyon içinde tanımlanan değişken tüm program boyunca aktif olur. Bunu engellemek yani fonksiyon içinde tanımlanan değişkenin ömrünü fonksiyon ile sınırlamak istersek local değişken tanımı kullanırız. Local degisken= bu degisken yereldir gibi Degisken=100 Function hesaplama { Local degisken=50 Echo -n Bir sayi giriniz: Read sayi Echo sayi+degisken=$(( $sayi + $degisken )) } hesaplama Scripti çalıştırılırsa ekrana Sayi+degisken=50+girdiğiniz_değer yazacaktır. Fonksiyon, until karışımı bir örnek; function press_enter { echo echo -n Press Enter to continue read clear } selection= until [ "$selection" = "0" ]; do echo echo PROGRAM MENU echo 1 Bos Disk alanini Goruntule echo 2 Bos bellek alanini Goruntule echo echo 0 Programdan cikis echo echo -n Seciminizi Giriniz: read selection echo 12

case $selection in 1 ) df ; press_enter ;; 2 ) free ; press_enter ;; 0 ) exit ;; * ) echo Lutfen 1, 2, ya d a0 degerini giriniz ; press_enter esac Diziler Diziler benzer özellikteki değişkenleri gruplamaya yarar. Mesela yılın aylarını bir diziye atayarak bu diziye ay adını verirsek elimizde 12 elemanlı bir dizi olur. Aylar=(Ocak Subat Mart nisan Mayis Haziran Temmuz Agustos Eylul Ekim Kasim Aralik ) 12 elemanlı bir dizi. Dizilerin indisi 0 dan başlar yani aylar dizisine bakacak olursak dizinin ilk elemanı aylar[0] dır. array=( zero one two three four ve ) echo ${array[0]} # sir echo ${#array[*]} # 6 # dizide kac eleman oldugu Kaynak www.webkiler.com/bilgi/ 13