Jump to content
Sign in to follow this  
~stacker~

BASH KABUĞU...

Recommended Posts

Unix için geliştirilen en önemli ve en çok kullanılan kabukların başında tcsh, bash ve ksh gelir. Bash Bourne Shell’in biraz daha geliştirilmiş sürümüdür. Tcsh ise C-Shell üzerine eklenen yeniliklerle genişletilmiştir. Linux işletim sistemi için de derlenen bash ise hem tcsh hem de ksh’dan özellikler taşır.

Tüm bu kabuklar kullanıcının hizmetine sunulmuş olup bash kabuğu sistem ilk açıldığında tanımlıdır. Kullanıcı sisteme girdiği zaman bu kabuk aktif olur, bundan sonra kullanıcı herhangi bir kabuk altında çalışmalarına devam edebilir. Bunun için sadece çalışmak istediği kabuğun adını komut satırına yazması yeterlidir.

6.1 Bash Özellikleri

Bash’ın kullanıcıya zaman kazandıran en önemli özelliklerinden birisi dosya isimlerini tamamlamasıdır. Komut satırında tamamlanmamış bir komut veya dosya ismi yazdıktan sonra Tab tuşuna basılırsa satır tamamlanır. Eğer komut satırındaki karakter kümesiyle başlayan birden fazla komut varsa bir sinyal sesi duyulur ve bilgisayar yeterince karakter yazılmasını bekler.

Bash komut satırında iken satırın kolayca değiştirilebilmesini sağlar. Böylece komut çalıştırılmadan önce birkaç tuşa basarak üzerinde değişiklik yapılabilir. Klavye üzerindeki alt ve üst yön tuşları daha önce yazılan komutları görmeyi ve arasında seçim yapmayı sağlar. Böyle seçilen komut üzerinde değişiklik yapılabilir.

6.2 Takma Adlar ( Alias )

alias komutu ile bir komut veya komut kümesinin yerine bir isim kullanılabilir. İşleyişi bir makroya benzeyen bu komut yardımıyla uzun komutlar daha kısa komutlarla tanımlanabilir. Bir alias komutu anahtar kelimeyle başlar, ardından ‘=’ konur ve yerine kullanılacak komut yazılır. Arada boşluk bırakılmaz.

$ alias dir=’ls –l’

$ dir

Bir takma ismin tanımı unalias komutu ile kaldırılabilir.

6.3 Özel Kabuk Tanımları

Tanımlamalar set komutu yardımıyla yapılır. Tüm tanımlar küçük harfle yazılır. Bu özellikleri yardımıyla tanımlar değişkenlerden ayrılırlar.

$ set –o tanım

$ set +o tanım

Yukarıdaki komutlardan ilki tanımı işletir, diğeri ise tanımı kaldırır.

Noclobber: Bu tanımın seçilmesinden sonra bir komutun çıktısı bir dosyaya gönderildiğinde dosyanın eski içeriği aynı kalır.

Ignoreeof: Kabuktan yanlışlıkla kontrol-d tuş takımı ile çıkılmasını engeller.

Env komutu ile sistemde ön tanımı yapılan veya sonradan tanımlanan tüm değişkenler ekrana listelenir.

Sisteme girildiği anda tanımlanan bazı komutlar;

HISTFILE : Tüm yazılan komutlar .bash_history adlı dosya içinde tutulur. Her kullanıcının kendi home dizini içinde kullanıcıya özgü bu dosyadan vardır. $HISTFILE değişkeni ile dosyanın ismi değiştirilebilir.

PATH: PATH değişkeninde bir komut yazıldığı anda sistem tarafından aranacak olan yolların listesini verir. PATH değişkeninde her dizin ‘:’ ile birbirinden ayrılır. Kullanıcı PATH değişkenine yeni girdiler ekleyebilir.

SHELL: O an kullanılan kabuğun yolu ismini verir. Kabuk programları genellikle /bin dizini altında tutulur. Her kabuğun yol ismi sistemdeki /etc/shells dosyasında bulunur.

HOME: Kullanıcının home dizinini gösteren yolu ekranda gösterir. Her kullanıcının home dizini sistemde hesap açılırken sistem görevlisi tarafından belirlenir.

LOGNAME: Sistemdeki kullanıcı hesabının ismini tutar.

TERM: Kullanıcının halen üzerinde çalıştığı terminali gösterir.

PS1 ve PS2: Ekranda komut satırının başına gelecek olan karakterleri belirler. PS1 birinci satırın karakterlerini tutarken PS2 ise birinci satıra sığmayan komutlar bir alt satıra geçtiğindeki karakterleri tutar. Bu karakterler ön tanımlı olarak $ işaretidir. Önceden tanımlanan kodlar yardımıyla komut satırı değiştirilebilir. Her kodun başında \ karakteri vardır. Sıkça kullanılan kodların listesi;

\t : saat,

\d : tarih,

\s : kabuk ismi,

\w : çalışma dizini,

\u : kullanıcı ismi,

\h : makine ismi şeklindedir.

EDITOR: Ön tanımlı metin düzenleyicidir.

HISTSIZE: .bash_history dosyasındaki satır sayısını verir.

HOSTTYPE: Sistem mimarisini verir.

6.4 Sisteme Giriş Dosyaları

Sisteme girerken her giriş anında çalıştırılan dosyalar vardır. Bash kabuğu ile ilgili olan dosyalar ;

/etc/profile

~/.bash_profile

~/.bash_login

~/.profile

~/.bashrc ‘ dır.

Kullanıcı bu dosyaların kendisine ait olanlarını istediği gibi değiştirebilir.

/etc/profile dosyasını tüm kullanıcılar kullanır. Her kullanıcı sisteme girdiğinde sistem tarafından bu dosya çalıştırılır. Bu dosyada kullanıcıların ihtiyacına yönelik özel sistem değişkenleri bulunur ve birtakım kontrol ve kayıt işlemleri yapılır.

.bashrc dosyası her bash kabuğu veya alt kabuk çalıştırıldığı anda okunur. her kabuk programı çalıştırılınca bir alt kabuğa ihtiyaç olduğunda bu durumda .bashrc dosyası da okunacak ve içerdiği değişkenler program çalışmadan önce tanımlanacaktır.

Sistemden çıkarken varsa çalıştırılan dosyanın ismi .bash_logout ‘ tur. Bu dosya ile kullanıcı sistemden çıkarken fazladan işlemler yapabilir.

6.5 Kabuk Programlamaya Giriş

Her kabuğun kendine özgü programlama dili yapısı vardır. Bash kabuğu ise güçlü programlama özellikleriyle karışık programların rahatça yazılmasını sağlar. Mantıksal operatörler, döngüler, değişkenler ve daha birçok özellik bash kabuğunda da vardır ve işleyişi neredeyse aynıdır.

Genellikle bir programı oluşturacak olan komutlar bir dosyaya yazılırlar ve ardından bu dosya çalıştırılır. Herhangi bir editörde yazılan program daha sonra kabuk altında çalıştırılır. Bir kabuk programı diğerlerini de çalıştırabilir.

6.5.1 Kabuk Programları

Kabuk programları bir veya birden fazla linux komutunu tutan dosyalardır. Bu dosya yaratıldıktan sonra doğrudan ismi girilerek veya dosya isminden önce ‘.’ karakteri getirerek çalıştırılır. Bir kabuk programı çalıştırma bitinin 1 yapılmasıyla çalıştırılabilir hale getirilir.

$ chmod +x komut-ismi

şeklinde de bir programı çalıştırılabilir yapabiliriz. Daha sonra programın ismi yazılarak program bir linux komutuymuş gibi çalışır.

Kabuk programları yazarken dosyanın işlevini ve her satırdaki komutların ne amaçla kullanıldığını gösteren açıklama satırları kullanılabilir. Bir açıklama eklemek için satır başına veya boş bir satıra # işareti eklenir ve ardından açıklama cümlesi yazılır.

Bir kabuk altında çalışırken başka bir kabuk için yazılmış bir programı çalıştırmak mümkündür. Örneğin tcsh altında çalışırken bash kullanılarak yazılmış bir program çalıştırılmak istenebilir. Bunun için programın en başına #! karakteri ve ardından programın çalışacağı kabuğun yolu yazılır.

6.5.2 Değişkenlerin Kullanımı

Bir değişkene değer atandığı anda sistem tarafından tanınır. Değişkenler alfabetik veya nümerik karakterlerden oluşabilir. Ama bir değişken sayısal bir karakter ile başlayamaz. Bir değişkene değer ataması ‘=’ ile yapılır. İçeriği olan bir değişkene başına ‘$’ işareti koyularak ulaşılır.

$ mesaj=” Ders çalışmalısın!!”

$ echo artık $mesaj

artık ders çalışmalısın!!

6.5.3 Giriş/Çıkış İşlemleri

Bir kabuk programı çalışırken kullanıcının klavye ile bilgi girmesi sağlanabilir. Bu tür işlemler için tanımlanan read komutu klavyeyi okur ve bu bilgiyi bir değişkene atar.

$ echo Bir sayi giriniz:

$ read b

$ echo Girilen sayi : $b

6.5.4 Aritmetik İşlemler

Bash kabuğunda aritmetiksel işlemlere büyük sınırlamalar getirilmiştir. Tamsayı değişkeni dışında matematiksel değişken kullanmak için bu işlemler için geliştirilmiş awk ve bc kullanılabilir. Aritmetiksel işlemler için eval komutu veya bash kabuğu altında yerleşik komut olan let komutu kullanılabilir.

Aritmetik değişken tanımlamanın bir diğer yolu da typeset komutudur.

$ typeset –i cevap

$ e=10 ; y=12

$ cevap=e*y

$ echo $cevap

120

6.5.5 if-else Kalıbı ve Kontrol İşlemleri

Hemen her programlama dilinde olan if kalıbı bir Linux komutunun çalışmasını kontrol eder. if komutu yerleşik bir komuttur ve her if komutu bir fi komutuyla biter. İf komutunun ardından gelen Linux komutu çalıştırılır ve komutun çıkış durumu göz önüne alınarak ardından gelen then deyimiyle birlikte devamı işletilir. Genellikle komutun iki türlü çıkış durumu olacağından else komutunun ardından gelen komut zinciri diğer çıkış durumunda çalıştırılır.

if Linux komutu then

komut1

komut2

....

else

komut1

komut2

....

fi

if komutu genellikle kendine test komutu ile kullanım bulur. Bu komut yardımıyla mantıksal işlemler yapılabilir, sayılar ve diziler karşılaştırılabilir. Anahtar sözcük olan test’ten sonra opsiyonlar veya karşılaştırılacak olan değerler yazılır. Her opsiyon bir mantıksal işleme karşılık gelir. Komutun işletilmesinden sonra kabuğa bir değer döner. Bu değer komut başarılı olmuşsa 0, başarılı değilse 1’dir. Son çalıştırılan tüm Linux komutlarının çıkış değeri $? değişkeninde tutulur. Test komutunun çıkış değeri bu yolla öğrenilebilir.

$ e=8

$ test $e –eq 4

$ echo $!

1

Test komutu yerine [] ‘de kullanılabilir. Kullanırken araya boşluk konulmamalıdır. Ama parantezler komut olarak algılandıkları için sağına ve soluna bir boşluk konulmalıdır.

$ [$e –eq 4]

Aritmetik Karşılaştırmalar Dizisel Karşılaştırma

-gt büyük -z boş dizi

-lt küçük -n tanımlı dizi

-ge büyük eşit = eşit diziler

-le küçük eşit != farklı diziler

-eq eşit

-ne eşit değil

Dosya Karşılaştırması Mantıksal Karşılaştırma

-f dosya var -a ve

-s dosya boş değil -o veya

-r dosya okunabilir ! değil

-w dosya yazılabilir

-x dosya çalıştırılabilir

-h sembolik bağlantı

-c karakter aygıt

-b blok aygıt

#!/bin/bash

echo “0 ile 20 arasında bir sayı giriniz:”

read sayi

if [ $sayi –gt 10 ]

then

echo “Sayı çift basamaklıdır.

else

echo “Sayı tek basamaklıdır.”

fi

6.5.6 case Kalıbı

Birkaç alternatif arasından seçim yapmak için kullanılan bir komut olan case bir eşleştirme gördüğü anda belirli bir komut kümesini işleme sokar. Case yapısı case komutu ile başlar, eşleştirilecek olan anahtar sözcük yazılır ve seçenekler alt alta her seçeneğe ait komut ile birlikte yazılır. Tüm yapı esac komutu ile biter.

Case anahtar-sözcük in

seçenek1)

komutlar

;;

seçenek 2)

komutlar

;;

*)

komutlar

;;

esac

Seçenekler arsında özel karakterler kullanılabilir. Hiçbir eşleme yapılmadığı zaman *) seçeneği değerlendirilir ve buna ait olan komutlar işletilir. * kullanımı isteğe bağlıdır.

#!/bin/bash

echo “1- Ekranı Temizle”

echo “2- Sistemdekileri Göster”

echo –n “Bir seçim yapınız:”

read secim

case $secim in

1)

clear

;;

2)

w

;;

*)

echo “Hatalı seçim yaptınız!”

esac

6.6 Döngüler

Diğer hemen tüm programlama dillerinin en büyük gücü olan döngülere kabuk altında da izin veriliyor.

6.6.1 While-do Döngüsü

Döngü bloğu while anahtar kelimesiyle başlar, ardından gelen koşul sağlandığı süre boyunca devam eder. önce koşulun sağlanıp sağlanmadığına bakılır. Döngüden çıkabilmek için mutlaka döngü içindeki koşul ifadesinin değerini yanlış yapacak bir durum oluşmalıdır.

while koşul-ifadesi

do

komutlar

done

(( )) karakterleri arasına matematiksel bir işlem getirilebilir. Bu sadece bash kabuğunda olan bir özelliktir.

#!/bin/bash

say=0

while [ $say –lt 10]

do

say=$((say+1))

echo $say

done

6.6.2 for-do Döngüsü

Bir liste dahilindeki tüm değerlere sırayla erişimi sağlar. For komutundan sonra yer alan liste sırayla kullanılır ve her birisi için döngü çalıştırılır. Listenin sonuna gelindiğinde ise döngüden çıkılır.

for degisken1 in deger1 deger2... for meyve in seftali elma

do do

komutlar echo $meyve

done done

for-do döngüsü dosya isimleri üzerinde yapılan işlemlerde de kolaylık sağlar. Bunun için özel karakterlerden de yararlanılır.

for s in *.pl ;

do

file $s

done

6.7 Örnek Kabuk Programı

Sistem görevlisinin en çok kullandığı komutlardan birisi ps-aux | grep –i xxx komutudur. Bu komut ile çalışan xxx isimli program hakkında detaylı bilgi elde edilir. Ps komutu detaylı bir süreç listesini ekrana verirken çıktı grep komutuna yönlendirilir ve sadece istediğimiz bilgi ekranda görünür. Her zaman bu satırı yazmaktansa bu satırı bir dosyaya gönderip bu dosya adı ile çalıştırmak daha kolay olacaktır.

#!/bin/bash

if [ $#=1 ]

then

ps-aux | grep –i $1

else

ps-ax

fi

Ardından dosya PATH değişkeninin işaret ettiği dizinlerden /usr/local/bin dizininin altına yerleştirilir. Dosyanın çalıştırılabilir olması için chmod +x /usr/local/bin/t komutu uygulanır.

Grep komutu bir dosyadaki veya standart girişteki satırlar içinden belirli bir kelime, harf veya harf grubunu bulmaya yarar.

$ w | grep demir

Bu komut ile sistemde demir isimli kullanıcı olup olmadığına bakılır.

Örneğin ilk satırı bu dosyanın /bin/bash programı tarafından çalıştırılacağını gösterir. İkinci satırda ise komut satırı üzerinde kaç tane opsiyon olduğunu gösterir. $# çevresel değişkeni her biri Tab veya boşluk tuşu ile ayrılmış komut satırı opsiyonlarını verir. Komut satırından çalıştırılan komut ise $0 değişkenine aktarılır.

6.8 Kabuk Fonksiyonları

Diğer programlama dillerindeki gibi bir program parçacığı birden fazla yerde parametre vererek kullanılmak istendiğinde fonksiyonlar kullanılır.

6.8.1 Örnek Bir Fonksiyon

#!/bin/bash

deneme(){

case $1 in

‘ ‘ ) echo “$0: Kullanım: deneme sayı”

exit;;

‘1000’) echo “1000 rakamı giremezsiniz!!”

exit;;

esac

echo “ $1 sayısını girdiniz!”

}

echo “Bir sayı giriniz:”

read sayi

deneme $sayi

Share this post


Link to post
Share on other sites

aslında baktım! Ama arkadaşların programlama kısmına bakınca orada bash kabuk programlama da olması düşüncesiyle oraya açmıştım :)

Share this post


Link to post
Share on other sites

aslında baktım! Ama arkadaşların programlama kısmına bakınca orada bash kabuk programlama da olması düşüncesiyle oraya açmıştım :)

Olsun bizde arada sırada işe yarayalım değil mi :)

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×
×
  • Create New...