bashkomutlari.pdf
-
Upload
akdenizerdem -
Category
Documents
-
view
218 -
download
0
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