Bash ve Matematik

[*] İlerleyen kısımlarda aklınıza, 'Bu ne anlatıyor?' tarzında sorular gelebilir. İşte bu soruların uzun vadeli olmaması için lütfen sakin bir kafayla inceleyin ve bolca pratik yapmaya çalışın.

'echo' isimli blogdan bir hatırlatma yaparak başlamak istiyorum.

Gördüğünüz gibi birçok programlama dilinde yaptığımız işlemleri Bash'te yapamıyoruz. Peki, ne yapabiliriz?

Toplama ve Çıkarma İşlemi

Bu işlemler için 'expr' isimli bir komutumuz vardır. Kendisi, İngilizce'deki 'expression' kelimesinden gelir ve anlamı 'ifade' şeklindedir. Hemen nasıl kullanıldığını görelim.

Evet, yukarıda gördüğünüz gibi bu işlem oldukça basittir ancak bu komutun kullanımı pek esnek sayılmaz. Örneğin bu kodun çıktısını düzenlemeniz oldukça zordur. O yüzden değişken kullanmak daha mantıklı olacaktır.

Kullanıcıdan iki sayı isteyelim ve bunları toplayalım.

Kullanıcıdan iki sayı istedik. Daha sonra 'answer' adında bir değişken yazdık ve "yan kesme işareti içerisine (AltGr + 2 defa virgül tuşu)" ifademizi verdik. İfademiz, 'answer=`expr $num1 + $num2`' şeklinde oldu. Kullanıcıdan istediğimiz değişkenlere dolar işareti vermeyi unutmayalım.

Bunu yaptıktan sonra 'echo' ile sadece değişkenimizi ($answer) yazdırabiliriz ancak ben, daha tatlı gözükmesi için biraz oynadım ($num1 + $num2 = $answer). İsterseniz çıktımıza bakalım.

Buradaki yan kesme işareti, 'expr' komutunun syntax yapısıdır. Yani normal bir kesme işareti kullanırsanız veya tırnak işareti kullanırsanız kodunuz çalışmayacak, çalışsa bile eksik çalışacaktır.

Elbette 'expr' ifadesine istediğimiz kadar parametre verebiliriz. Yani şimdi iki sayı ile işlem yaptık ancak istersek 10 sayı ile de işlem yapabiliriz. Bununla beraber 'expr' komutu ile geri kalan matematiksel işlemleri de yapabiliriz.

İlk önce toplama ve çıkarma işlemlerine bakalım. Daha sonra çarpma ve bölme işlemlerine ayrıca bakacağız.

Evet, gördüğünüz üzere toplama ve çıkarma işlemlerinde bir problem yok. İşin sorunlu kısmı diğer iki arkadaşımızda.

Çarpma İşlemi

Burada, bu yapının Syntax yapısı biraz farklı. Çarpma işlemini '*' işareti ile yaparız ancak Bash için önüne '\ (ters slash)' koymak zorundayızdır. Ters slash için 'AltGr + *'.

Yukarıda gördüğünüz gibi '\*' şeklinde bir kullanım yapmamız gerekir. Eğer sadece '*' işaretini kullanacak olursanız hata alacaksınızdır.

Bölme İşlemi

Normal şartlarda Bash ile bölme işlemi yapabiliyoruz ancak Bash, tam bölünemeyen sayıları bölmekte biraz sorun yaşıyor. Ne demek istiyorum?

Gördüğünüz gibi gedit ekranında normal bir bölme işlemi sağladım ancak çıktıya baktığınızda göreceksiniz ki, 21/5 işleminin sonucunun 4.2 çıkması gerekirken 4 olarak çıkmış. Yani Bash, kalanlı bölümleri desteklemiyor.

Bunu sağlamanın birkaç yolu var. Örneğin Shell değiştirebilirsiniz veya çeşitli komutlar kullanabilirsiniz. Burada size, 'çeşitli komutlar'dan birini göstereceğim; ben de bunu kullanıyorum.

Lütfen dikkatli bakın. Komutumuz 'awk'. Yine bir değişken (answer) tanımlıyoruz ve yan kesme işaretlerimizi açıyoruz. Daha sonra 'awk' anahtar kelimemizi giriyoruz. Bunu da yaptıktan sonra çift tırnak içerisine BEGIN yazıyoruz. Bunu da yaptıktan sonra süslü parantez açıp içine print yazdıktan sonra değişkenlerimizle ne iş yapacaksak onu yazıyoruz (answer=`awk "BEGIN {print $num1/$num2}"`). Son olarak bunu ekrana yazdırıyoruz (echo "Cevap: $answer").

Bu anlatımı yadırgamayın; şöyle yazıyoruz, bunu yazıyoruz... Bu, Bash'in Syntax'ıdır. Yani öyle yazılması gerekir.

Gördüğünüz gibi çıktımız başarılı bir şekilde geldi.

Mod ve Üs Alma

Bunlarla beraber mod veya üs de alabiliyoruz. Bakalım.

Mod alırken 'expr' ile birlikte diğer birçok programlama dilinde olduğu gibi '%' işaretini kullanıyoruz. Çıktı kısmında örneğin ikinci örnekte 21'in 5'e bölümünden kalan 1'dir; doğru.

Üs alırken ise '**' ifadesini kullanırız ve verdiğimiz ilk sayı taban, ikinci sayı ise kuvvet olarak alınır. Bakalım.

Normal şartlarda answer=`expr $num1 ** $num2` şeklinde bir kullanım sağlarız ancak burada 'expr' anahtar kelimesine gerek yoktur. Ek olarak bir dolar ($) işareti daha koymak ve çift parantez kullanmak gerekir. Yani kullanımımız şu şekilde olacaktır: answer=$(($num1 ** $num2))


Yayınlanma Tarihi: 2022-09-13 20:46:50

Son Düzenleme Tarihi: 2022-09-15 14:13:10