Linux Bash
Linux tabanlı işletim sistemlerinde varsayılan olarak kullanılan Bash komut yorumlayıcısı ve Bash script ile ilgili bilgiler yer alıyor.
Bash nedir?
Bash veya Bourne-again shell terminal veya komut yorumlayıcısı olarak adlandırılan alana yazılan komutları yorumlayan komut yorumlayıcısıdır.
Aşağıdaki gibi bir komut yazdığımızda komut yorumlayıcısı yazılan komutu işleyerek sonucu ekrana yazdırır.
lsİşte bu yorumlama işlemini işletim sistemi çekirdeği ile birlikte yapan ve SHELL olarak adlandırılan komut yorumlayıcılarıdır.
Neden Bash
Bash harici sh, csh, ksh, tcsh, zsh gibi çeşitli komut yorumlayıcıları da vardır.
Bunlardan herhangi birini kullanabilirsiniz.
Ancak Linux tabanlı işletim sistemlerinde varsayılan olarak Bash geldiğinden ve çokça kullanıldığından Bash kullanmak faydalı olacaktır.
Kullanılan komut yorumlayıcısını öğrenmek için aşağıdaki komut kullanılır.
echo $SHELLBash komut yorumlayıcısı değişken, operatör, koşullu ifadeler, döngüler ve fonksiyon kullanımına imkan verir.
Bash Script
Bazen bir komut ihtiyacımız olan işlemi yapmak için yeterli olmayabilir.
Bir değişken tanımlayıp bu değişkeni ekrana yazdıralım.
ADI="Yusuf SEZER"; echo $ADI;Komut kısa olduğundan bunu komut yorumlayıcısına yazarak çalıştırabiliriz.
Ancak kullanıcıdan alınan bir değeri kontrol edip bir değişkene aktarmak veya döngü kullanmak istediğimizde komutlar karmaşık hale gelecektir.
Bu durumda komutların bir dosyaya yazılması okunabilirlik ve tekrar kullanılabilirlik için faydalı olacaktır.
Basit bir örnek
Aşağıda yer alan basit bash script örneğini herhangi bir dizine komut olarak kayıt edin.
#!/bin/bash
echo "Merhaba dünya"Daha sonra komut dosyasını bash komutu ile çalıştırın.
bash komutBash script dosyaları çalıştırılabilir olma izni verilerek çalıştırılabilir.
chmod +x komutÇalıştırılabilir olma izni verildikten sonra aşağıdaki biçimde çalıştırılır.
./komutBash script yazarken dikkat edilmesi gereken en önemli kısım ilk satırdır.
İlk satırda shebang (#!) ve ardından kullanılan komut yorumlayıcısı yolu yer alır.
Komut yorumlayıcısı sh, php, perl vb. olabilir.
#!/bin/sh
echo "Merhaba dünya"Aşağıdaki komutun çalışması için PHP kurulu olması gerekir.
#!/bin/php
<?php echo "Merhaba dünya"; ?>İşletim sistemi ilk satırda yer alan komut yorumlayıcısına yazılan komutları iletir ve komut yorumlayıcısı komutları çalıştırır.
Yorum satırı
Bash komutlarını anlaşılabilir hale getirmek veya bir komutun çalışmasını engellemek için yorum satırı kullanılır.
#!/bin/bash
# Burası yorum alanı
echo "Merhaba dünya"
# echo "Burası çalışmayacaktır"NOT: Uzun bash script dosyalarında yorum satırı kullanmak faydalı olacaktır.
Değişkenler
Verileri geçici olarak saklamak için değişken kullanılır.
#!/bin/bash
ADI="Yusuf SEZER"
echo $ADIDeğişken tanımlarken tek veya çift tırnak kullanılabilir.
Ancak çift tırnak içine yazılan özel ifadeler bash tarafından yorumlanır.
#!/bin/bash
ADI="Yusuf $((5 + 7))"
echo $ADIDeğişken uzunluğunu almak için ${#degisken_adi} kullanılır.
#!/bin/bash
ADI="Yusuf SEZER"
echo $ADI - ${#ADI}Sadece okunabilir değişken tanımlamak için readonly anahtar kelimesi kullanılır.
#!/bin/bash
readonly ADI="Yusuf SEZER"
ADI="Yusuf Sefa SEZER" # Uyarı verir.
echo "Hoşgeldin, $ADI"Tanımlanan değişkeni kaldırmak için unset anahtar kelimesi kullanılır.
#!/bin/bash
ADI="Yusuf SEZER"
unset ADI
echo "Hoşgeldin, $ADI"Dizi tanımlamak için aşağıdaki yöntemlerden birisi kullanılır.
#!/bin/bash
KISILER=("Yusuf" "Ramazan" "Sinan" "Mehmet")
KISI_SAYISI=${#KISILER[@]} # eleman sayısı
echo $KISI_SAYISI
echo ${KISILER[3]} # 4.elemanveya
#!/bin/bash
KISI[0]="Yusuf"
KISI[1]="Ramazan"
KISI[2]="Sinan"
KISI[3]="Mehmet"
echo ${KISI[*]} # tüm elemanlarNOT: Dizinin ilk elemanına 0 ile erişilir.
Bash script ile işletim sistemine ait değişkenlere de erişilebilir.
#!/bin/bash
echo "Kullanıcı:" $USER
echo "Dizin:" $HOMEDiğer işletim sistemi değişkenlerini öğrenmek için aşağıdaki komut kullanılır.
envOluşturulan değişkeni işletim sistemine atamak için export anahtar kelimesi kullanılır.
#!/bin/bash
export ADI="Yusuf SEZER"
echo $ADI
bashNOT: İşletim sistemi yeniden başlatıldıktan sonra değişken silinecektir.
Değişkenlerde komut sonuçları saklanabilir.
#!/bin/bash
#SONUC=$(ls)
#SONUC=$(date +%Y-%m-%d)
#veya
SONUC=`ls`
echo $SONUCBash script dosyası çalıştırırken dosya adına $0, komut işlem numarasına $$, parametrelere $1,$2,$n ile parametre sayısına $# ile erişilir.
#!/bin/bash
echo "Komut ID: " $$
echo "Komut: " $0
echo "Parametre: " $1
echo "Toplam: " $#Kullanıcıdan değer almak
Kullanıcıdan değer almak için read anahtar kelimesi kullanılır.
#!/bin/bash
read
echo "Yazılan değer:" $REPLYAlınan değeri değişkene aktarmak için read anahtar kelimesine değişken adının yazmak yeterli olacaktır.
#!/bin/bash
echo "Adınız nedir?"
read ADI
echo "Hoşgeldin, $ADI"Değer alırken çeşitli parametrelerde kullanılabilir.
#!/bin/bash
read -p "Adınız:" ADI
read -sp "Şifreniz:" SIFRE
echo
echo $ADI:$SIFREAritmetik operatörler
Bash ile aritmetik işlemler yapmak için let anahtar kelimesi kullanılır.
#!/bin/bash
read -p "Birinci sayı:" SAYI1
read -p "İkinci sayı:" SAYI2
let SONUC=SAYI1+SAYI2
echo "Toplama: "$SONUC
let SONUC=SAYI1-SAYI2
echo "Çıkarma: "$SONUC
let SONUC=SAYI1*SAYI2
echo "Çarpama: "$SONUC
let SONUC=SAYI1/SAYI2
echo "Bölme: "$SONUC
let SONUC=SAYI1%SAYI2
echo "Mod: "$SONUC
let SONUC=SAYI1**SAYI2
echo "Üst: "$SONUC
let SONUC++
echo "Arttırma: "$SONUC
let SONUC--
echo "Azaltma: "$SONUCAritmetik işlemler için expr ve çift parantez de kullanılabilir.
#!/bin/bash
A=50
B=40
echo `expr $A + $B`
echo $(($A + $B))Koşullu ifadeler
Bir koşula veya şarta bağlı olarak işlem yapmak için if yapısı kullanılır.
Temel kullanımı aşağıdaki gibidir.
if [ <şart> ]
then
<komutlar>
fiBasit bir örnek;
#!/bin/bash
A=50
B=50
if [ $A -eq $B ]
then
echo "$A ve $B eşittir."
fiNOT: Koşullu ifadelerdeki şartlar test komutu ile işlenir.
Aritmetiksel operatörler
-eq Eşittir.
-ne Eşit değildir.
-gt Büyüktür.
-ge Büyük eşittir.
-lt Küçüktür.
-le Küçük eşittir.
Metin operatörleri
= Eşittir.
=! Eşit değildir.
-z Uzunluk sıfırdır.
-n Uzunluk sıfır değildir.
Mantıksal operatörler
! Değildir.
-a Ve
-o Veya
Dosya ve dizin operatörleri
-f Dosya özel mi yoksa sıradan mı?
-r Dosya okunabilir mi?
-w Dosya yazılabilir mi?
-x Dosya çalıştırılabilir mi?
-d Dosya mı dizin mi?
-s Dosya boş mu dolu mu?
-e Dosya var mı yok mu?
Detaylı bilgiye man test komutu ile ulaşabilirsiniz.
Koşul sağlanmadığı durumda else ile başka komutlarda çalıştırılabilir.
#!/bin/bash
A=50
B=40
if [ $A -eq $B ]
then
echo "$A ve $B eşittir."
else
echo "$A ve $B eşit değildir."
fiBir koşul ikiden fazla sonuç veriyorsa elif ile başka bir koşulda belirtilebilir.
#!/bin/bash
A=50
B=40
if [ $A -gt $B ]
then
echo "$A sayısı $B sayısından büyüktür."
elif [ $A -lt $B ]
then
echo "$A sayısı $B sayısından küçüktür."
else
echo "$A ve $B eşittir."
fiMantıksal operatörler iki şartı birbirine bağlamak için kullanılır.
Örneğin; Kullanıcı adı Yusuf ve şifresi SEZER ise başarıyla giriş yapıldı yazan bir script yazmak istersek -a veya && mantıksal operatörlerini kullanabiliriz.
#!/bin/bash
read -p "Adınız:" ADI
read -sp "Şifreniz:" SIFRE
echo
if [ $ADI = "Yusuf" ] && [ $SIFRE = "SEZER" ]
#if [ $ADI = "Yusuf" -a $SIFRE = "SEZER" ]
then
echo "Başarıyla giriş yapıldı."
else
echo "Kullanıcı adı veya şifre yanlış görünüyor."
fiBirden fazla koşul olması kodları karmaşık hale getirir.
Bu durumda case yapısı kullanılabilir.
Temel kullanımı aşağıdaki gibidir.
case <değişken-değer> in
<durum-1>) <komutlar>
;;
<durum-2>) <komutlar>
;;
esacÖrnek kullanım aşağıdaki gibidir.
#!/bin/bash
read -p "Haftanın kaçıncı günü:" GUN
case $GUN in
1) echo "Pazartesi"
;;
2) echo "Salı"
;;
3) echo "Çarşamba"
;;
4) echo "Perşembe"
;;
5) echo "Cuma"
;;
6) echo "Cumartesi"
;;
7) echo "Pazar"
;;
*) echo "Hatalı bir gün"
;;
esacBash menü veya seçme işlemlerinde kullanmak için select yapısı yer alır.
Örnek kullanım aşağıdaki gibidir.
#!/bin/bash
PS3="İşlem:"
select ISLEM in yedekal yedekyukle hiçbiri çıkış
do
case $ISLEM in
yedekal)
echo "Yedek alma işlemi"
;;
yedekyukle)
echo "Yedek yükleme işlemi"
;;
hiçbiri|çıkış)
break
;;
*) echo "Hatalı işlem"
;;
esac
doneDöngüler
Tekrar eden işlemlerde for, while ve until döngüleri kullanılır.
for kullanımı aşağıdaki gibidir.
for degisken in <liste>
do
<komutlar>
doneÖrnek kullanım aşağıdaki gibidir.
#!/bin/bash
for SIRA in {1..10}
do
echo $SIRA
doneDizi elemanlarını listelemek için aşağıdaki komut kullanılabilir.
#!/bin/bash
KISILER=("Yusuf" "Ramazan" "Sinan" "Mehmet");
for KISI in ${KISILER[*]}
do
echo $KISI
donefor döngüsünün geniş bir kullanım şekli vardır.
while kullanımı aşağıdaki gibidir.
while [ <şart> ]
do
<komutlar>
doneÖrnek kullanım aşağıdaki gibidir.
#!/bin/bash
A=10
while [ $A -gt 0 ]
do
echo $A
A=$(($A - 1))
#A=`expr $A - 1`
doneuntil kullanımı aşağıdaki gibidir.
until [ <şart> ]
do
<komutlar>
doneuntil döngüsünün while döngüsünden farkı şart yanlış olduğu sürece çalışmasıdır.
#!/bin/bash
A=10
until [ ! $A -gt 0 ]
do
echo $A
A=$(($A - 1))
#A=`expr $A - 1`
doneDöngüler iç içe de kullanılabilir.
#!/bin/bash
A=0
while [ "$A" -lt 10 ]
do
B="$A"
while [ "$B" -ge 0 ]
do
echo -n "$B "
((B--))
done
echo
((A++))
doneDöngü adımını atlamak için continue anahtar kelimesi kullanılır.
#!/bin/bash
for SAYI in {1..5}
do
if [ $SAYI -eq 3 -o $SAYI -eq 5 ]
then
continue;
fi
echo $SAYI
doneDöngüyü sonlandırmak için break anahtar kelimesi kullanılır.
#!/bin/bash
for SAYI in {1..5}
do
if [ $SAYI -eq 3 ]
then
break;
fi
echo $SAYI
doneFonksiyonlar
Komutları düzenli hale getirmek ve yazılan komutları tekrar kullanabilmek için fonksiyon yapısı kullanılır.
Fonksiyonlar aşağıdaki gibi tanımlanır.
fonksiyon_adi () {
<komutlar>
}
veya
function fonksiyon_adi {
<komutlar>
}Fonksiyon isimleri anlaşılabilir ve işlevini belirten bir isim kullanmak faydalı olacaktır.
#!/bin/bash
adi_yazdir () {
echo "Yusuf SEZER"
}
adi_yazdir
adi_yazdirFonksiyonlar kullanıldığı satırdan önce tanımlanmalıdır.
Fonksiyonlar parametrelerine $1, $2, $n ile erişilir.
#!/bin/bash
yazdir () {
echo "Gönderilen değer:" $1
}
yazdir "Merhaba dünya"Değer döndürmek için return anahtar kelimesi kullanılır ve $? ile döndürülen değere ulaşılır.
#!/bin/bash
topla () {
return `expr $1 + $2`
}
topla 10 20
echo $?Fonksiyon içinde tanımlanan değişkenlere fonksiyon dışından erişilebilir.
#!/bin/bash
topla () {
ADI="Yusuf SEZER"
}
topla
echo $ADIBu durumun önüne geçmek için local anahtar kelimesi kullanılır.
#!/bin/bash
topla () {
local ADI="Yusuf SEZER"
}
topla
echo $ADIBash içinde yer alan değişken, operatör, koşullu ifadeler, döngüler, fonksiyonlar gibi özellikler sayesinde özel Bash script dosyaları hazırlayabilir ve kullanabilirsiniz.
Yazılan Bash script içinde Linux komut satırında kullanılan tüm komutlar kullanılabilir.
Bash script içinde Linux komutlarını kullanarak yedekleme, yedek alma, dosya gönderme, sistem durumu gibi çeşitli araçlar yapabilirsiniz.
Yapılan her bir iş öncesi olduğu gibi Bash script hazırlarken de plan yapmak faydalı olacaktır.
Linux Derslerine buradan ulaşabilirsiniz…
Hayırlı günler dilerim.