Türkiye'nin ilk Oyun Forumlarından olan Oyunsiteniz 17 Yasinda

OyunSiteniz ARŞİV Bölümü => GERİ DÖNÜŞÜM KUTUSU => Konuyu başlatan: YuRY - 06 Haziran 2007, 09:48:56

Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:48:56
Merhaba arkadaşlar,
Unix altında shell programlamaya geçmeden önce Unix ve Uinix komutları hakkında biraz bilgi edinelim. Şimdiden herkese kolay gelsin 


UNIX:


UNIX işletim sistemi bir ağ işletim sistemidir. Birden çok bilgisayar aynı anda bu işletim sistemini kaynaklarını paylaşmak için kullanabilir. UNIX işletim sistemi kullanan herkesin özel bir kullanıcı adı Username yada Login vardır. Kullanıcı adı account olarak da anılır.

UNIX işletim sistemi genellikle güçlü bilgisayarlarda kullanılmaktadır. UNIX felsefesinin temelinde, bir bilgisayarın birden fazla kullanıcı arasında paylaşılması; ya da bir kullanıcının aynı anda birden fazla iş yapmasına olanak sağlamak yatmaktadır. Bu nedenle, UNIX altında kullanılacak bilgisayarın, kaynaklarının birden fazla iş arasında paylaşılması durumunda performansını kabul edilebilir düzeyde tutabilecek güçte olması gerekmektedir. Bilgisayar teknolojisindeki gelişmeler, donanımları hızla güçlendirmekte ve ucuzlatmaktadır; bunun doğal sonucu olarak da, UNIX işletim sistemi denetiminde kullanılan bilgisayarların sayısı hızla artmaktadır.

UNIX İşletim Sistemi, bilgisayar bilimcilerinin ‘çok kullanıcılı’ (multi-user) ve ‘çok işli’ (multi-tasking) adını verdikleri çalışma koşullarını sağlar. Bir başka deyişle; UNIX altında çalışan bir bilgisayarı, birden fazla kullanıcı birbirlerinden bağımsız olarak ve aynı anda kullanabilirler. Bu birlikte kullanım sırasında, bilgisayarın kaynaklarını (merkezi işlem birimini, ana belleğini (RAM), disk-teyp gibi yan bellek birimlerini, yazıcılarını) paylaşırlar. UNIX, kaynakların kullanımını, paylaşımdan kaynaklanan performans düşmelerini en aza indirgeyecek şekilde düzenlemeye çalışır. Bu tür paylaşımlar, donanıma yapılan yatırımı bir miktar azaltacağı için bir kazanç unsurudur. Yan bellek paylaşımıysa kayıtlı veri ve programları da paylaşmak demektir ki; bu da değeri oldukça yüksek başka bir kazançtır. Bir kullanıcının aynı anda birden fazla iş yapabilmesi de bir başka kolaylıktır. Bilgisayarınızda uzun bir iş başlattığınızı varsayalım; ancak bu iş, her bir kaç dakikada bir sizin klavyeden müdahale etmenizi gerektirsin. Bu durumda, bu uzun işi başlatıp yemeğe gidemezsiniz. Tek iş düzeninde kullanım için tasarlanmış bir işletim sistemi kullanıyorsanız (MS-DOS gibi), söz konusu programın yaptığı iş tamamlanıncaya kadar bilgisayarın karşısında oturmak zorundasınız. Eğer bu işi UNIX altında çalışan bir bilgisayarda yapıyorsanız, uzun programınız bir yandan işinizi yaparken, siz öte yandan (gene aynı ekran ve klavyeyi kullanarak) bir başka iş yapabilirsiniz.


UNIX'le TANIŞMA


UNIX işletim sistemi ile çalışan bir bilgisayarı kullanabilmek için sahip olmanız gereken üç şey vardır :
a) UNIX altında çalışan bir bilgisayara bağlı bir TERMİNAL’e (ekran+klavye) erişim yetkisi,
b) UNIX altında çalışan bu bilgisayara erişim hakkınızın anahtarı olan ‘kullanıcı hesabınız’ (user account),
c) Eğer yeni başlıyorsanız; bol miktarda sabır. 
Bu üç özelliğe sahip olduğunuzu varsayarak devam edelim.
Terminalinizi açınız.
Bir kaç saniye içinde ekranda
login :
mesajını görmeniz gerekir. (Bazı terminallerde bu mesajı görebilmek için bir kaç kez ENTER (ya da RETURN) tuşuna basmanız gerekebilir). Bu mesaj, bilgisayarın, daha doğrusu UNIX’in, kendinizi tanıtmanızı istediğini
belirtmektedir. Her UNIX kullanıcısının bir adı olmalıdır. Bu ad, kullanıcılara sistem yöneticisi görevini üstlenmiş olan bilgisayar uzmanları tarafından verilir. Bu mesaja yanıt olarak klavyeden kullanıcı adınızı girmeniz ve ENTER tuşuna basmanız gerekir. Kendi adınızı veya rastgele bir ad girmenizin bir yararı olmayacaktır. UNIX, sadece daha önceden kendisine tanıtılmış olan kullanıcı isimlerini kabul edecektir. Eğer bir kullanıcı adınız yoksa sistem yönetici account ı tarafından size bir user tanımı yapılması gerekmektedir.
(Bunu unix komutlarında göreceğiz)

Geçerli bir kullanıcı adınız olduğunu varsayarak devam edelim...
login :admin
ENTER tuşuna basmanızla birlikte
Password :
mesajıyla şifrenizi girmeniz istenecektir.

***Unix'te şifrenizi girerken ekranda şifreniz ***** şeklinde dahi olsa görünmez. Böylece şifre konusunda (kaç karakter olduğu vs) max. güvenlik sağlanmış olur.

***UNIX işletim sisteminde büyük harf - küçük harf farkı ÇOK önemlidir.

***UNIX işletim sistemi ile yapmakta olduğunuz işi tamamladığınızda ve terminalin başından ayrılacağınız zaman
% logout komutunu vermeyi unutmamalısınız. Bu komut, UNIX ile bağlantınızı kesecektir; ve terminal bir sonraki kullanıcıyı bekleme konumuna geçecektir. ( login : )

Ben Kimim?
İlk bakışta çok anlamlı değilmiş gibi görünen bu soru UNIX dünyasında zaman zaman sorulması gereken bir sorudur. Eğer kullandığınız UNIX bilgisayarı büyük bir bilgisayar ağının bir parçasıysa ve siz bu ağ üzerinden bir çok bilgisayara ulaşabiliyorsanız ve bu değişik bilgisayarlardaki kullanıcı isimleriniz (user-id) farklıysa; uzun çalışma seansları sırasında, o anda geçerli olan kullanıcı kimliğinizi şaşırabilirsiniz.
Hemen
% whoami ******BSD UNIX’lerde (bu arada % işareti komuttan bağımsızdır. Çalışılan kabuğu gösterir)
% who am i ******SV5R4 UNIX’lerde
komutunu verip, UNIX’in sizi o anda hangi kimlikle tanıdığını öğrenebilirsiniz. Özellikle sistem yöneticileri, zaman zaman başka kullanıcıların kimliğine bürünme gereksinimi duyarlar ( bu işi su - switch user komutuyla yaparlar).
Bir o - bir bu kullanıcı kimliğine büründüklerinde de bazen şaşırmalar olur. Böyle bir durumda hemen whoami komutunu vererek o andaki kimliklerini öğrenebilirler.

Başka Kimler Var?

UNIX işletim sistemi altında çalışan bilgisayarların, bir anda birden fazla kullanıcı tarafından kullanılabileceğini belirtmiştim. İsterseniz, şu anda bilgisayarı sizden başka kullanan kimse var mı, onu öğrenelim. Bunun için
vermeniz gereken komut:
% who

% who
admin tty01 Jan 12 15:12
hakan tty03 Jan 12 10:09
root console Jan 11 23:40
%
Yukarıdaki örneğe göre, şu anda bilgisayarı paylaşan 3 kişi olduğunuz anlaşılıyor. Diğer ortaklarınızın isimleri hakan ve root. Hakan 3 numaralı terminalin, root ise ana terminalin (konsol) başında oturuyor. hakan 12
Ocak günü saat 10:09 da login etmiş; root ise bir gün önce gece yarısına doğru çalışmaya başlamış. Eğer, root gerçekten dün geceden beri çalışıyorsa mesele yok; ama eğer gece eve gitmiş ve giderken logout komutunu vermemişse önemli bir güvenlik hatası yapmış demektir.

***UNIX kullanıcılarının isimleri genellikle kullanıcıların gerçek kimliklerini yansıtacak şekilde seçilir. Sistem yöneticisi; bir kullanıcı tanıtımı yaparken, kullanıcı hesap ismi yanısıra, bu kullanıcının bilgisayardaki kaynaklara erişim yetkilerini de tanımlar. Ancak, UNIX işletim sisteminde adı hiç bir zaman değişmeyen
ÖZEL bir kullanıcı vardır. Bu kullanıcının adı, root sözcüğüdür. Adı root olan kullanıcı HER ŞEYİ YAPMAYA YETKİLİDİR. İstediği dosyayı siler, yaratır, yerini ve içeriğini değiştirir vs. vs. Bu kullanıcıya “süper kullanıcı” (super user) adı da verilir. Eğer bir UNIX bilgisayarına root kullanıcı olarak erişme hakkınız varsa (yani root şifresini biliyorsanız), gerekmedikçe bu isimle login etmeyiniz. Yapacağınız hatalar sisteminizi çalışmaz hale getirebilir. UNIX işletim sistemi, root isimli kullanıcının yaptığı işi çok iyi bildiğini varsayıp, hiç bir uyarıda
bulunmaksızın verilen komutları yerine getirir. (her şeyi sil komutu dahil!)
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:49:29
PASSWORD BELİRLEME:

UNIX altında çalışan bir bilgisayara kullanıcı adınızı kullanarak ulaşabilen herkes hesabınız ile istenmeyen işlemler yapıp sizi zor durumda bırakabilir. Başkalarının siz gibi davranmasını istemiyorsanız, UNIX’in şifre mekanizmasından yararlanmanız gerekecektir. Bilgisayara erişim şifrenizi (password) değiştirmek istediğinizde
% passwd
komutunu kullanmalısınız. Eğer şifreli bir kullanıcı adı ile çalışıyorsanız, yeni şifre verebilmek için o anda geçerli olan şifreyi bilmeniz gerekecektir.
abc:/home/admin % passwd
Changing old password for admin
Old password : eski şifreyi veriniz
New password : yeni şifreyi giriniz
Retype new password : yeni şifreyi bir kez daha giriniz.

Şifreyi iki kez girmenizin istenmesi oldukça mantıklı değil mi? Klavyeden yazarken ekranda göremeyeceğiniz bir şifreyi hatalı yazarsanız, bir daha bu sisteme login etmeniz olanaksız hale gelecektir.

***root hesabı tüm kullanıcıların şifresini değiştirebilir. root ile sistemem bağlı iken bir userın şifresini değiştirmek için:
%passwd admin (admin komutunun şifresi değiştirilir.)
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:49:46
TEMEL UNİX KOMUTLARI

SHELL PROGRAMLAMA'ya geçmeden önce Unix komutlarına giriş yapacağız. Bu bölümde Unix komutlarını parametre ve örnekleri ile ele alacağız 

1) man

Bir komutun nasıl kullanılacağını öğrenmek ya da hatırlamak istediğinizde
% man komut-adi (man=manual)
komutunu vermeniz, komut-adı adlı komutun kullanım kılavuzu sayfalarının ekranınızda görüntülenmesini sağlayacaktır.
Örneğin, passwd komutunun nasıl kullanılacağını merak ederseniz
% man passwd
komutunu çalıştırmanız yeterlidir. Bu komutun tüm parametreleri ile ilgili kullanımını ekrana getirir.

2) cd

Dizin değiştirme komutudur.
ör: %cd /export/home ---->root (/) dizini altındaki export ve export dizini altındaki home dizinine gidilir.
***root dizini Windowslardaki C dizini gibi düşünülebilir.

cd kullanımına örnekler:

cd .. ---> Bir üst dizine gidilir.
cd ../.. --->2 üst dizine gidilir.
cd ../home/admin ---> bir üst dizindeki home dizininin altındaki admin dizinine gidilir.
cd ~ ---> root dizinine direkt olarak gidilir.

3) mkdir

Dizin yaratma komutudur (make directory)
ör: mkdir elma --->bulunulan dizine elma dizinini yaratır.
mkdir -p /export/home/elma ---> eğer root dizini altında her üç dizin de yoksa iç içe 3ü de yaratılır. -p şeklinde kullanmamızın amacı; komutu çalıştırdığımız zaman hangi dizinde olursak olalım istediğimiz dizin altında istediğimiz dizini yaratmak içindir. Yani biz /usr/local dizini altında iken
mkdir elma
dersek, /usr/local dizini altına elma dizinini yaratmıs oluruz. Ama /usr/local/ dizinindeysek
mkdir -p /export/home/elma
dersek /export/home altına elma dizinini yaratmış oluruz.

***Dizin yaratabilmek için, dizin yaratmak istediğimiz dizine o an login halde olduğumuz user'ın yazma hakkının olması lazım.

4) pwd

O an hangi dizinde bulunduğumuzu gösteren komuttur.
%pwd
yazıp enter'a basınca;
% /export/home/elma --->/export/home/elma dizinindeyiz.

5) cp

Kopyalama komutudur. Bir dosyayı bir dizine, bir dizini baska bir dizine, bir dosyayı baska bir dosyaya kopyalamaya yarar.

ör: cp dosya1.txt dosya2.txt --->Dosya1.txt içindekilerin hepsi dosya2.txt e yazılır. Dosya2.txt daha önce dolu ise ezilir, yoksa yaratılır.

ör: cp dosya1.txt /export/ ---> diyelim ki /export/home/elma dizinindeyiz ve bu dizinde dosya1.txt var. Bu dosya bu komutla /export/ dizinine kopyalanır.

***Bu komutların hepsi bulunulan dizindeki bir dosyayı baska bir yere ya da bir dosyaya kopyalamak içindir.
Alakasız bir dizindeki dosyayı yine alakasız bir yerdeki dosyaya kopyalamak istersek:

ör: Diyelim ki /usr/local dizinindeyiz. /export dizinin de dosya1.txt var. Bunu /usr/local/admin dizinine kopyalayacaksak;

cp /export/dosya1.txt /usr/local/admin ---> /usr/local/admin dizini altında da dosya1.txt var artık.

6) mv

Adından da anlaşılacağı üzere taşıma komutudur.
Kullanılışı:

mv dosya1.txt dosya2.txt ---> dosya1.txt; dosya2.txt olarak değişir. dosya1.txt kaybolur, dosya2.txt yoksa oluşur, varsa ezilir.

mv /export/home/dosya1.txt /usr/local/ ---> /export/home/ altındaki dosya1.txt /usr/local altına taşınır. /usr/local altında dosya1.txt adına baska bır dosya varsa ezilir.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:51:18
7) cat

Dosyaya bakma, modify etme ya da birleştirme komutudur.

ör: cat dosya1.txt dosya2.txt > dosya3.txt --->dosya1 ve dosya2 birleştirlip dosya3.txt e yazılır.

parametreler:

-n: bakılan dosyanın satırlrını numaralayarak önumuze getirir.
ör: cat -n dosya1.txt
-b: -n ile aynı görevi görür ama boşlukları satır olarak kabul etmeden numaralandırır.
ör: cat -b dosya1.txt

8) clear

Ekranı temizler.

9) cmp

Karışlaştırma komutudur.
ör: cmp file1 file2 --->iki dosyanın farkını ekrana yazar.

10) compress, uncompress, gzip, gunzip

a) compress
Sıkıştırma komutudur. Windowstaki winzip gibi düşünülebilir. Zipli dosyanın uzantısı .Z olur
ör: compress file1 ---> file1 dosyayı sıkıstırılır. file1 silinir, zipli dosya oluşur. (file1.Z)

b) gzip
Sıkıştırma algoritması compress e göre daha iyidir. Sıkıştırılan dosyanın uzantısı .gz olur.
ör: gzip file1 ---> file1.gz oluşur.

c) uncompress
compress ile sıkıştırılan dosyayı açar. .Z uzantılı dosya silinir. açılan dosya kalır.
ör: uncompress file1.Z

d) gunzip
.gz uzantılı dosyayı açar.
ör: gunzip file1.gz

***Birden fazla dosyayı aynı anda sıkıştırmak ya da açmak mümkündür.
ör: compress file1 file2 file3

11) date

Tarih ve saat bilgisini verir.
ör: date

12) echo

Ekrana yazı yazdırma komutudur.

ör: echo "Merhaba"
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:51:45
13) ls

Bulunulan ya da komutla beraber yazılan dizinde hangi dosya ya da dizinlerin olduğunu gösterir.
ör:
pwd komutu ile hangi dizinde olduğumuza bakalım. (artık komutları beraber kullanabiliriz)
%pwd (enter'a basıldıktan sonra)
% /export/home
Şimdi bu dizinde ne var ne yok ona bakalım:
% ls
admin backupop erhan

/export/home dizinindeyken /usr dizininde ne var diye merak ediyorsak
%ls /usr komutunu çalıştırmamız yeterlidir.

***Tabi bu 3 sonuç dosya mı dizin mi belli olmuyor buradan bakınca. Ancak cd ile içine girmeye çalışırsanız dizin ise girer dosya ise NO A DIRECTORY uyarısını alırısınız.

***Dosya mı dizin mi, yazma hakkı, okuma hakkı, program ise çalıştırma hakkı, en son guncellenme tarihi vs bilgileri ise ls komutunun parametreleri ile belirlenebilir.

Parametreler:

ls -l: ls komutu -l parametresi ile çalıştırıldığında ayrıntılı bir liste verir.

ör: /export/home dizini altındayken
% ls -l dersek
drwxr-xr-x 2 root other 512 Apr 11 08:09 admin
-rw-r--r-- 1 root other 4 Apr 11 08:12 alp
drwxr-xr-x 2 backupop staff 512 Aug 9 2005 backupop

***Gördüğünüz gibi /export/home dizini altındaki 3 sonuç hakkında oldukça ayrıntılı bir bilgi önümüze getirildi. Şimdi bunlardan birini ele alarak sırasıyla satırların ne anlam ifade ettiğini görelim.

drwxr-xr-x 2 root other 512 Apr 11 08:09 admin
soonucu için konuşacak olursak,

drwxr-xr-x:
d: admin in bir dizin (directory) olduğunu gösterir.
rwx: admin dizininde dizin sahibinin OKUMA (r), YAZMA(w) ve ÇALIŞTIRMA (e: execute) haklarının olduğunu gösterir.
r-x: admin dizininde grubun haklarını gösterir. Bu örnekte OKUMA (r) ve ÇALIŞTIRMA(x) hakkı var YAZMA(w) hakkı yok.
r-x: admin dizininde diğer kullanıcıların haklarını gösterir. Bu örnekte OKUMA (r) ve ÇALIŞTIRMA(x) hakkı var YAZMA(w) hakkı yok.

root: admin dizininin ROOT kullanıcısına ait olduğuu belirtir.
512: Dizinin boyutu (byte cinsinden)

Apr 11 08:09: oluşturulma/ modifiye tarihi.

ls -lt: dosya ve dizinleri modifikasyon zamanlarına göre gösterir.
ls -ltr: dosya ve dizinler modifikasyon zamanına göre AZALAN olarak gösterilir. En altta en güncel dosya/dizin bulunur.
ls -ltR:dosya ve dizinler modifikasyon tarihine göre ARTAN olarak gösterilir. En altta en eski dosya/dizin bulunur.
ls -la: dosya ve dizinler harf sırasına göre sıralanır. Gizli dosya ve dizinler varsa .. şeklinde görünür.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:52:08
14) rm:
Silme komutudur.
ör: rm dosya1
Dizin silmek için -R parametresi kullanılmalıdır.
rm -R admin.

***Dosya ya da dizin silmeden önce size emin misiniz diye sormasını istiyorsanız -i parametresini kullanmalısınız.

ör: rm -i dosya1 yazılıp enter'a basılınca şöyle bir uyarı çıkar:
rm: remove dosya1 (yes/no)?

ör: rm -iR admin yazılıp entera basılınca;
rm: examine files in directory admin (yes/no)? (yes denirse),
rm: remove admin: (yes/no)? buna da yes denirse admin dizini silinir.


15) chmod:
Dosya ve dizinlere okuma, yazma ve çalıştırma haklarının verilmesi ya da alınmasını sağlar.
Hatırlarsanız ls -l ile bir dizin ya da dosyanın ayrıntılı bir şekilde görülmesini sağlıyorduk.


u r
g + w
% chmod o = x dosya_adı
a -


u : dosyanın sahibi (user)
g : dosyanın sahibiyle aynı grupta olanlar (group)
o : diğer kullanıcılar (others)
a : herkes (all )
+ : yetki ekleme
= : yetki eşitleme
- : yetki çıkarma
r : okuma yetkisi (read)
w : yazma yetkisi (write)
x : Çalıştırma (execute)

ör: chmod a+x dosya1 --> dosya1 e herkes için çalıştırma hakkı verildi.
chmod o-w dosya1 --->dosya1 den diğerlerinin yazma hakkını kaldır.
chmod go=rx adres ---> adres dosyasının grup ve diğerleri için erişim yetkisini r-x kalıbına eşitler.

***chmod'un baska bir kullanım şekli daha vardır. Rakamlarla yetki atamak:

4 2 1 4 2 1 4 2 1
r w x r w x r w x
Owner Group Others

ör: Diyelim ki bir dosya için herkese her hakkı vereceğiz. O zaman tüm rakamları kendi içinde topluyoruz, yani:

4+2+1=7
4+2+1=7
4+2+1=7

o zaman chmod 777 dosya1 dersek herkes dosya1 uzerınde her işi yapar.

4+2=6 (okuma ve yazma hakkı)
4+1=5 (okuma ve çalıştırma hakkı)
2+1=3 (yazma ve çalıştırma hakkı)

ör: chmod 751 dosya1 ---> dosya1 içi dosyanın sahıbıne tum haklar (7), dosyanın grubundakıler okuma ve çalıştırma hakkı (5) ve diğerlerine sadece çalıştırma (1) hakkı verildi.


16) chown:
Dosya ve dizinlerin sahibini değiştirmeye yarar.

ör: admin dizini ROOT kullanıcısına aitti. Kullanıcısını diyelim ki mehmet yapzacağız:
chown mehmet admin

17) ps:
O an çalışan processleri gösterir.

ps komutu verilince ekrana gelenler:

PID: (Process ID) UNIX’de, her sürecin birer tanıtım numarası vardır. Aynı numaraya sahip iki süreç olamaz.
TT: (Teletype : Çok eskilerden kalan bir alışkanlık) Sürecin hangi terminalden başlatıldığı (genellikle co : console, ttya : a isimli seri arabirim, p0 bilgisayar ağı üzerinden bağlanmış bir
ekran). TT bilgisi kullandığınız donanımın özelliklerine göre değişebilir.
TIME: Sürecin ne kadar zamandır çalıştığını gösterir
COMMAND: Süreci başlatan komut satırı

ps -ef: Sistemdeki tüm işlemler hakkında bilgi alınır.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:52:44
18) sort:

Sıralama komutudur.

ör: sort file1 > file2 --->file1 içindeki bilgiler sıralanıp file2 dosyasına kaydedilir.

parametreler:

-d:sözlük sıralamasını kullanır ve noktalama işaretlerini ihmal eder.
-b:Satır başlarındaki boşlukları ihmal eder.
-f:Caps boşluklarını dikkate almaz.
-r:Tersten sıralama yapar.
-u:Aynı satırdan bir ya da daha fazla varsa sadece birini gösterir. ***Bu madde önemli


19)tail
Bir dosyanın son (adından da anlaşılacağı üzere:kuyruk) kaç satırını görüntülemek istiyorsak bu komutu kullanırız.

paramtereler:
-f: En çok kullanılan parametredir.
ör: tail -f dosya1 ---> dosya1 in son bir kaç satırını gösterir.
tail -10f dosya1 ---> dosya1 in son 10 satırını görüntüler.

20) uniq:
Bir dosya içinde tekrarlayan satırları görüntüler.

parametreler:
-c: Dosya içinde her satırın kaç kere tekrar ettiğini gösterir.
-d: dosya içinde tekrar etmeyen satırları göstermez.
-u: dosya içinde tekrar eden satırları göstermez.

ör: uniq dosya1 > dosya2 ---> dosya1 içinde tekrar eden satırlar dosya2 ye kaydedilir. (sort -u gibi)


21) kill:

Process öldürmek içindir.

ör: Process_id (pid) si 14536 olan bir process i öldürmek istiyorsak;

kill -9 14536 ---> process i hemen öldürmek istiyorsa -9 parametresini kullanırız.

22) nohup:

Bir UNIX bilgisayarına ulaşmak için kullandığınız terminali ya da terminal gibi davranan bir PC’yi (Terminal Emulation yazılımı çalışan bir PC) kapatırsanız veya logout komutu ile sistem bağlantınızı keserseniz, o terminal bağlantısıyla ilgili tüm süreçler (hem ön, hem arka plandaki süreçler) UNIX tarafından
öldürülür. Ender de olsa, bazı durumlarda sistemden çıkmanıza rağmen, başlatmış olduğunuz bir işin kesilmeden devam ettirilmesini isteyebilirsiniz.
nohup komutu bu iş için idealdir.

ör: nohup komut &
nohup gzip dosya1 & ---> bu komutu nohup sız verirsek ve dosya buyukse işlem hemen bitmez, ama işimi var ve hemen cıkmamız gerekse nohup la gzip komutunu verip terminalı kapatabiliriz.

23) wc:
kelime sayma komutudur.

parametreler:
-l: sadece satırları;
-w: sadece kelimeleri;
-c: sadece karakterleri sayar.

ör: wc -lw dosya1 ---> dosya 1 içinde kaç satır ve kaç kelime olduğunu gösterir.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:55:37
24) sleep:
Bekleme komutudur. Yanında verilen sayı kadar saniye bekler. Shell programlamada oldukça işimize yarayacak.

ör: sleep 5 --->5 saniye bekle.

25) cal:
takvim komutudur.

ör: cal -->içinde bulunulan ayı takvimsel olarak gösterir.
cal 1995 --->1995 yılını takvimsel olarak gösterir.
cal 7 1995 --->1995 temmuz ayını gösterir.


26) find:
Adından da anlaşılacağı üzere arama komutudur.

find baslama-dizini kriter[ler] [-exec komut ";"]

ör: find /export/home -name dosya* ---> /export/home ve alt dizinlerinde dosya ile baslayan tüm dosyalar aranır.
find /export/home -user admin --->user kullanıcısına ait dosyalar.
find /export/home -group class --->class grubuna ait dosyalar.
find /export/home -size 10 ---> diskte kapladığı alan 10 blok olan dosyalar (1 blok = 512 Byte)
find /export/home -size +100 --->diskte kapladığı alan 100 bloktan büyük olan dosyalar (51 KByte’dan büyük dosyalar)
find /export/home -size -45 --->diskte kapladığı alan 45 bloktan küçük olan dosyalar
find /export/home -ctime 3 --->Tam 3 gün önce değişikliğe uğramış olan dosyalar
find /export/home -mtime +8 --->8 günden daha uzun bir süre önce değişikliğe uğramış olan dosyalar


****-ctime ve -mtime parametrelerinin her ikisi de dosyanın değişikliğe uğramasıyla ilgili süreleri kontrol eder; ancak aralarında küçük bir fark vardır. -mtime, dosyanın içeriğinde bir değişiklik yapılıp yapılmadığına;
-ctime ise dosyanın içeriği yanısıra özelliklerinin de değişip değişmediğini kontrol eder. Örneğin, sahibi değişen bir dosya -mtime tarafından farkedilmezken -ctime tarafından dikkate alınır.

ÖNEMLİ ÖRNEK:
find / -name core -exec /bin/rm {} ";"
/ dizininden başlayarak tüm disklerde core isimli dosyaları arar ve bulduklarını siler.
find komutunu -exec parametresiyle birlikte kullanırken sondaki ";" parametresini UNUTMAMALISINIZ. Bu ";" karakter dizisinin gerekliliği tamamen find programının yazılışından kaynaklanmaktadır. Bu komut, sistem yönetiminden sorumlu olanların oldukça sık kullanacakları bir komuttur.

find komutuyla birlikte kullanılan kriterleri çeşitli mantık operatörleriyle birleştirebilirsiniz. Bunlar
-a : "ve"
-o : "veya"
\! : "deil"
operatörleridir.
Örnekler :
find /home -name "*.tmp" -a -size +100 -print --->Adı *.tmp kalıbına uyan ve büyüklüğü 100 bloktan fazla olan dosyaları bulur. (1 blok = 512 byte)


27) grep:
Dosyaların içinde bişeyler arama komutudur. Bu komut da oldukça önemlidir.
Kullanılışı: grep [-ilnc] patern dosya(lar)
ör: grep -c mehmet dosya1 --->dosya1 in içinde mehmet kelimesinin kaç kere geçtiğini bulur.
grep mehmet dosya1 ---> dosya1 in içindeki mehmet kelimesi geçen yerleri listeler.
grep -i mehmet dosya1 ---> mehmet kelimesini büyük-küçük harf ayrımı yapmadan listeler.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:55:52
UNIX PIPE KAVRAMI


Piping işlemi, bir çeşit yönlendirmedir; bir programın standart çıktısı, bir başka programa standart girdi olarak yönlendirilir. Pipe kurmak için, aynı komut satırında en az iki program birden başlatmalı ve bu
iki programa ilişkin komutların arasına | karakterini (ALT GR+ > tuşu) yerleştirmeniz gerekir.
Şimdi grep komutu ve pipe kavramının birlikte kullanımına bir kaç örnek vereyim:
% grep kelime1 dosya1 | more
Bu komut, daha doğrusu komut ikilisinin anlamı şu :
grep ve more programlarını aynı anda başlat.
dosya1 doysasında kelime1 sözcüklerini ara, bulduğun satırları more programına gönder, more programı bu satırları alsın ve kendi görev tanımı doğrultusunda işlesin. (Yani sayfa sayfa listelesin).

more: eger sonuna more koymasaydık ekrana listelerdi ve üstte kalanları goremezdık. sonuna more koyunca tumunu listeler ve en uste 1. sayfayı koyar. boşluk tusuna basında 2. sayfaya geceriz. tabı bu anlatıklarım komut listesının sonucunun 1 sayfadan fazla olması durumunda olur. Deneyerek kendınız de gorebılırsınız.

ör: ps -ef | grep java

***bu örnekte sistemde çalışan tüm programlar ps -ef komutu ile listelenir. | işaretinden sonra grep java ile sistemdeki java processleri ekrana getirilir.

ör: echo Sistemde `who | wc -l` kullanıcı var.

****Bu komut satırında bir kaç kademeli bir işlem istenmektedir. İlk olarak who programı çalıştırılacaktır. Aynı anda wc programı da çalıştırılacak ve who programının çıktısı standart girişindeki satır, kelime ve karakterleri sayan wc (-l seçeneği yanlızca satırların sayılmasını sağlıyor) programına gönderilecektir. wc programının çıktısıysa (who komutunun listelediği satırların sayısı) tırnaklar arasına yerleştirilerek elde edilen; örneğin üç kullanıcı varsa, ‘Sistemde 3 kullanıcı var’ dizisi de echo programına girdi olarak transfer edilir. echo programıysa parametrelerini aynen ekrana gönderir.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:57:03
Dosya açarken karşılaşabileceğiniz sorunlar :

***Var olduğunu bildiğiniz bir dosya adı vermiş olmanıza rağmen, ekranın en altında [New File] mesajını görebilirsiniz. Bu durum, büyük olasılıkla dosyanın adının vi başlatma komutunda hatalı yazılmış olmasından kaynaklanmaktadır. Eğer hata bu değilse, büyük olasılıkla söz konusu dosya, belirtilen dizinde bulunmamaktadır (vi komutunda dizin belirtilmemiş ise, bulunduğunuz dizinde bu dosya yoktur.

***Aşağıdaki mesajlardan birini görürseniz :
[Read Only] veya File is Read only veya Permission denied
söz konusu dosyaya ya da bulunduğu dizine yazma yetkiniz yok demektir. Normal olarak yapabileceğiniz bir şey olmadığından vi seansını bir an önce durdurup, dosyanın sahibi ile (veya sistem yöneticisi ile) görüşmeniz gerekmektedir.

***Aşağıdaki mesajlardan birini görürseniz :
[Read Only] veya
File is Read only veya
Permission denied
söz konusu dosyaya ya da bulunduğu dizine yazma yetkiniz yok demektir. Normal olarak yapabileceğiniz bir şey olmadığından vi seansını bir an önce durdurup, dosyanın sahibi ile (veya sistem yöneticisi ile) görüşmeniz gerekmektedir.

***File System full
Mesajını görürseniz, çalıştığınız disk veya disk kotanız dolmuş demektir; gereksiz dosyaları silerek yer açmanız gerekmektedir. Bu ilk defa başınıza geliyorsa sizden daha iyi UNIX bilen birinden yardım isteyiniz.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:57:16
İmleç Dolaştırma Komutları

Bu komutların verilmesi sırasında, editör komut konumunda bulunmalıdır. (Yani; editör yeni başlatılmış olmalı veya ekleme konumundan çıkmak için Esc tuşuna basılmış olmalıdır. Hatırlayacaksınız, fazla Esc basmanın bir zararı yoktur; dolayısıyla bulunduğunuz konumla ilgili bir şüpheniz varsa, hiç çekinmeden iki kere Esc tuşuna basınız.) Eğer kullandığınız terminalin özellikleri sisteme doğru tanıtıldıysa ve klavyenizde ok tuşları varsa, en temel hareketleri (birer karakter sağa, sola, yukarı ve aşağı) bu ok tuşları ile yapabilmelisiniz. Eğer terminal tanımlarınız hatalıysa; eksikse veya klavyenizde bu tuşlar yoksa, imleci gezdirme komutları şunlardır :
h:sola bir karakter
j:aşağı bir satır
k:yukarı bir satır
l:sağa bir karakter (küçük le harfi)

***Tabii bu arada ENTER tuşu ile BackSpace tuşunun da sırasıyla satır başı ve bir geri anlamına geldiğini hatırlatmakta fayda var.

Birerli adımlar dışında hareket sağlayan ve çok kullanılan komutlardan bazılarıysa:

0 (sıfır): imlecin bulunduğu satırın başına
$: imlecin bulunduğu satırın sonuna
w :bir sonraki sözcüğün başına
b :sözcüğün başına (ya da bir önceki)


Yazı yazarken en çok yapılan işlerden biri, eski bir metnin başına, sonuna ve araya satır/kelime/harf eklemektir. vi editöründe ekleme konumuna geçmenin yöntemlerinden birini ( i komutu) daha önce belirtmiştim. Yine de tekrarlamak istiyorum :
i: imlecin, üzerinde bulunduğu karakterin hemen solundan başlayarak, Esc tuşuna basıncaya kadar basılan her karakteri metne ekler. Varsa, eski metin sağa doğru itelenir.

Diğer ekleme komutları :
a: imlecin, üzerinde bulunduğu karakterin hemen sağından başlayarak, Esc tuşuna basıncaya kadar, basılan her karakteri metne ekler. Varsa, eski metin sağa doğru itelenir.
A: imlecin, üzerinde bulunduğu satırın sonundan başlayarak, Esc tuşuna basıncaya kadar, basılan her karakteri metne ekler. Varsa, eski metin aşağı doğru itelenir.


****Bu komutların büyük veya küçük harflerle verilmesi farklı ve önemlidir. Dikkatli olunuz..

Daha önce yazılmış metin parçalarını silmek için kullanılan komutlar :

x imlecin üzerinde bulunduğu TEK karakteri sil
3x imlecin üzerinde bulunduğu karakter dahil, sağa doğru 3 karakter sil
dw imlecin bulunduğu yerden kelime sonuna kadar sil. Eğer imleç sözcüğün başındaysa, sözcüğü sil.
2dw imlecin bulunduğu yerden başlayarak 2 sözcük sil
dd imlecin bulunduğu satırı sil
2dd imlecin bulunduğu satır dahil, aşağı doğru iki satır sil
D imlecin bulunduğu yerden satır sonuna kadar sil ( d$ komutuna eşdeğerdir)
d$ Satırın sonuna kadar sil (D komutuna eşdeğerdir)

***Yanlışlıkla bir silme işlemi yaparsanız ...
Eğer hatanızı hemen farkederseniz, u komutuyla (undo) son silme işlemini geri döndürebilirsiniz (Aslında sadece son silme işlemini değil, son değişikliği geri döndürür).

Metin bloklarının yerini değiştirme

vi editörüyle metin bloklarının yerini değiştirmek istediğinizde kullanacağınız yöntem kes-yapıştır yöntemidir. Yerini değiştireceğiniz metin bloğunu önce bulunduğu yerden, uygun bir komutla ( örneğin tek satır için dd komutu gibi) silmeli (kesme işlemi); daha sonra p komutuyla (put) yeni yerine yapıştırmalısınız.


Metin Bloklarını Kopyalama

vi editörü ile metin bloklarını kopyalamak istediğinizde kullanacağınız yöntem kopyala-yapıştır yöntemidir. Kopyalayacağınız metin bloğunu önce bulunduğu yerde, y (yank) komutuyla (örneğin, tüm satır için yy komutu veya Y gibi) geçici belleğe aktarmalı ve daha sonra kopyalanacağı yere p komutu (put ) ile yapıştırmalısınız.

Metin Eklemenin / Değiştirmenin Bir Kaç Değişik Yolu

I (Insert) (Büyük i) İmlecin bulunduğu satırın BAŞINA eklemeye başla. (Esc’e kadar)
o (Open Line) (Küçük O) İmlecin bulunduğu satırın ALTINA bir boş satır aç ve oraya eklemeye başla.
O (Open above) (Büyük O) İmlecin bulunduğu satırın ÜSTÜNE bir boş satır aç ve eklemeye başla.
s (Substitute Char) İmlecin bulunduğu yerdeki KARAKTERİ sil ve yerine yeni metni eklemeye başla . (Esc’e kadar)
S (Substitute Line) İmlecin bulunduğu SATIRI sil ve yerine yeni metni eklemeye başla.
r (Replace Char) İmlecin bulunduğu karakteri bir sonra basılacak karakterle değiştir.
R (Replace Text) İmlecin bulunduğu noktadan itibaren, yeni metni eski metnin ÜZERİNE yerleştir. (Esc’e kadar)
J (Join) (Büyük j) İmlecin bulunduğu satırla arkasındaki satırı BİRLEŞTİR.
cw (Change Word) İmlecin buluduğu sözcüğü, yeni girilecek sözcükle değiştir..

Metnin İçinde Dolaşma

CTRL F (Forward) Bir ekran İLERİYE
CTRL B (Backward) Bir ekran GERİYE
CTRL D (Down) Yarım Ekran İLERİYE
CTRL U (Up) Yarım Ekran GERİYE
CTRL R (Redraw) Ekranı yeniden düzenle (Çalışırken bir başka kullanıcıdan mesaj gelirse, ekranınız bozulacaktır. Bu komut, ekranı silip yeniden oluşturarak düzenlenmiş olur)
CTRL Y Ekranı bir satır aşağı kaydır, imleç yerinde kalsın.
CTRL E Ekranı bir satır yukarı kaydır, imleç yerinde kalsın.
z RETURN (Küçük z) İmlecin bulunduğu satır ekranın EN ÜSTÜNE gelecek şekilde ekranı düzenle
z. (Küçük z ve nokta) İmlecin bulunduğu satır EKRANIN ORTASINA gelecek şekilde ekranı düzenle
z- (Küçük z ve eksi ) İmlecin bulunduğu satır EKRANIN EN ALTINA gelecek şekilde ekranı düzenle
H (Home) EKRANIN EN ÜST satırına git.
M (Mid Screen) EKRANIN ORTA satırına git
L (Lower Screen) EKRANIN EN ALT satırına git
RETURN Bir sonraki satırın ilk karakterine git.

ör:
200z RETURN 200 üncü satırı ekranın en üstüne getir.
4H Ekranın en üst satırının 4 altındaki satıra git.
5L Ekranın en alt satırının 5 üstündeki satıra git.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:58:44
Metnin İçinde Arayarak Dolaşma

Diyelimki program yazıyorsunuz ve değişiklik yapmak istediğiniz satırın yeri hakkında bir fikriniz yok. Tek hatırladığınız, değiştirmek istediğiniz satırda ‘kayit_sayısı++’ diye bir karakter dizisi var. Bu diziyi içeren bir satır bulmak için
/kayit yazıp RETURN
tuşlarına basarak bir komut yazmanız yeterli olacaktır. İmleç, içinde bu dizi geçen ilk satırda duracaktır.

Arama, imlecin bulunduğu yerden ileriye doğru yapılır. Eğer geriye doğru arama yapmak isterseniz / yerine ? karakterini kullanmanız gerekir.
Diyelim ki, programın ilk rastladığı kayit sözcüğü, sizin ilgilendiğiniz değil ve aramaya devam etmek istiyorsunuz. Bu durumda n (next) tuşuna basmanız yeterlidir. Tüm arama komutunu yeniden yazmanız gerekmez. Eğer aramanın yönünü değiştirmek isterseniz n yerine N tuşuna basınız.

Bulup Değiştirme

Diyelim ki bulunduğunuz satırda Unix olarak yazılmış bir sözcük var ve UNIX geleneklerine uymayan bu sözcüğü UNIX olarak değiştirmek istiyorsunuz. Bu işi yapmak için imleci n harfinin üzerine götürerek 3rNIX komutunu vermeniz yeterli olacaktır. Bu yöntemde bulma görevini siz; değiştirme görevini ise vi üstlenmiş oluyor. Her iki işi de vi’ın yapmasını istiyorsanız değişikliğin yapılmasını istediğiniz satırın üzerine gelip

:s/Unix/UNIX ya da
:s/nix/NIX komutlarını verebilirsiniz.

****bu komut sadece ilk rastlanan yeri değiştirir.
****Bir dosyadaki tüm Unix leri UNIX ile değiştirmek için:
:%s/Unix/UNIX/g komutu verilmelidir.


Dosya İşlemleriyle İlgili Komutlar

ZZ Dosyayı son haliyle diske kaydet ve vi’dan çık ( :wq komut dizisine eşdeğerdir).
:q Dosyada değişiklik yapılmayacak, vi’dan çık (quit)
:q! Yapılan değişikliklerden vaz geçildi, dosyayı değiştirmeden vi’dan çık (quit)
:w Dosyayı diske kaydet (vi’da kal) (write)
:wq Dosyayı diske kaydet ve vi’dan çık (write - quit)
:x vi’dan çık, değişmişse dosyayı diske kaydet (exit)
:wdosya2 Üzerinde çalışılmakta olan dosyayı, dosya2 adıyla diske kaydet. (write)
:1,100wbolum1 Üzerinde çalışılmakta olan dosyanın ilk 100 satırını bolum1 isimli bir dosyaya kaydet.
:rdosya3 dosya3 adlı dosyayı oku ve imlecin bulunduğu noktadan başlayarak ve araya ekle. (read)

ÖZET OLARAK:

(http://img172.imageshack.us/img172/7571/vinf0iy3.jpg) (http://imageshack.us)

Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:58:59
Artık ilk programımızı yazmaya başlayabiliriz (nihayet dediginizi duyar gibi oluyorum )
Hemen hemen her programlama dilinin ilk örneği olan MERHABA DÜNYA yerine MERHABA UNIX yazısını ekrana basacak olan programımızı yazalım:

vi ilk_program diyerek boş bir dosya açalım.
i (insert) tusuna basarak ilk komutumuzu girebiliriz:

echo "Merhaba UNIX"

yazıp önce ESC tuşuna sonra da :wq! tuşlarına basıp programımızı kaydedelim.
çalıştırmak için ./ilk_program yazıp enter tusuna basınca Permission Denied uyarısı alırız. Sebebi programın ilk yazıldıgı için READ-ONLY olmasıdır.
chmod 755 ilk_program yazıp entera basarsak programı hangi user ile yazdıysa o usera her turlu hak verılır. diger user ya da gruplara ise okuma ve çalıştırma hakkı verilir.
çalıştırma hakkı verıldıkten sonra ./ilk_program dersek programın çıktısı:
Merhaba UNIX
şeklinde olur

****Bu arada ./ demek bulundugumuz dizini işaret eder. ../bir üst dizini işaret eder.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:59:17
şimdi 2. programımızda login oldugumuz username'e ait dizindeki (kullanıcının root dizini) geçici dosyaları silelim.
Diyelim ki admin kullanıcısıyla baglıyız ve admin kullanıcısının root dizinindeki geçici dosyaları sileceğiz.

vi temizle komutunu vererek temizle isimli bir dosya açılır.
i (insert, küçük i) tuşuna basılarak aşağıdaki komutlar verilir:

cd ~ --->kullanıcının home dizinine gider. (root ise / dizinine, baska kullanıcı ise /export/home/xxx dizinine gider)
/usr/bin/rm *tmp --->rm programını kullanarak kullanıcının home dizinindeki uzantısı tmp olan dosyaları siler.


****/usr/bin/rm *tmp yerine rm *tmp de diyebilirdik. Tüm komutlar /usr/bin dizini altında bulunur.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:59:31
Denetim yapıları

"if" ifadesi bir ifadenin doğru olup olmadığını denetlemektedir (Çıkış durum bilgisi 0 ise, başarılı demektir). Eğer, doğru ise "then" kısmı çalıştırılmaktadır:

if ....; then
....
elif ....; then
....
else
....
fi

Genelde, if ifadesi, içerisinde test adı verilen bir komut kullanılmaktadır. Bu komut katar karşılaştırılmasında, dosyanın var olup olmadığının denetlenmesinde, dosyanın okuma hakkı olup olmadığını denetlenmesinde ... kullanılmaktadır.

"test" komutu " [ ]" köşeli parantezler olarak yazılmaktadır. Burada kullanılan boşluklar önemlidir : Parantezlerden önce ve sonra boşluk olmasına dikkat ediniz.
Örnek:

[ -f "dosya" ] : "dosya" nın dosya olup olmadığını denetler.
[ -x "/bin/ls" ] : /bin/ls çalıştırılabilir bir dosya olup olmadığını denetler.
[ -n "$değisken" ] : $degisken'in herhangi bir değer taşıyıp taşımadığını denetlemektedir.
[ "$a" = "$b" ] : "$a" nın "$b" ye eşit olup olmadığını denetlemektedir.

ÖR:


if [ "$SHELL" = "/bin/bash" ]; then
echo "Giriş kabuğunuz bash (bourne again shell) dır."
else
echo "Giriş kabuğunuz bash değil $SHELL dir"
fi

***$SHELL değişkeni kullanılan kabuğun ismini içermektedir ve biz onu "/bin/bash" ile karşılaştırıyoruz.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 09:59:49
Kısayol işlemcileri (operatörleri)

C ile tanışık olan kişiler aşağıdaki yapıyı hemen benimseyeceklerdir:

[ -f "/etc/shadow" ] && echo "Bu bilgisayar gölge şifrelemesi (shadow passwords) kullanıyor."

&& ifadesi if-ifadesine kısayol gibi kullanılabilir. İfadenin sağ tarafı ancak sol tarafı doğru olduğunda çalıştırılmaktadır. Bunu VE (AND) gibi okuyabilirsiniz. Buna göre : "/etc/shadow dosyası var VE echo çalıştırılmaktadır".
VEYA (||) işlemcisi de vardır.
Örnek:
#!/bin/sh
eiletidizini=/var/spool/mail/james
[ -r "$eiletidizini" ] || { echo "$eiletidizini dizinini okuyamıyorum" ; exit 1; }
echo "$eiletidizini de eiletiniz var.:"
grep "^From " $eiletidizini

Bu kabuk betiği e-ileti dizinini okuyup okuyamadığna bakmaktadır. Eğer, okuyabiliyorsa, dosyadan "From" içeren satırları ekrana yazmaktadır. Eğer $eiletidizini dosyasını okuyamıyorsa, VEYA işlemcisi devreye girmektedir. Normal İngilizce'de program parçasını şu şekilde okuyoruz: "E-ileti dizini okunabilir veya çık.". Buradaki sorun, VEYA'dan sonra sadece bir komuta yer olmasıdır, ancak bizim birden fazla komuta gereksinimiz vardır:
-hata mesajı görüntüle
-programdan çık
Bu ikisini bir arada kullanabilmek için, bunları adı olmayan bir fonksiyon olarak grupluyoruz.
Herşeyi VE veya VEYA'lar kullanmadan, sadece if-ifadelerinden yararlanarak da gerçekleştirebilirsiniz, VE ve VEYA'lar biraz daha kullanışlıdır.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 10:00:04
case ifadesi bir katarı (kabuktaki * ve ? de kullanılabilir) birden fazla seçenekten birine uygun düşürmede kullanılmaktadır.

case ... in
...) burada birşeyler yap;;
esac

Bir örnek ele alalım. Bir dosyanın tipini fıle komutunu kullanarak öğrenebiliriz:
file lf.gz

sonuç:

lf.gz: gzip compressed data, deflated, original filename,
last modified: Mon Aug 27 23:09:18 2001, os: Unix

Şimdi biz bu komutu sıkıştırılmış (uncompress, gzip ve zip) dosyaları açmka için bir kabuk programı yazımında kullanacağız:

#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
*) error "File $1 dosyası sıkıştırılmış bir dosya dgil.";;
esac

Eğer, dikkat ettiyseniz, burada özel bir değişken kullandık $1. Bu değişken, programa komut satırından verilen ilk parametreyi içermektedir.
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 10:00:20
select ifadesi bash kabuğuna özgüdür ve etkileşimli kullanımlarda oldukça yarar sağlamaktadır. Kullanıcı, kendisine verilen bir listeden birini seçebilmektedir:

select var in ... ; do
break
done
.... şimdi $var kullanılabilir ....,

İşte örnek:

#!/bin/sh
echo "En favori işletim sisteminiz hangisidir?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Diğer"; do
break
done
echo "Seçiminiz $var dur."

Kabuk programı şunları gerçekleştirmektedir:

En favori işletim sisteminiz hangisidir?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Diğer
#? 1
Seçiminiz Linux dur."
Başlık: UNIX SHELL SCRIPTING
Gönderen: YuRY - 06 Haziran 2007, 10:00:37
DÖNGÜLER:

Kabukta kullanabileceğiniz döngü ifadeleri şunlardır:

while ...; do
....
done

while-döngüsü denetlenen ifade doğru olduğu sürece çalışılacaktır. Döngünün herhangi bir noktasından çıkmak için "break" kullanılabilir. Döngünün herhangi bir yerinde "continue" kullanılırsa, döngünün geriye kalanı çalıştırılmamakta ve onun yerine döngünün başına dönülmektedir.

for-döngüsü boşluklar ile ayrılmış katar listesini parametre olarak almaktadır ve bunları sırasıyla ilgili değişkene atamaktadır:

for değişken in ....; do
....
done

Aşağıdaki örnekte A dan C'ye kadar olan karakterler ekrana yazmaktadır:

#!/bin/sh
for degisken in A B C ; do
echo "değişkenin değeri $degisken"
done

Aşağıda daha kullanışlı bir örnek yer almaktdadır. Örnek, rpmgoster adını taşımakta ve parametre olarak verilen rpm paketleri hakkında bilgi elde etmekte ve ekranda göstermektedir:

#!/bin/sh
# RPM paketlerinin içeriğini listeler
# KULLANIM: rpmgoster rpmdosya1 rpmdosya2 ...
# ÖRNEK: rpmgoster /cdrom/RedHat/RPMS/*.rpm
for rpmpaketi in $*; do
if [ -r "$rpmpaketi" ];then
echo "=============== $rpmpaketi =============="
rpm -qi -p $rpmpaketi
else
echo "HATA: $rpmpaketi dosyası okunamadı."
fi
done

Yukarıdaki örnekte komut satırından verilen ve tüm parametreleri içeren $* değişkenini görüyorsunuz. Programı, rpmgoster openssh.rpm w3m.rpm webgrep.rpm olarak çalıştırırsak, $* değişkeni 3 parametreyi birlikte içerecektir: openssh.rpm, w3m.rpm ve webgrep.rpm.

GNU bash ayrıca until-döngüsüne de sahiptir, ancak while ve for döngüleri genellikle yeterli olmaktadır