top of page

Yapılandırılmış Komut Kullanımı-1

  • Yazarın fotoğrafı: Huseyin Şahan
    Huseyin Şahan
  • 5 Nis
  • 4 dakikada okunur

Bir komut dosyasına basit komutlar yazarak çalıştırabilirsiniz. Ancak bazen mantıksal işlemler yapmanız ve çıktıları değerlendirip buna göre işlemler yapmak isteyebilirsiniz. Bu işlemleri yapmak için yapılandırılmış komutları kullanmanız gerekir. if veya case gibi bu blog yazımızda if-then kullanımını, string ve sayıların karşılaştırılmasının nasıl yapılacağını ele alacağız. case kullanımını sonraki blog yazılarımızda ele alacağız.


if-then yapısı

if-then yapısı bir komutun başarılı olup olmadığını kontrol eder.Komut başarıyla çalışırsa yani çıkış durumu sıfırsa ardından gelen komutlar çalıştırılır. Aşağıda if then kullanımının temeli gösterilmiştir.

if command
then
commands
fi

Basit bir komut yazalım. Bunun için bir dosya oluşturun:

darkside@debian:~/scriptfiles$ touch ifexample

Dosyayı açın ve aşağıdaki komutları yazın:

if pwd
then
echo "Komut Başarı ile çalıştı..."
fi

Bu komutu çalıştırmak için çalıştırma izni vermeniz gerekir:

darkside@debian:~/scriptfiles$ chmod u+x ifexample

İzni verdikten sonra dosyayı çalıştırabilirsiniz.


Eğer çaışmayan bir komut girdiğimizde then kısmını atlayacaktır. Aşağıda bunun için örnek verilmiştir:

if agsgsgag
then
echo "Komut Başarı ile çalıştı..."
fi
echo "Komut Çalıştırılmadı.."

Birden fazla komut çalıştırabilirsiniz:

#! /bin/bash

testuser=darkside
if grep $testuser /etc/passwd
then
echo "Kullanıcı mevcuttur:"
echo "Kullanıcı ana dizini: /home/$testuser"
fi

if-then -else yapısı


Daha önce sadece if kullanarak eğer verilen ifade doğru ise komut çalışacak eğer yanlış ise komut atlanacaktı. Eğer if bloğu çalışmazsa ve başka bir durum kullanmak isterseniz else anahtar kelimesini kullanabilirsiniz.

#! /bin/bash

if command
then
	commands
else
	commands
fi

Önceki örneğimizi genişletelim ve else anahtar kelimesi ile kullanıcı bulunmadığında kullanıcı yok hatası versin:

#! /bin/bash
testuser=darkside
if grep $testuser /etc/passwd
then
echo "Kullanıcı mevcuttur:"
echo "Kullanıcı ana dizini: /home/$testuser"
else
echo "Kullanıcı sistemde mevcut değil.."
fi

Burada eğer kullanıcı sistemde mevcutsa if değilse else bloğu çalışacaktır. Ancak burada tam olarak eşleşme sağlamak isterseniz grep komutunda -w anahtar kelimesini kullanın.


İç içe if-else kullanımı


Önceki örneğimizde else bloğunda birdaha if else kullanabiliriz. Eğer kullanıcı mevct değilse ancak klasör mevcutsa bu kod güzel çalışır.

#! /bin/bash
testuser=darkside
if grep $testuser /etc/passwd
then
 echo "Kullanıcı mevcuttur:"
 echo "Kullanıcı ana dizini: /home/$testuser"
else
 echo "Kullanıcı sistemde mevcut değil.."
 if ls -d /home/$testuser 2> /dev/null
 then
 echo "Kullanıcı yok ancak ana dizini var.."
 else
 echo "Kullnıcının ana dizinide yok.."
 fi
fi

Burada eğer ls komutu dizini bulamazsa bu durumda ekrana hata çıktısı vermemesi için 2> /dev/null ile hata çıktısını boşluğa gönderdik.


Ancak bu şekilde iç içe karmaşık kod yazmak yerine elif anahtar kelimesi ile if bloğundaki şart çalışmazsa başka bir şart belirtebiliriz. Örneğin yukardaki komutta eğer kullanıcı yokda elif bloğu ile kullanıcı dizini varmı şeklinde bir sorgu atabiliriz.

#! /bin/bash
testuser=darkside
if grep $testuser /etc/passwd
then
echo "Kullanıcı mevcuttur:"
echo "Kullanıcı ana dizini: /home/$testuser"
elif ls -d /home/$testuser 2> /dev/null
then
echo "Kullanıcı yok ancak ana dizin klasörü var.."
else
echo "Kullanıcı sistemde mevcut değil.."
fi

Bu sayede daha temiz ve anlaşılır bir kod oldu. İsterseniz birden fazla elif komutunu birlikte kullanabilirsiniz.


Betiklerde test komutunun kullanımı

test komutu bir koşulu değerlendirmenizi sağlar koşul doğru ise true yanlış ise false döner.

darkside@debian:~/scriptfiles$ test ifade

Aşağıdaki komut dosyasında test komutuna bir parametre verilmeden kullanılmıştır. Bu durumda ifadeyanlış olarak değerlendirilecektir.

#! /bin/bash
if test
then
  echo "İfade doğru döndü"
else
  echo "İfade yanlış döndü"
fi

Başka bir örnek verelim bir değişkenşn içeriğinin olup olmadığını test edebiliriz.

#! /bin/bash

benim_degerim="İçerik Dolu"
if test "$benim_degerim"
then
	echo "$benim_degerim ifadesi doğru döndürdü"
else
	echo "$benim_degerim ifadesi yanlış döndürdü"
fi

Burada test komutundan sonra ifadeyi " " içinde kullanın. Bunun nedeni değişkenin boşluk içermesidir. Burada test komutunun başka alternatifide vardır bu if ifadesinden sonra köşeli parantez kullanmaktır.


Ancak test komutunun kullanımı bu kadar değildir. Bu komut aşağıdaki durumlarda kullanılır.


  • Sayısal Karşılaştırmalar (Numeric Comparisons)

    • Değişkenlerin sayısal değerlerini karşılaştırmak için kullanılabilir.

  • Dize Karşılaştırmaları (String Comparisons)

    • İki dizenin eşit olup olmadığını ya da birinin diğerine göre büyüklüğünü kıyaslamak için kullanılır.

  • Dosya Karşılaştırmaları (File Comparisons)

    • Bir dosyanın var olup olmadığını, erişilebilirliğini ya da türünü kontrol etmek için kullanılır (örneğin, dosya var mı, dizin mi, okuma yazma izni var mı vb.).


Hazırsanız her birini tek tek ele alalım.


Sayısal Karşılaştırmalar

Aşağıda sayısal karşılaştırmalar için yaygın operatörler verilmiştir:

Karşılaştırma

Açıklama

n1 -eq n2

n1'in n2'ye eşit olup olmadığını kontrol eder

n1 -ge n2

n1'in n2'den büyük veya eşit olup olmadığını kontrol eder

n1 -gt n2

n1'in n2'den büyük olup olmadığını kontrol eder

n1 -le n2

n1'in n2'den küçük veya eşit olup olmadığını kontrol eder

n1 -lt n2

n1'in n2'den küçük olup olmadığını kontrol eder

n1 -ne n2

n1'in n2'ye eşit olmadığını kontrol eder

Aşağıda bu durumu anlatmak için bir örnek verilmiştir. Siz bu paramtreleri kullanarak istediğiniz örnekleri yazabilirsiniz.

#!/bin/bash
# Sayısal test değerlendirmeleri
#
value1=10
value2=11
#
if [ $value1 -gt 5 ]
then
	echo "Değer $value1 5'ten büyüktür"
fi
#
if [ $value1 -eq $value2 ]
then
	echo "Değerler eşittir"
else
echo "Değerler farklıdır"
fi

Dize Karşılaştırmaları

Dize karşılaştırmaları yapmak için aşağıdaki operatörler kullanılır.

Karşılaştırma

Açıklama

str1 = str2

str1 ile str2'nin eşit olup olmadığını kontrol eder

str1 != str2

str1 ile str2'nin eşit olmadığını kontrol eder

str1 < str2

str1'in str2'den küçük olup olmadığını kontrol eder

str1 > str2

str1'in str2'den büyük olup olmadığını kontrol eder

-n str1

str1'in uzunluğunun sıfırdan büyük olup olmadığını kontrol eder

-z str1

str1'in uzunluğunun sıfır olup olmadığını kontrol eder

İlk olarak dize eşitliği için bir örnek verelim:

#!/bin/bash
# Dize eşitliği testi
testuser=darkside
#
if [ $USER = $testuser ]
then
 echo "Hoşgeldin $testuser"
fi

Burada iki ifadenin eşitliği kontrol edilmiştir. Eğer isterseniz eşt olmayan bir örnek yapabilirsiniz.

#!/bin/bash
# Dize eşitliği testi
testuser=rich
#
if [ $USER != $testuser ]
then
  echo "Bu kullanıcı $testuser değil !"
fi

Bir başka kullanım olarak dize sıralaması yapabiliriz. Ancak burada dikkat etmemiz gereken unsur kabuk > ve < işaretlerini veri yönlendirme olarak kullanıldığını zannedebilir. Bunu engellemek için \ işaretini kullanın. Aşağıda basit bir örnek verilmiştir.

#!/bin/bash
# Doğru dize karşılaştırma

val1=baseball

val2=hockey

#

if [ $val1 \> $val2 ]

then

  echo "$val1 değeri büyüktür $val2"

else

  echo "$val1 değeri küçüktür $val2"

fi

gibi kullanabilirsiniz.


Dize sıralamada Büyük karakterler küçük karakterlerden önce gelir. bunun nedeni kabuğun ASCII sıralama kullanmasıdır.


Başka örnek dize uzunluğunu bulabilrsiniz.


Bash'te bir dizenin uzunluğunu kontrol etmek için -n ve -z operatörleri kullanılır:

  • -n: Dize boş değilse (uzunluğu sıfırdan büyükse) doğru döner.

  • -z: Dize boşsa (uzunluğu sıfırsa) doğru döner.


#!/bin/bash
# Dize uzunluğu testi

val1=testing

val2=''

#

if [ -n $val1 ]

then

  echo "$val1 dizesi boş değil"

else

  echo "$val1 dizsi boş"

fi

#

if [ -z $val2 ]

then

  echo "$val2 dizesi boş"

else

  echo "$val2 dizesi boş değil"

fi

gibi kullanabilirsiniz.


Bu blog yazımızda if-then-else-elif kullanımlarını detaylıca inceledik ayrıca sayı ve dizeleri nasıl karşılaştırabileceğimizi betik dosyaları yazarak gördük.


Bir sonraki blog yazımızda dosyaları nasıl karşılaştırabileceğimizi ele alacağız. Sonraki blog yazımızda görüşmek üzere...


Comments


bottom of page