Sadık KILIÇ

Web Tabanlı Hafıza Yerleşimi

Bash Özel Parametreler

Linux/Unix ortamlarında scriptler yazarken, script içerisinde önceki çalışan komutun başarılı olup olmadığını, yada script”in kaç parametre ile çağrıldığı vb bilgilere ihtiyaç duyabilirsiniz. Yada scriptin çalışırken process id (pid)”sine gereksinim duyabilirsiniz. Bash bu bilgileri edinmemize olanak sağlayan bazı özel parametreler içerir. Bunların en çok bilineni ve kullanılanı şunlardır . $*, $@, $#, $$, $!, $?, $-, $_

Bu parametreleri kısaca tanımlayıp, ne gibi durumlarda kullanılabileceğini bir kaç örnekle inceleyelim.

    • $* -scripte gelen parametrelerin listesini verir.
  • $@ -scripte gelen parametrelerin listesini verir.
  • $#-scripte gelen parametre sayisini verir.
  • $$-process id (pid)” yi verir
  • $! -en son çalışan background (arkaplan) işlemin pid”sini verir.
  • $?-son çalışan komutun exit status”unu verir.
  • $- -son çalışan komuta ait son parametreyi verir.
    • $* , $@, ${N}

Çift tırnak içinde kullanılmayan $* ve $@ parametreleri aynı işleve sahiptir. Her ikiside parametrelerin listesini verir. Bunlara pozisyon parametreleri deniliyor. Parametre listesindeki 0”ncı eleman scriptin ismidir. Yani script dosyasının ismini kullanmak istersek $0”ı kullanıcağız. Benzer şekilde $1 birinci parametreyi, $2 ikinci parametreyi, $N N”nci parametreyi verir.

Ufak bir örnekle daha anlaşılır olacaktır. test_params1.bash isimli scripting icerigi aşağıdaki gibi olsun.

 
cat test_params1.bash
#!/bin/bash
echo "parametreler: $@"
echo "parametreler: $*"
echo "script: $0"
echo "birinci parametre: $1"
echo "ikinci parametre : $2"

bu script iki parametreyle çağrıldığında aşağıdaki çıktıyı üretecektir.

./test_params1.bash abc 123
parametreler: abc 123
parametreler: abc 123
script:./test_params1.bash
birinci parametre: abc
ikinci parametre : 123
    • $#

Çoğu zaman scriptlerde parametre sayısını kontrol etme ihtiyacı olur. $# parametresi parametre sayısını verir. Daha önce söylendiği üzere $0 scriptin isminde tekabul eder ve bu sayıya dahil değildir. $1 ”den$N ”ekadar ki kaç parametre girildiğini söyle.

Örneğin çalışması için 3 parametreye ihtiyaç duyan bir scriptimiz olsun. parametre sayısını kontrol edip, kullanıcıya scripti nasıl çalıştırması gerektiği bilgisini verebiliriz. scriptimizin içeri şu şekilde;

cat test_params2.bash
#!/bin/bash
function printUsage {
echo "Hatali Kullanim!!"
scriptname=$0
echo "Kullanim :$scriptname { param1 } { param2 } { param3 }"
exit 1
}
 
if [[ $# -ne 3 ]]; then
printUsage
fi
 
echo "birinci parametre: $1"
echo "ikinci parametre : $2"
echo "ucuncu parametre : $3"

test_param2.bash, 2 parametreyle çalışır ve aksi durumlarda aşağıdaki gibi kullanıcıyı uyarır.

./test_params2.bash abc
Hatali Kullanim!!
Kullanim :./test_params2.bash { param1 } { param2 } { param3 }
    • $$ ve $!

Bu iki parametre proseslerle ilgili ilgili. $$ shell”in process id”sini verirken, $! background”da en son çalışan process”in id”sini verir. test_params3.bash scriptiniçalıştırmayı deneyebilirsiniz.

 
 
cat test_params3.bash
#!/bin/bash
echo -e "Process ID=$$"
sleep 10 &
echo -e "Background Process ID=$!"

test_param3.bash çıktı olarak şöyle birşey üretir.

./test_params3.bash
Process ID=1988
Background Process ID=1989
    • $?

Son olarak $? parametresinden bahsedecek olursak, $? en son çalışan komutun exit status kodunu verir.Komut eğer sorunsuz bir şekilde işini yapmışsa 0 kaduyla çıkar. Çeşitli durumlar için farklı exit kodları üretebilir. Komutların man sayfalarından exit kodlarını öğrenebilirsiniz.

test_param4.bash olmayan bir komutu çalıştırmayı deniyor. ve sonrasında komutun exit kodunu kontrol ediyor.

cat test_params4.bash
#!/bin/bash
destroy_the_world #olmayan bir komut
if [ "$?" -ne "0" ]; then
echo "HATA, Komut duzgun calismadi !"
fi

test_param4.bash aşağıdaki çıktıyı üretecektir.

./test_params4.bash
./test_params4.bash: line 2: destroy_the_world: command not found
HATA, Komut duzgun calismadi !

,

Leave a Reply

Your email address will not be published. Required fields are marked *