28
Konuya ait anahtar kelimeler : Pozisyon değerleri, shift Herhangi bir scripti çalıştırırken isstediğimiz sayıda pozisyonda değerleri scripte dahil edebiliyoruz. Bu pozisyondaki değerler script tarafından otomatik olarak "$N" şeklinde değişkenlere atanıyor. Mesela ilk pozisyondaki değer "$1" değişkenine, üçücü pozisyondaki değişken "$3" değişkenine atanır. Not : Pozisyon değişkenleri en fazla dokuz(9) adet değişkene atanabilir. Yani "$N" ifadesinde "N" değerinin alabileceği değer en fazla "9"dur. "$10" diye onuncu pozisyonda bir değişken yoktur.
$0Scriptin adı.
$1Birinci pozisyondaki değer.
$2İkinci pozisyondaki değer.
$3Üçüncü pozisyondaki değer.
$4Dördüncü pozisyondaki değer.
$5Beşinci pozisyondaki değer.
$6Altıncı pozisyondaki değer.
$7Yedinci pozisyondaki değer.
$8Sekizinci pozisyondaki değer.
$9Dokuzuncu pozisyondaki değer.
Yukarıdaki tabloda da görüleceği üzere pozisyon sayısındaki değerler en fazla dokuz(9) adet değişkene atanabilir.($0 sistem değişkenidir, scriptin adı.) Şimdi çalışma dizini içerisinde bir adet "pozisyon.sh" adında bir script dosyası oluşturalım ve içeriği aşağıdaki gibi olsun.
[alax@alax script]$ nano pozisyon.sh #!/bin/bash # pozisyon.sh # pozisyonları yazdıran script. echo "Birinci pozisyondaki değer: $1" echo "İkinci pozisyondaki değer: $2" echo "Üçüncü pozisyondaki değer: $3" echo "Dördüncü pozisyondaki değer: $4" echo "Beşinci pozisyondaki değer: $5" echo "Altıncı pozisyondaki değer: $6" echo "Yedinci pozisyondaki değer: $7" echo "Sekizinci pozisyondaki değer: $8" echo "Dokuzuncu pozisyondaki değer: $9" [alax@alax script]$
Şimdi dokuz pozisyonda değer yazarak scripti çalıştıralım.
[alax@alax script]$ chmod u+x pozisyon.sh [alax@alax script]$ ./pozisyon.sh bir iki üç dört beş altı yedi sekiz dokuz Birinci pozisyondaki değer: bir İkinci pozisyondaki değer: iki Üçüncü pozisyondaki değer: üç Dördüncü pozisyondaki değer: dört Beşinci pozisyondaki değer: beş Altıncı pozisyondaki değer: altı Yedinci pozisyondaki değer: yedi Sekizinci pozisyondaki değer: sekiz Dokuzuncu pozisyondaki değer: dokuz [alax@alax script]$
Evet scriptimiz sorunsuz çalıştı. Peki onuncu pozisyonda bir değer olsaydı? Şimdi script içerisine onuncu pozisyondaki değeri de yazdıracak komutu ekleyelim ve scripti tekrar çalıştıralım. Script içeriğinin son hali aşağıdaki gibi olacaktır.
[alax@alax script]$ nano pozisyon.sh #!/bin/bash # pozisyon.sh # pozisyonları yazdıran script. echo "Birinci pozisyondaki değer: $1" echo "İkinci pozisyondaki değer: $2" echo "Üçüncü pozisyondaki değer: $3" echo "Dördüncü pozisyondaki değer: $4" echo "Beşinci pozisyondaki değer: $5" echo "Altıncı pozisyondaki değer: $6" echo "Yedinci pozisyondaki değer: $7" echo "Sekizinci pozisyondaki değer: $8" echo "Dokuzuncu pozisyondaki değer: $9" echo "Onuncu pozisyondaki değer: $10" [alax@alax script]$
Şimdi scripti on pozisyonda değer ile çalıştıralım.
[alax@alax script]$ ./pozisyon.sh bir iki üç dört beş altı yedi sekiz dokuz on Birinci pozisyondaki değer: bir İkinci pozisyondaki değer: iki Üçüncü pozisyondaki değer: üç Dördüncü pozisyondaki değer: dört Beşinci pozisyondaki değer: beş Altıncı pozisyondaki değer: altı Yedinci pozisyondaki değer: yedi Sekizinci pozisyondaki değer: sekiz Dokuzuncu pozisyondaki değer: dokuz Onuncu pozisyondaki değer: bir0 [alax@alax script]$
Gördüğünüz gibi onuncu pozisyondaki değer "bir0" şeklinde oldu. Çünkü "$10" diye bir değişken yok. $10: Bunun anlamı, "$1 pozisyonundaki değer ve yanında bir karakter(örneğimizde bu karakter sıfır)" şeklinde olmaktadır. Örneğin; "$999" değişkeninin karşılığı; "dokuz99", "$755" değişkeninin karşılığı; "yedi55", "$365" değişkeninin karşılığı; "üç65" şeklinde olacaktır. Sistem içerisinde pozisyon sayısı en fazla dokuz olabileceğinden ve son değişken "$9" olacağından dolayı sadece bu değişkenlerin değerleri yazdırılır, yanındaki harf yada kelimeler aynen olduğu gibi yazılır. "$777", burada sistem tarafından tanınan tek değişken "$7"dir. Diğerleri değişken olarak tanımlanmaz. Dokuzdan sonra herhangi bir pozisyondaki değer bir değişkene otomatik olarak atanmaz. Unix/Linux sistemlerde değerlere sondan başa doğru bakılır ve işleme alınır. Mesela bu örneğimizde sistem önce $777 değerine bakıyor ve böyle bir değişken yok, sonra $77 değerine bakıyor ve böyle de bir değişken yok, en son $7 değerine bakıyor ve böyle bir değişken var, hemen değerini yerine koyuyor, ilk başta okunan karakterler normal olarak okunuyor ve yanına aynen yazılıyor. Bu bağlamda; "elma$3armut" değişkeninin karşılığı; "elmaüçarmut", "dört$5altı" değişkeninin karşılığı; "dörtbeşaltı" şeklinde olur. Peki dokuzdan sonraki pozisyondaki değerleri nasıl script içerisinde çekeceğiz? Shift : "Shift" Türkçe "Ötelemek" anlamına gelmektedir. Bu komut ile bulunan konumdan istenilen konuma taşınma işlemi yapılır. Eğer herhangi bir sayısal ifade ile kullanılmaz ise bir(1) birim öteleme işlemi yapmaktadır. Şimdi "shift.sh" adında bir script dosyası oluşturalım, içeriği aşağıdaki gibi olacaktır.
[alax@alax script]$ nano shift.sh #!/bin/bash # shift.sh # Shift kullanım örneği. for i in {1..5}; do echo "$1" done [alax@alax script]$
Scriptimizi çalıştıralım.
[alax@alax script]$ chmod u+x shift.sh [alax@alax script]$ ./shift.sh bir iki üç dört beş bir bir bir bir bir [alax@alax script]$
Gördüğünüz gibi "$1" değişkeni ile hep "bir" değeri yazıldı. Çünkü "$1" değişkeninin değeri bellidir ve birinci pozisyondaki değerdir. Dolayısıyla değeri değişmez. Tabi biz bir olay oluşturmazsak. Şimdi dosya içerisinde yazdırma işleminden sonra "shift" komutunu ekleyelim. Dosya içeriği aşağıdaki gibi olacaktır.
[alax@alax script]$ nano shift.sh #!/bin/bash # shift.sh # Shift kullanım örneği. for i in {1..5}; do echo "$1" shift done [alax@alax script]$
Şimdi scripti çalıştıralım.
[alax@alax script]$ ./shift.sh bir iki üç dört beş bir iki üç dört beş [alax@alax script]$
Yukarıdaki örneğimizde olan şu. "$1" değişkeni yazdığımız pozisyonlardan birinci pozisyondaki değer ile atandı. Daha sonra "shift" ile pozisyonlar bir(1) birim ötelendi, kaydırıldı. Dolayısıyla "$1" değişkeninin değeri ikinci pozisyondaki değer oldu, ardından tekrar bir birim ötelendi ve üçüncü pozisyondaki değer "$1" değişkeninin değeri oldu. En son beşinci pozisyondaki değer ilk sıraya geldi ve "$1" değişkenin son değeri beşinci pozisyondaki değer oldu. Scripte sunduğumuz pozisyonlar bu örneğimiz için sırasıyla, Başlangıçta -- bir iki üç dört beş 1. shift ile -- iki üç dört beş 2. shift ile -- üç dört beş 3. shift ile -- dört beş 4. sihft ile -- beş şeklinde işleme alındı. Yani en son "shift" ile, sanki sadece bir pozisyonda "beş" değerini yazmışız gibi oldu. Tabi herzaman bir birim öteleme olacak diye bir kural yok. İstediğimiz değere ulaşmak için "N" kadar öteleme gerekiyorsa; shift N şekinde kullanmamız gerekir. Şimdi şu şekilde bir örnek yapalım. - Script kendisine sunulan pozisyonlardan onbirinci pozisyondaki değeri yazdırsın ve çıksın. İlk değişken birinci pozisyondaki değeri almaktadır, dolayısıyla bu işlemi yapabilmek için on(10) birim bir öteleme yapmamız lazım ki, onbirinci değer "$1" değişkenine atansın. Basit bir matematik denklemi. Scriptimizin adı "shiftonbir.sh" olsun ve içeriği aşağıdaki gibi olacaktır.
[alax@alax script]$ nano shiftonbir.sh !/bin/bash # shiftonbir.sh # Shift 10 birim öteleme örneği. shift 10 echo $1 [alax@alax script]$
Şimdi scriptimize onbir adet pozisyonda harfler sunarak, scripti çalıştıralım.
[alax@alax script]$ chmod u+x shiftonbir.sh [alax@alax script]$ ./shiftonbir.sh s h e l l s k r i p t t [alax@alax script]$
100 tane değer içerisinden 98. değeri çekmek isteseydik o zaman ötelemeyi 97 birim yapacaktık. Not : Eğer öteleme sonucu herhangi bir değere karşılık gelmiyor ise "$1" değişkeninin değeri değişmez. Mesela önce 10 birim öteleme ile "$1" değişkeni değerini onbirinci değere atadık ve sonra olmayan 50. değere atadık(bunun için 49 birim değil, 50-11=39 birim bir öteleme yapacaktık, çünkü artık bulunduğumuz yer 11. konum.) diyelim, o zaman "$1" değişkeni değeri hala 11. pozisyondaki değer oalcaktır. Lütfen konu hakkında pratik yapmayı unutmayınız.