Shell Komut Dosyası Dilinde Matematiksel İfadelerin Hesaplanması - Bölüm V


Siz İnsanlar kendinizi rahat hissedecek, Shell Komut Dosyalarını anlayacak ve ihtiyacınıza göre bunları akıcı bir şekilde yazacaksınız. Bu, kodlama dilini kullanarak biraz karmaşık Matematiksel İşlemler gerçekleştireceğimiz bu eğitim serisinin son gönderisidir. Shell Scripting serisinin kronolojik olarak son dört makalesi.

  1. Temel Linux Kabuk Komut Dosyası Dili İpuçlarını Anlayın – Bölüm I
  2. Linux'a Yeni Başlayanların Shell Programlamayı Öğrenmesi için 5 Shell Komut Dosyası - Bölüm II
  3. Linux BASH Scripting Dünyasına Yolculuk – Bölüm III
  4. Linux Kabuk Programlamanın Matematiksel Yönü – Bölüm IV

Fibonacci Serisi ile başlayalım

Her sayının kendisinden önceki iki sayının toplamı olduğu bir sayı modeli. Seri şu şekildedir: 0, 1, 1, 2, 3, 5, 8…… Tanım gereği, Fibonccai dizisindeki ilk iki sayı 0 ve 1'dir.

Komut Dosyası 1: Fibonacci.sh
#!/bin/bash
echo "How many numbers do you want of Fibonacci series ?" 
  read total 
  x=0 
  y=1 
  i=2 
  echo "Fibonacci Series up to $total terms :: " 
  echo "$x" 
  echo "$y" 
  while [ $i -lt $total ] 
  do 
      i=`expr $i + 1 ` 
      z=`expr $x + $y ` 
      echo "$z" 
      x=$y 
      y=$z 
  done
Örnek Çıktı
[root@tecmint ~]# chmod 755 Fibonacci.sh
[root@tecmint ~]# ./Fibonacci.sh

How many numbers do you want of Fibonacci series ? 
10 
Fibonacci Series up to 10 terms :: 
0 
1 
1 
2 
3 
5 
8 
13 
21 
34

Fibonacci.sh'yi indirin

Bilgisayarın yalnızca İkili Formatta, yani '0' ve '1'de anladığı gerçeğine aşinasınız ve çoğumuz Ondalık'tan İkili'ye. Bu karmaşık işlem için basit bir komut dosyası yazmaya ne dersiniz?

Komut Dosyası 2: Decimal2Binary.sh
#!/bin/bash 

for ((i=32;i>=0;i--)); do 
        r=$(( 2**$i)) 
        Probablity+=( $r  ) 
done 

[[ $# -eq 0 ]] &echo -en "Decimal\t\tBinary\n" 
for input_int in $@; do 
s=0 
test ${#input_int} -gt 11 &printf "%-10s\t" "$input_int" 

        for n in ${Probablity[@]}; do 

                if [[ $input_int -lt ${n} ]]; then 
                        [[ $s = 1 ]] && printf "%d" 0 
                else 
                        printf "%d" 1 ; s=1 
                        input_int=$(( $input_int - ${n} )) 
                fi 
        done 
echo -e 
done
Örnek Çıktı
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Not: Yukarıdaki komut dosyası, çalışma zamanında Giriş'i kabul eder; bunun bir yardım olduğu açıktır.

Decimal2Binary.sh'yi indirin

Dahili 'bc' komutu, tek satırlık bir komut dosyasında ondalık sayıyı ikili sayıya dönüştürebilir. Terminalinizde koşun.

[root@tecmint ~]# echo "obase=2; NUM" | bc

'NUM' yerine Ondalık'tan İkili'ye dönüştürmek istediğiniz sayıyı yazın. Örneğin,

[root@tecmint ~]# echo "obase=2; 121" | bc 

1111001

Daha sonra, yukarıdaki komut dosyasının tam tersi işlevi gören bir komut dosyası yazacağız: İkili Değerleri Ondalık'a Dönüştürme.

Komut Dosyası 3: Binary2Decimal.sh
#!/bin/bash 
echo "Enter a number :" 
read Binary 
if [ $Binary -eq 0 ] 
then 
echo "Enter a valid number " 
else 
while [ $Binary -ne 0 ] 
do 
Bnumber=$Binary 
Decimal=0 
power=1 
while [ $Binary -ne 0 ] 
do 
rem=$(expr $Binary % 10 ) 
Decimal=$((Decimal+(rem*power))) 
power=$((power*2)) 
Binary=$(expr $Binary / 10) 
done 
echo  " $Decimal" 
done 
fi
Örnek Çıktı
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Not: Yukarıdaki işlev terminalde 'bc' komutu kullanılarak gerçekleştirilebilir.

[root@tecmint ~]# echo "ibase=2; BINARY" | bc

'İKİLİ'yi İkili sayıyla değiştirin, yani,

[root@tecmint ~]# echo "ibase=2; 11010101" | bc 

213

Binary2Decimal.sh'yi indirin

Benzer şekilde, sekizli, onaltılı'dan ondalık'a ve tersi yönde dönüşümü kendiniz yazabilirsiniz. Terminalde yukarıdaki sonucun elde edilmesi ‘bc’ komutunun kullanılmasıdır.

Ondalıktan Sekizliğe
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Onaltılıdan Onaltılıya
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Sekizliden Ondalığa
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Onaltılıdan Ondalığa
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
İkiliden Sekizliye
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Açıklamalarıyla birlikte kabuk komut dosyası dilinde kullanılan Ortak Sayısal testlerden bazılarıdır.

Test : INTEGER1 -eq INTEGER2
Meaning: INTEGER1 is equal to INTEGER2
Test : INTEGER1 -ge INTEGER2
Meaning: INTEGER1 is greater than or equal to INTEGER2
Test: INTEGER1 -gt INTEGER2
Meaning: INTEGER1 is greater than INTEGER2
Test:INTEGER1 -le INTEGER2
Meaning: INTEGER1 is less than or equal to INTEGER2
Test: INTEGER1 -lt INTEGER2
Meaning: INTEGER1 is less than INTEGER2
Test: INTEGER1 -ne INTEGER2
Meaning: INTEGER1 is not equal to INTEGER2

Bu makale ve makale serisi için bu kadar. Bu, Shell Komut Dosyası Serisinin son makalesidir ve bu, Komut Dosyası diliyle ilgili hiçbir makalenin bir daha burada olmayacağı anlamına gelmez; yalnızca kabuk komut dosyası oluşturma eğitiminin bittiği ve bilmeye değer ilginç bir konu bulduğumuz anlamına gelir. veya sizlerden gelen bir soru olursa seriye buradan devam etmekten mutluluk duyarız.

Tecmint'e sağlıklı kalın, bizi takip edin ve bağlantıda kalın. Çok yakında ilginç bir konuyla daha geleceğim, siz okumayı seveceksiniz. Değerli düşüncelerinizi Yorum Bölümünde paylaşın.