Bash Shell Special Parameters

Shell’in özel anlam yüklediği değişkenler Special Parameter olarak bilinmektedir.

Bu parametrelerin değerleri mevcut script’e göre hesaplanmaktadır.

Değiştirilemezler bu yüzden tuttukları verilere güvenebiliriz.Bu yazıda Special Parameter’lerin birkaçına değineceğiz.

Diğer parametreler için aşağıdaki bağlantıyı ziyaret edebilirsiniz

Bash Reference Manual

$#

Script’imize kaç positional parameter sağlandığını bu variable yardımıyla görebiliriz.

echo $#   #kaç positional parameter sağlandı?

$0

Çalışmakta olan mevcut script için script adını ekrana hata basarken kullanmamızı sağlar. Aşağıdaki script için 2 positional parameter sağlanması gerekmektedir. $# ile sağlanan parameter count’u bulunmuştur. If bloğu ile 2 ye eşit olup olmadığı kontrol edilmiştir. $0 special parameter ile scriptin adı ve tam yolu belirtilmiştir.

#!/bin/bash
if [[ $# -ne 2 ]]; then
        echo "You didnt enter exactly 2 parameters"
        echo "Usage: $0 <file1> <file2>"
        exit 1 #non zero therefore it indicates error
fi

$?

Son çalıştırılan command için exit status kodunu döndürür. Exit değeri success bir command için 0 dır. Hata ile tamamlanan command ler için 0 dan büyük değerlerdir.

bugra@ubuntu:~/bash_course$ eechof
eechof: command not found
bugra@ubuntu:~/bash_course$ $?
127: command not found

$@

Script çalıştırılırken gönderilen tüm arguments lere erişimemize sağlar. Değerler <space> ile ayrılmışlardır.

#!/bin/bash
if [[ $# -ne 2 ]]; then
        echo "You didnt enter exactly 2 parameters"
        echo "Usage: $0 <file1> <file2>"
        exit 1
fi
echo $@

“$@”

Aşağıdaki şekildeki gibi çıktı üretmemizi sağlar. Gönderilen arguments’ler “word splitting” işlemine tabi tutulmayacaktır.

“$1” “$2” “$3″…..  “$N”

$@ Special parameter word splitting işleminden dolayı aşağıdaki kod bloğunda ” ” içine alınmış arguments lerin her biri için ayrı bir dosya oluşturacaktır. Oluşan dosyalar hello, world, so, smile olacaktır.

touch $@ #script içerisinde yer alan kod satırı
bugra@ubuntu:~/bash_course$ ./special.sh "hello world" "so smile"

Bunun önüne geçmek için “$@” special parameter kullanabiliriz

touch "$@"

$*

$@ Special Paramter ile tamamen aynı işi yapmaktadır.

“$*”

Gönderilen tüm argument leri boşluk ile ayırmak yerine , ile ayıracaktır. Bu parametreyi kullanabilmemiz için word splitting için kullanılan değişkenimize(IFS) “,” atamalıyız

#!/bin/bash
IFS=","
echo  "$*"