Archive

Archive for the ‘Bash Script’ Category

Bash Scriptde Tarih Kullanımı

 Bash Scriptde Tarih KullanımıEvet arkadaşlar bu yazımızda shell script hazırlarken tarih çıktılarını nasıl işimize yarar hale getirebiliriz onu örneklerle göstermeye çalışacağım.

tarih çıkmızı date komutu ile aldığımızı bir çoğumuz biliyordur. Şimdi yapacağımız date komutuna ilave olarak vereceğimiz parametreler ile onu istediğimiz gibi süslemek.
%H parametresi bize 24 saatlik saat dilimine göre saati gösterir (0-23)
Örneğin:
date +”%H” yazarsak alacağımız çıktı örneğin saat 10:00 (Öğleden Önce) ise,
$server> 10
olacaktır. Eğer Saat 5 olsaydı 05 gibi bir çıktı alacaktık.%H parametresi 24 saatlik düzene göre işler. Eğer 5′in başındaki 0(sıfır)’ın görünmesini istemiyorsak %H parametresi yerine %l de kullanabiliriz. %l ‘nin kullanım amacı 12 saatlik dilime göre bize çıktı verir oysa %H 24 saatlik dilime göre çalışıyordu
%M parametresi de bize dakikayı gösterecektir. Dakikayı genellikle saatin yanında kullanırız tek başına kullanma durumumuz çook nadir olur. Saat ile beraber örnek kullanımı bir alt satırdadır.

date +”%H:%M” yazarsak alacağımız çıktı örnek aşağıdaki gibi olur(Saatin 10:15 olduğunu düşünelim)
$server> 10:15
olacaktır.

Biraz daha ileri gidelim süslemede ve 12 saatlik bir gösterimin sonuna Öğleden önce veya sonra yazdıralım.
$server> date +”%l:%M %p”
yazarsak sistem bize aşağıdaki örneğe benzer bir çıktı verir.
$server> 5:22 PM
Saatlerden sonra birde tarih kullanımına bakalım.
İstediğimiz örneğin 12-Ocak-1988 benzeri bir çıktı olsun yapmamız gereken
$server> date +”%d-%b-%Y”
yazmak. Bu şekilde
$d => Gün
$b => Ay (Kısa)
$Y => Yıl
olarak bilgimizi almış oluyoruz. Peki 12-01-1988 tarzı bir çıktı almak istersek ne olacak içerisinde bulunduğumuz ay’a ait çıktıyı nasıl rakamsal olarak göstereceğiz? Çok basit sadece yapmamız gereken istediğimiz yerde %m parametresini kullanmak. Daha fazla detaylı bilgi istiyorsak yapmamız gereken sadece date –help yazmak
Sağlıcakla kalın

Alıntıdır

Bash Script’de Toplama İşlemi Örneği

Bu yazımızda iki sayının toplamasını sağlayan script kodunu sizlere vereceğiz. İki sayıyı toplamak için gereken bash script kodu alttadır;

#!/bin/bash
#
# Linux Shell Scripting Tutorial 1.05r3, Summer-2002
#
# Written by Vivek G. Gite
#
# Latest version can be found at http://www.nixcraft.com/
#
# Q10
#
a=5.66
b=8.67
c=`echo $a + $b | bc`
echo “$a + $b = $c”

#
#
#
#

Kodda gördüğünüz gibi a sayısı ile b sayısı toplaması yapılmaktadır.

Kullanıcı,Tarihi ve Klasörü Gösteren Script

Bu yazımız da, bağlı olan kullanıcıyı, tarihi ve o anki içinde olduğunuz klasörü gösteren bash script örneğini bu yazımızdan bulabilirsiniz.

#!/bin/bash
#
# Linux Shell Scripting Tutorial 1.05r3, Summer-2002
#
# Written by Vivek G. Gite
#
# Latest version can be found at http://www.nixcraft.com/
#
# Q5
#
echo “Merhaba, $LOGNAME”
echo “Şu an ki Tarih `date`”
echo “Kullanıcı `who i am`”
echo “Klasör `pwd`”

#
# ./ch.sh: vivek-tech.com to nixcraft.com referance converted using this tool
# See the tool at http://www.nixcraft.com/uniqlinuxfeatures/tools/
#

Kabuk Programlama (shell programming- scripting) -3

Örnek Kabuk Programı
Sistem görevlisinin en çok kullandığım komutlardan birisi ;

ps -aux grep -i xxx

komutudur. Bu satır yardımıyla çalışan xxx isimli program hakkında daha detaylı bilgi elde edilebilir. ps komutu detaylı bir süreç listesini ekrana verirken çıktı doğrudan grep komutuna yönlendirilir ve sadece istediğimiz bilgi ekranda görünür. Fakat her zaman aynı uzun satırı tekrar tekrar yazmaktansa bu satırı bir dosyaya gönderip, dosya adını komut satırından çalıştırmak zamandan tasarruf sağlayacaktır. Biz de öyle yapalım ve aşağıdaki satırları “goster” isimli dosyaya yazalım.

#!/bin/bash
if [ $# = 1 ]
then
ps -ax | grep -i $1
else
ps -ax
fi

Ardından dosyayı PATH değişkeninin işaret ettiği dizinlerden

/usr/local/bin

altına yerleştirip çalıştırılabilir olması için

chmod +x /usr/local/bin/goster

komutunu uygulayın. Kendi yazdığınız dosyaları

/usr/local

veya

~/bin

dizini altına kopyalamanız bunların derli toplu olarak tek bir dizinde her an erişilebilir şekilde durmaları açısından önem taşır.
Dosyaya biraz daha yakından bakalım. İlk satır, bu dosyanın /bin/bash programı tarafından çalıştırılacağını gösterir. İkinci satır yardımıyla komut satırı üzerinde kaç tane opsiyon olduğu bulunur. $# çevresel değişkeni her biri TAB veya boşluk karakteri ile ayrılmış komut satırı opsiyonları sayısını verir. Aşağıdaki komutta toplam 3 opsiyon vardır.

$ ls –8bit -F -b

$# komutuna benzer şekilde $1, $2, $3 … değişkenleri de opsiyonları verir. Yukarıdaki komutta $1, $2, $2 değişkenleri sırasıyla

–8bit
-F
-b

değerlerini alırlar. Komut satırından çalıştırılan komut ise $0 değişkenine atılır. Yukarıdaki örnekte $0 değişkeni ls değerini tutacaktır.
goster dosyasına tek opsiyon yollayacağız. Bu opsiyon da hakkında detaylı bilgi alacağımız süreç olacaktır. Dosya içinde $1 değişkenini ps komutuna yerleştirmek için :

ps -ax | grep -i $1;

yazılır. Bundan sonra komut satırında, örneğin:

$ goster bash

girilirse $1 değişkeni bash e eşit olacak ve bu da

ps -ax grep -i bash

eşdeğer komutunu çalıştıracaktır. Komut olarak sadece goster girilirse $# değişkeni 0′a eşit olacağından dosyada yeralan ve hiç bir filtreleme yapmayan

ps -ax

komutu çalışır.

Kabuk Programlama (shell programming- scripting) -2

 Kabuk Programlama (shell programming  scripting)  2
if-else Kalıbı ve Kontrol İşlemleri
Hemen her programlama dilinde olan if kalıbı bir Linux komutunun çalışmasını kontrol (test) eder. if komutu yerleşik bir komuttur. if komutunun ardından gelen Linux komutu çalıştırılır ve komutun çıkış durumu (exit status) 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. Her if, bir fi komutuyla bitmelidir. Aşağıda if-then-else komutunun örnek sözdizimi görülüyor.

if linux komutu
then
komut1
komut2

else
komut1
komut2

fi

if komutu genellikle kendine test komutu ile birlikte kullanım bulur. Bu komut yardımıyla mantıksal işlemler yapılabilir, sayılar ve hatta diziler karşılaştırılabilir. Anahtar sözcük olan test’ten sonra opsiyonlar ve/veya karşılaştırılacak olan değerler yazılır. Her opsiyon bir mantıksal işleme karşılık gelir. Örneğin -lt opsiyonu ilk girilen aritmetik değişkenin ikinci değerden küçük olup olmadığını denetler. Benzer şekilde = opsiyonu da iki karakter kümesinin eşitliğini kontrol eder. Aşağıda test komutunun örnek kullanımı yeralıyor.

$ test 5 -eq 3
$ a=”linux”
$ test $a=”linux”

komutun işletilmesinin ardından kabuğa bir değer döndürülür. Bu değer komut başarılı olarak işletilmişse 0, 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 de bu yolla öğrenilebilir.

$ sayi=4
$ test $sayi -eq 4
$ echo $?
0
$ test $sayi -lt 2
$ echo $?
1

test komutu yerine parantezler de kullanılabilir. Yukarıdaki iki örnek, parantez kullanılarak şu şekilde yazılabilir:

$ [ $sayi -eq 4 ]
$ [ $sayi -lt 12 ]

Dikkat edilmesi gereken bir nokta, köşeli parantez kullanırken araya boşlukların eklenmesidir. Parantezler başlı başına bir komut olarak görüldüklerinden sağında ve solunda en az bir boşluk bırakılmalıdır. test komutunda sıkça kullanılan diğer seçenekler şunlardır:

Aritmetik karşılaştırma
-gt büyük
-lt küçük
-ge büyük eşit
-le küçük eşit
-eq eşit
-ne eşit değil
Dizisel karşılaştırma
-z boş dizi
-n tanımlı dizi
= eşit diziler
!= farklı diziler
Dosya karşılaştırması
-f dosya var
-s dosya boş değil
-r dosya okunabilir
-w dosyaya yazılabilir
-x çalıştırılabilir dosya
-h sembolik bağlantı
-c karakter aygıt
-b blok aygıt
Mantıksal karşılaştırma
-a VE
-o VEYA
! DEĞİL

if komutunun test ile birlikte kullanılabildiğini daha önce belirtmiştik. Aşağıda bununla ilgili küçük bir örnek yeralıyor.

#!/bin/bash
echo “0 ile 20 arasinda bir sayi secin”
read sec
if [ $sec -lt 10 ]
then
echo “Secilen sayi tek basamakli”
else
echo “Secilen sayi cift basamakli”
fi

Her if komutu bir fi ile son bulmalıdır.

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 olan komutlarla birlikte belirtilir. Tüm yapı esac komutu ile son bulur.

case anahtar-sozcuk in
secenek1)
komutlar
;;
secenek2)
komutlar
;;
*)
komutlar
;;
esac

Seçenekler arasında özel karakterler (*, [, ], ? gibi) kullanılabilir. Hiçbir eşleme yapılmadığı zaman *) seçeneği değerlendirilecek ve buna bağlı olan komutlar işletilecektir. * kullanımı isteğe bağlıdır. Aşağıda case komutuna ilişkin kısa bir örnek veriliyor.

#!/bin/bash

clear
echo “1. ekrani temizle”
echo “2. sistemdekileri goruntule”
echo “3. dizindeki dosyalari goster”

echo -n “Secenegi giriniz : ”
read secenek

case $secenek in
1)
clear
;;
2)
w
;;
3)
ls -al
;;
*)
echo Hatali secenek
esac

Döngüler
Diğer hemen tüm programlama dillerinin en büyük gücü olan döngü işlemlerine kabuk altında da izin veriliyor. Burada programcı tarafından en çok kullanılan 2 döngü tipi anlatılacaktır: while ve for. while komutu her döngüde bir denetleme mekanizmasını harekete geçirirken for döngüsü bir listenin elemanlarını sırayla seçer.

while-do Döngüsü
Döngü bloğu while anahtar kelimesiyle başlar, ardından gelen koşul sağlandığı sürece döngü işletilir. Ö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, aksi halde sonsuz döngü oluşur.

while kosul ifadesi
do
komutlar
done

if komutuyla birlikte kullanılan test komutu, while döngüsünde koşul ifadesi olarak da yer alabilir. Aşağıda 1′den 100′e kadar sayan ve ekrana basan bir döngü görülüyor.

#!/bin/bash
deger=0
while [ $deger -lt 100 ]
do
deger=$((deger+1))
echo $deger
done

Yukarıda kullanılan (( ve )) karakterleri arasına matematiksel bir işlem getirilebilir. Bu özellik bash kabuğuna özgüdür.

for-do döngüsü
Bir liste dahilindeki tüm değerlere sırayla erişimi sağlar. for komutundan sonra yeralan liste sırayla kullanılır ve herbirisi 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 … degerX
do
komutlar
done

Aşağıdaki örnek bu döngüyü kullanarak ekrana bir dizi kelime yazıyor. Döngü boyunca akasya, elma ve visne kelimeleri “agac” değişkenine kopyalanıyor ve her döngüde bu değişkenin içerdiği bilgiler ekrana yazılıyor.

for agac in akasya elma visne
do
echo $agac
done

for-do döngüsü, dosya isimleri üzerinde yapılan işlemlerde de büyük kolaylıklar sağlar. Bunun için özel karakterlerden yararlanmak da olasıdır. Örnek olarak * karakteri o anki çalışma dizini içindeki tüm dosyaları seçer.

for a in * ; do
file $a
done