bashkomutlari.pdf

download bashkomutlari.pdf

of 20

Transcript of bashkomutlari.pdf

  • 8/16/2019 bashkomutlari.pdf

    1/20

    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 ra!ik arabirimler diğeri de konsol"s#ell olarak adlandırabileceğimizkomut satırı y$netimidir.

    %abuk &roramlamada aslında konsoldan verilen komutları belirli bir düzene uyarak çalıştırmaktanibarettir. 'ani konsoldan çalıştırdığımız komutları bir dosyaya sırası ile yazarak en basitinden birs#ell scri&t yazmış oluruz. (abiki belirli amaçlara y$nelmiş &roramlar için !onksiyon) dizi )d$nüler ibi da#a üst düzey ya&ılar kullanmamız erekebilir ki *bas#+ bunları !azlasıylasağlamaktadır.

     

    %od yazmaya başlamadan bir ek da#a ya&alım. 'azı boyunca kodladığımız $rnekleri sizlerde#er#ani bir Linux altında yazı& çalıştırabilirsiniz. ,dit$r olarak %-, altında %edit) Gnome altındaGedit kullanmanızı tavsiye ederim. ,er #er işimi konsoldan ya&mak istiyorum derseniz &ico) nanoya da i ibi konsol tabanlı edit$rleri de kullanmayı deneyebilirsiniz.

     

    ,ğer elinizin altında #ali#azırda bir Linux"U/I0 yoksa ve kuracak durumda da değilseniz internetüzerinden ücretsiz olarak 1#ell #esabı sağlayan !irmalardan bir #esa& edinerek $rnek kodları

    deneyebilirsiniz. #tt&2""333.ducta&e.net"4mit5a"!reeunix.s#tml adresi çeşitli Linux ve U/I0sistemler üzerinde ücretsiz olarak s#ell #esabına sa#i& olmak isteyenler için iyi bir başlanıçnoktası. Buradan bir #esa& edindikten sonra 6utty 117 &roramı ile sunucunuza bağlanarak $rnekkodları çalıştırabilirsiniz.

     

    La!ı !azla uzatmadan &roramlama dünyasının o meş#ur ilk &roramı ile kodlamaya başlayalım..,vet) *7ello 8orld9 * " *:er#aba dünya9+ &roramından ba#sediyorum.

    ;9"bin"bas#ec#o *:er#aba -unya9<

     

    B$ylece ilk s#ell scri&t=betik>imizi yazmış olduk. 'ukarıdaki basit &roramda dikkatimizi çeken birsatır var #!/bin/bash) bu satır sonraki alt satırların #ani kabuk tara!ından yorumlanacağını bildirenstandart bir tanımdır ve #er bas# scri&tinde olmalıdır. ,ğer bas# &roramı "bin"bas# değilde !arklı

     bir yerde ise scri&tlerin başına o değer yazılmalıdır. Linux altında bir &roramın #ani dizin altındaolduğunu 3#ic# komutu ile bulabiliriz.

     ? 3#ic# bas#

    http://www.ductape.net/~mitja/freeunix.shtmlhttp://www.ductape.net/~mitja/freeunix.shtml

  • 8/16/2019 bashkomutlari.pdf

    2/20

    "bin"bas#

     

    1cri&timizi kaydettikten sonra çalıştırma #akkı verelim. Bunun için Linux dünyasında c#modkomutu kullanılır. 1cri&timizi #ello.s# adı ile kaydettiğimizi varsayarsak aşağıdaki komut ilescri&timize çalıştırma #akkı vermiş oluruz.

     

    $ chmod 700 hello.sh

    $./hello.sh

     Merhaba Dunya!

     

    Çevresel Değişkenler

     

    7er işletim sistemi çeşitli amaçlarla kullanılmak üzere çevresel değişkenlere sa#i&tir. Linux ibisistem y$netiminin çoğunlukla komut satırından ya&ıldığı sistemlerde bu değişkenlerin $nemi birkat da#a !azladır.

    Linux altında sık kullanılan çevresel değişkenler ve manaları2

     

    7@:, A @ anki kullanıcının ev dizinini $sterir 

    U1, A @ anki kullanıcının kim olduğunu $sterir 

    61C A %ullanıcının komut satırındaki işaret= #uzey!eD linux ? ibi>

    17,LL A %ullanıcının komut yürttüğü kabuk ismi

     

    Eevresel değişkenleri aynı normal değişkenler ibi kullanabiliriz.

     

    #echo $HOM

      /root 

     

    $echo $H""

      /bin/bash

     

  • 8/16/2019 bashkomutlari.pdf

    3/20

     

    Çevresel Değişken tanmlama

     

    Eevresel değişkenler işletim sistemi kurulumu ile birlikte #azır eleceği ibi kendimizdetanımlayabiliriz ve devamlı kullanım için kaydedebiliriz.

    :esela 'F1F%B@LG, diye bir çevresel değişken tanımlayı& bunu tüm &roramlar için eçerlikılmak istersek aşağıdaki komut işimizi $recektir.

     

    ?ex&ort 'F1F%B@LG,A+"#ome"#uzey!e"tools"security+

     

    Bu ya&tığımız tanımlamalar sistemin bir sonraki açılışında kaybolacaktır) kalıcı #ale etirmek için"etc"bas#rc ya da kendi ev dizinimizdeki .bas#rc dosyasına yazmalıyız.

     

    Değişkenler

     

    6roramlama dillerinin vazeçilmez $ğelerinden biri değişkenlerdir. Bas# ile birlikte değişkentanımı ve kullanımı oldukça kolaydır. -iğer dillerden !arklı olarak tanımladığımız değişkeninti&inin belirtilmesine erek yoktur) değişkenin kullanıldığı yere $re ti&i belirlenir.

     

    ? adimA H7uzey!e @/FL

     

    ?ec#o ?adim

      Huzeyfe ONAL

     

    Fynı değişkeni $adim=”Huzeyfe ONAL” seklinde de ya&abilirdik. -eğişken kullanırken çi!ttırnak =* +> ya da tek tırnak=H > kullanmanın !arkı 2 * + arasında kullanacağımız bazı $zelkarekterler BF17 tara!ından !arklı komutmuş ibi işlem $recektir . :esela bas# için 9 karekterinin$zel bir anlamı vardır ve biz bu karekteri * * arasında kullanırsak ekrana 9 karekteri basılmazda 9karekterinin bas# için i!ade ettiği değer basılır. Bu ti& #atalardan kaçınmak için yeri eldiğinde tektırnak =H H> kullanılır. Ei!t tırnağın aksine tek tırnak arasında aldığı tüm karekterleri olduğu ibiyansıtır.

     

    omut %ktsn &eğişkene atama

     

    Linux altında #er#ani bir komutun çıktısı sonradan kullanmak amacıyla değişkene atılabilir.

  • 8/16/2019 bashkomutlari.pdf

    4/20

    Ealıştırılan komutu => arasına alarak ve başına ? işareti koyarak değişkene atama ya&ar veistediğimiz yerde kullanabiliriz) nasıl mıJ

     

    Krnek

     

    MYFILES=$(ls /etc | grep ab)

     

    $ echo $MYFILES

    crontab  entropychatdisab le fstab  inittab  mtab  quotatab  updfstab 

     

    Mlk satırda "etc dizini listelenerek içerisinde ab kelimesi=birleşik ab karekterleri> eçen tüm dosyalar:'NIL,1 değişkenine atanıyor. 1onraki satırda ise bu değişkenin içeriği ekrana basılıyor. Mlksatırdaki *' * karekteri Linux dünyasında &i&e olarak eçer ve bir komutun çıktısını bir sonrakikomuta irdi olarak aktarmaya yarar) yani ls "etc"nin çıktısı re& komutuna &arametre olarakaktarılmış

     

    ()el Değişkenler*

     

    Bas# ile &roramlama ya&arken kullanabileceğimiz bazı $zel değişkenler vardır. Bunları kullanmakiçin tanımlamamız erekmez. :esela bu değişkenlerden ?O çalışan &roramın adını verirken ?C ilk

     &arametreyi ) ?P P. &arametreyi ve ?; değişkeni de to&lam &arametre sayısını $sterir.

     

    ;9"bin"bas#

    ec#o *&roram ismiA ?O+

    ec#o *ilk &arametreA ?C*

    ec#o *ikinci &arametreA?Pn+

    ec#o *(o&lam &arametre sayisiA?; *

     

    $ */test*sh parametre+, parametre+-

      program ismi=test.sh

      ilk parametre= parametre!

      ikin"i parametre= parametre#

      oplam parametre sayisi=%

     

  • 8/16/2019 bashkomutlari.pdf

    5/20

    ullanc ile iletişim

     

    'azacağımız scri&tlerde bazen kullanıcı ile iletişim erekir) bu durumda read komutunu kullanarakkullanıcıdan bili alır ve bu biliyi bir değişkene atayarak kullanabiliriz.

    Basit bir etkileşim scri&ti

     

    #!/bin/sh

    echo –n "Adinizi Giiniz "

    ed nme

    echo "Mehb $nme !"

     

    1cri&timize ad.s# olarak adlandırı& çalıştıralım

     

    $chmo& . a&*sh

     

    $*/a&*sh

     Adinizi &iriniz' Huzeyfe ONAL

     (erhaba Huzeyfe ONAL )

     

    ead komutuna Qt &arametresi vererek kullanıcının belirli bir süre içinde iriş ya&masınısağlayabiliriz. ,ğer belirlene sürede kullanıcı #er#ani bir şey irmezse bir sonraki adım işlemesokulur yani kullanıcı #akkını kaybetmiş olur. Benzer şekilde kullanıcının irdiği verileri ekranayazmak istemezsek Qmesela &arola ibiR read komutunu Qs &arametresi ile denemeliyiz.

     

    (rnek 

     

    ;9"bin"bas#

    ec#o Rn

  • 8/16/2019 bashkomutlari.pdf

    6/20

    read Rt user

    ec#o Rn

  • 8/16/2019 bashkomutlari.pdf

    7/20

     

    1ek mi2 Çi3t mi cripti

     

    Fşağıdaki scri&t kullanıcıdan sayı irmesini bekler ve irilen sayının tek mi) çi!t mi olduğunu bulur.Bu basit $rnekleri eliştirmek mümkündür 

     

    ;9"bin"bas#

     

    numberAO

     

    ec#o Rn ReZ O [ t#en

      ec#o

  • 8/16/2019 bashkomutlari.pdf

    8/20

    56 oşul De4imi

     

    7emen #er &roramlama dilinde kendine yer bulan IN ya&ısı bas# &roramlamada da karşımıza

    çıkıyor. Basitce bir şarta bağlı olarak &roram işletmeye yarayan IN ya&ısı scri&tlerimizi da#akontrollü yazmamıza olanak sağlıyor.

     

    Bas# scri&tlerindeki temel i! ya&ısı aşağıdıdaki ibidir

     

    i "art #

    then

      prgra%&g'esi

    i

     

    da#a elişmiş bir i! ya&ısı ise i!) eli! ve elseden oluşur.

     

    i "ul #

    then

    %utlar

    eli "ul* #

    then

      %utlar&*

    +

    +

     

    eli "ul, #

    then

    ++

    else

      %utlar&-

    i

  • 8/16/2019 bashkomutlari.pdf

    9/20

     

    Bu ya&ı ile biraz da#a elişmiş koşullu ya&ılar kullanabiliriz. Mlk uyan eli! koşulundan sonra &roram i! ya&ısını terkeder. ,ğer i! ya da eli! şartlarından birine uymazsa sıra elseye elir ve burada verilen komut uyulanır.

     

    Krnek

     

    i .$sayi. e0 , #

    then

    ech .sayi ,1e esittir ,.

    i

     

    i .$sbt. = .,. #

    then

      ech .sbt egeri ,1ur.

    i

     

    ilk $rnekde aritmetik bir karşılaştırma ya&ılırken ikinci $rnekte strin karşılaştırması ya&ılıyor.1trin karşılaştırma işlemlerinde değişken ve karşılaştırma ya&ılan tara! mutlaka * + arasındaverilmelidir) aksi takdirde #ata alabilirsiniz.

     

    7lişkisel Operat8rler

     

    Bir $nceki aritmetik i! $rneğinde QeZ i!adesi kullandık) &eki ne işe yarar bu QeZ ve benzerii!adelerJ Bu i!adeler bas# &roramlamada kullanılan $zel karşılaştırma o&erat$rleridir ve #er birininanlamı vardır. =Inilizce>.

     

    Fritmetik karşılaştırmalar için kullanılan bu o&erat$rlerden bazıları ve anlamları

     

    e   E"ittir

    l  232t2r

  • 8/16/2019 bashkomutlari.pdf

    10/20

    1  b2y2t2r

    1e  b2y2 e"ittir

    le  232 e"ittir

     

    2os' 3li45ili 6e8le

     

    9 9ile  Dsya siraan bir sya %i

    9ile  Dsya 'ar 'e unabilir uru%a %i

    : 9ile  Dsya 'ar 'e ya45labilir uru%a %i

    ; 9ile  Dsya 'ar 'e 3al5"t5r5labilir uru%a %i

    d 9ile  6ee sya bir i4in %i

    s 9ile  6ee syan5n byutu s55ran b2y2 %2

     

      

    hen

      echo ? $s (e $s- bo4@?

    9i

    (rnek9

     

    \i $'ar = .Yes. #

    then

      ech .Deger = Yes.

    eli $'ar = .7. #

      then

      ech .Deger= 7.

    else

  • 8/16/2019 bashkomutlari.pdf

    11/20

      ech .8ecersi4 Deger++.

    i

     

    :ase ;aps

     

    ]ase ya&ısı i!Rt#enRelse ya&ısının biraz elişmiş versiyonudur. Bir değişkene ait çoklu seçim vardırve bu seçimlerden #er biri !arklı bir değeri temsil etmektedir. 7ani değişken şarta uyduysa odeğişkenin temsil ettiği komut yürütülür. ,ğer #er#ani bir koşula uymazsa ^> ile başlayan satırdakikomut devreye irer.

     

    ]ase temel ya&ısı 

    case  se4enek  in durumC> komutlar durumP> komutlar durumS> komutlar ^> komutx

    esac

     

    1akvim (rneği9

     

    Fşağıdaki scri&t ayları ve isimleri eşleştirmiştir. Bu scri&ti eliştiri& kullanıcıdan ayı sayı olarakirmesini isteyi& karşılığını yazdırabiliriz.

     

    9!/bin/sh

     

    :

    :

    case $; in

      >

      >

  • 8/16/2019 bashkomutlari.pdf

    12/20

      >

     

  • 8/16/2019 bashkomutlari.pdf

    13/20

    Fynı scri&ti i! ya&ısı kullanarak yazmak isteseydik aşağıdaki ibi olacaktı. 7er iki scri&ti incelerseki! ile case arasında !arkı da#a iyi anlamış oluruz

     

    9!/bin/bash

     

    ech n . ile , arasina bir sayi girini4 .

    rea character

    i .$character. = .;. #> then

      ech .Jir 8irini4+.

    else

      i .$character. = .*. #> then

      ech .Ii girini4++.

      else

      i .$character. = .,. #> then

      ech .Kc girini4+++.

      else

      ech .Yanlis eger girini4+.

     

    i

      i

    i

     

    6or2 ?hile D8ng>leri

     

    Bir işi belirli sayıda ya da belirli koşula kadar ya&mak için kullanılan !orR3#ile d$nüleri &roramlama dillerinin vazeçilmez kalasik $ğelerinden biridir. 7iç unutmuyorum ilk &roramlamadersi aldığımız zamanlarda #enuz !or ya&ısını $ğrenmemiştik ve #oca ekrana Cden COOe kadarsayıların çıktısını yazdırmamızı istemişti. (abii #aliyle d$nü nedir bilmediğimiz için birazdüşünü& 2 * ne var bunda ) alt atla yazariz demiştik+..Bir müddet sonra #ocamız bizim &roramımızıincelemeye eldiğinde kendisini ülmekten alamamıştı ve *'a bine kadar yazın desem neya&acaksınız çocuklar demişti+ . 1onraki ders d$nüler idi ve biz can kulağı ile dersi dinliyorduk.

  • 8/16/2019 bashkomutlari.pdf

    14/20

     

    (emel Nor ya&ısı

     

    6or degisken in

      Do -omutlar ..

    &one

     

    Krnek

     

    9!/bin/bash

    r aylar in ca Subat Mart nisan Mayis 6a4iran te%%u4 @gusts

      ech $aylar

    ne

     

    scri&t çalıştırıldığında sırası ile @cak subat ... okuyarak ekrana basacaktır.

     

    Bir diğer $rnekle konuyu &ekiştirelim2 "etc" dizininde r ile başlayan tüm dosyalar listelenerelkaralarında *dizin+ $zelliği taşıyanlar ekrana dizin adı =dir>) dizin $zelliği taşımayanlar isedosyaadi =!ile > şekilde yazdırılacaktır.

     

    9!/bin/bash

     

    r %yile in /etc/rG

      i .$%yile. #

    then

      ech .$%yile (ir).

      else

      ech .$%yile (ile)

  • 8/16/2019 bashkomutlari.pdf

    15/20

      i

    ne

     

    istem&eki kullanclar "isteleme cripti

     

    "etc"&ass3d dosyasında bulunan kullanıcıları listelemek için aşağıdaki scri&ti kullanabiliriz. 1cri&tiçerisinde kullanılan a3k bas# ibi bir scri&t dilidir ve scri&t içerisindeki $revi "etc"&ass3ddosyasındaki satırları 2 karekterine $re ayrıştırı& ilk kolonu seçmektir.

     

    ;9"bin"bas#

    6F118-NIL,A"etc"&ass3d

    aAC

    !or name in ?=a3k RN2 _`&rint ?C_

  • 8/16/2019 bashkomutlari.pdf

    16/20

    @hile 2 until ullanm

     

    *%oşul tuttuğu sürece ve koşul erçekleşene kadar işlem ya& * mantığı ile çalışan 3#ile ve Untilya&ısı bas# altında kullanabileceğimiz d$nü çeşitlerindendir.

     

    (emel 8#ile ya&ısı

     

    hile koşul #

      işlemler 

    ne

     

    ;9"bin"bas#

    %y'ar=<

    hile $%y'ar ne ;< #

      ech $%y'ar

      %y'ar=$(( $%y'ar N ; ))

    ne

     

    myvar değişkeninin Oa eşitle ve karşılaştırmaya başla) değişken CO olmadığı müddetçe ekranadeğişkenin değerini yaz ve değerini bir artır.

     

    until 3#ilein tam tersi denilebilir. Fşağıdaki $rnekte değşkenimiz CO olana dek ekrana yaz diyoruz.

     

    ;9"bin"bas#

    %y'ar=<

    until $%y'ar e0 ;< #

  • 8/16/2019 bashkomutlari.pdf

    17/20

      ech $%y'ar

      %y'ar=$(( $%y'ar N ; ))

    ne

     

    6onksi4onlarla işlemler

     

    6roramımız içinde sık kullanacağımız bazı ya&ıları bir düzen altında tanımlayarak devamlıkullanabiliriz. :esela &roramımız içerisinde kullanıcıdan veri alacak bir b$lüm olsun ve biz bu

     b$lümü birden !azla yerde kullanmak isteyelim) normalde #er kullanacağımız yerde idi& aynışeyleri yazmamız erekecekti. @ysa bu bloğu !onksiyon olarak tanımlarsak kullanmamız erekenyerde sadece !onksiyonu adıyla çağırmamız yeterlidir.

     

    1emel 6onksi4on ;aps9

     

    Bas# &roramlamada iki çeşit !onksiyon tanımı ya&ılabilir.

     

    3unction fonksiyon_Adi `komutlar 

    ya da

    fonksiyon_adi => `komutlar 

    Krnek

    ;9"bin"bas#; ekrana #ello yazmak için kullanılan !onksiyon#ello=>`  ec#o !onksiyonunu cairdiniz..<

    ec#o !onksiyonu cariliyor..<#ello

    ;-ier tanimlama yontemi

    !unction #ello=>`

      ec#o !onksiyonunu cairdiniz..<

     

  • 8/16/2019 bashkomutlari.pdf

    18/20

  • 8/16/2019 bashkomutlari.pdf

    19/20

     

    selectin=

    until .$selectin. = .

      ech ..

      ech .HQ8Q@M ME7K.

      ech .; R Js Dis alanini 8runtule

      ech .* R Js belle alanini 8runtule

      ech ..

      ech .< R Hrgra%an ciis

      ech ..

      ech n Seci%ini4i 8irini4T

      rea selectin

      ech ..

      case $selectin in

      ; ) > press&enter >>

      * ) ree > press&enter >>

      < ) e-it >>

      G ) ech .Luten ;U *U ya a< egerini girini4> press&enter

      esac

    ne

     

    Di)iler

     

    -iziler benzer $zellikteki değişkenleri ru&lamaya yarar. :esela yılın aylarını bir diziye atayarak bu diziye ay adını verirsek elimizde CP elemanlı bir dizi olur.

     

    FylarA=@cak 1ubat :art nisan :ayis 7aziran (emmuz Fustos ,ylul ,kim %asim Fralik >

    CP elemanlı bir dizi. -izilerin indisi Odan başlar yani aylar dizisine bakacak olursak dizinin ilkelemanı aylarXO[ Hdır.

  • 8/16/2019 bashkomutlari.pdf

    20/20

     

    array=( 4er ne t three ur i'e )

    ech $Oarray