Izračunavanje matematičkih izraza u jeziku shell skriptiranja - dio V


Vi biste se osjećali ugodno, razumjeli bi Shell skripte i pisali ih tečno, prema vašim potrebama. Ovo je posljednji post u ovoj seriji tutorijala, gdje ćemo izvoditi malo složene Matematičke operacije koristeći skript jezik. Posljednja četiri članka serije Shell Scripting koji su hronološki.

  1. Razumjeti osnovne savjete za jezik skriptiranja za Linux Shell – I dio
  2. 5 Shell skripti za Linux početnike da nauče Shell programiranje – II dio
  3. Plovidba kroz svijet Linux BASH skriptiranja – III dio
  4. Matematički aspekt Linux shell programiranja – IV dio

Počnimo sa Fibonačijevim nizom

Obrazac brojeva gdje je svaki broj zbir dva prethodna broja. Serija je 0, 1, 1, 2, 3, 5, 8…… Po definiciji, prva dva broja u Fibonccai nizu su 0 i 1.

Skripta 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
Sample Output
[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

Preuzmite Fibonacci.sh

Upoznati ste sa činjenicom da računar razumije samo u binarnom formatu, tj. '0' i '1' i većina nas je uživala u učenju konverzije Decimalni u binarni. Šta kažete na pisanje jednostavne skripte za ovu složenu operaciju.

Skripta 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
Sample Output
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Napomena: Gornja skripta prihvata unos u toku rada, što je očigledno pomoć.

Preuzmite Decimal2Binary.sh

Pa, ugrađena naredba ‘bc‘ može pretvoriti decimalni u binarni u skriptu od jednog reda. Trči, na svom terminalu.

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

Zamijenite „NUM“ brojem koji želite pretvoriti iz decimalne u binarne. Na primjer,

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

1111001

Sljedeće ćemo pisati skriptu koja funkcionira upravo suprotno od gornje skripte, Pretvaranje binarnih vrijednosti u decimale.

Skripta 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
Sample Output
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Napomena: Gornja funkcija se može izvesti u terminalu pomoću naredbe „bc“ kao.

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

Zamijenite 'BINARNO' binarnim brojem, tj.

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

213

Preuzmite Binary2Decimal.sh

Slično možete sami napisati konverziju iz oktalnog, heksadecimalnog u decimalno i obrnuto. Ostvarivanje gornjeg rezultata u terminalu pomoću naredbe „bc“ je.

Decimala u oktalnu
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Decimalni u heksadecimalni
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Od oktalnog do decimalnog
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Heksadecimalno u decimalno
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Binarno u oktalno
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Neki od Uobičajenih numeričkih testova koji se koriste u jeziku shell skriptova sa opisom su.

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

To je sve za ovaj članak i seriju članaka. Ovo je posljednji članak Shell Script Series i to ne znači da nijedan članak o jeziku skriptiranja neće biti ovdje, to samo znači da je vodič za shell skriptiranje završen i kad god pronađemo zanimljivu temu vrijednu poznavanja ili upit od vas ljudi, rado ćemo nastaviti seriju odavde.

Ostanite zdravi, podešeni i povezani na Tecmint. Vrlo brzo dolazim sa još jednom zanimljivom temom, vi ćete voljeti čitati. Podijelite svoje vrijedne misli u Odjeljku za komentare.