Càlcul d'expressions matemàtiques en Shell Scripting Language - Part V


Us sentireu còmodes, entenent els scripts de Shell i escrivint-los amb fluïdesa, segons les vostres necessitats. Aquesta és l'última publicació d'aquesta sèrie de tutorials, on realitzarem Operacions matemàtiques una mica complexes amb llenguatge de script. Els quatre últims articles de la sèrie Shell Scripting que estan cronològicament.

  1. Comprendre els consells bàsics del llenguatge de scripting de Shell de Linux - Part I
  2. 5 Scripts de Shell per als principiants de Linux per aprendre la programació de Shell - Part II
  3. Navegant pel món dels scripts BASH de Linux - Part III
  4. Aspecte matemàtic de la programació de l'intèrpret d'ordres de Linux - Part IV

Comencem amb la sèrie de Fibonacci

Patró de nombres on cada nombre és la suma de dos nombres anteriors. La sèrie és 0, 1, 1, 2, 3, 5, 8... Per definició, els dos primers nombres de la seqüència de Fibonccai són 0 i 1.

#!/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
 chmod 755 Fibonacci.sh
 ./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

Esteu familiaritzat amb el fet que l'ordinador només entén el format binari, és a dir, 0 i 1 i la majoria de nosaltres hem gaudit aprenent la conversió de decimal a binari. Què tal escriure un script senzill per a aquesta complexa operació?

#!/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 [email ; 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
 chmod 755 Decimal2Binary.sh
 ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Nota: l'script anterior accepta l'entrada en temps d'execució, que òbviament és una ajuda.

Bé, l'ordre incorporada bc pot convertir un decimal a binari en un script d'una sola línia. Corre, al teu terminal.

 echo "obase=2; NUM" | bc

Substituïu NUM pel número, que voleu convertir de decimal a binari. Per exemple,

 echo "obase=2; 121" | bc 

1111001

A continuació, escriurem un script que funcioni just al costat de l'script anterior, Convertint valors binaris a decimals.

#!/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
 chmod 755 Binary2Decimal.sh
 ./Binary2Decimal.sh

Enter a number : 
11 
3

Nota: La funció anterior es pot realitzar al terminal mitjançant l'ordre 'bc' com.

 echo "ibase=2; BINARY" | bc

Substituïu BINARI pel nombre binari, és a dir,

 echo "ibase=2; 11010101" | bc 

213

De la mateixa manera, podeu escriure la conversió d'octal, hexadecimal a decimal i viceversa. Aconseguir el resultat anterior al terminal mitjançant l'ordre 'bc' és.

 echo "obase=8; Decimal" | bc
 echo "obase=16; Decimal" | bc
 echo "ibase=8; Octal" | bc
 echo "ibase=16; Hexadecimal" | bc
 echo "ibase=2;obase=8 Binary" | bc

Algunes de les proves numèriques comunes que s'utilitzen en el llenguatge de script de shell amb descripció són.

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

Això és tot per aquest article i la sèrie d'articles. Aquest és l'últim article de Shell Script Series i no vol dir que cap article sobre llenguatge de scripting tornarà a estar aquí, només vol dir que el tutorial de shell script s'ha acabat i cada vegada que trobem un tema interessant que val la pena conèixer o una consulta de la vostra gent, estarem encantats de continuar la sèrie des d'aquí.

Mantingueu-vos saludable, atent i connectat a Tecmint. Molt aviat vindré amb un altre tema interessant, us encantarà llegir. Comparteix els teus valuosos pensaments a la secció de comentaris.