Cálculo de expresiones matemáticas en lenguaje de secuencias de comandos Shell - Parte V


Ustedes se sentirán cómodos, comprenderán los scripts de Shell y los escribirán con fluidez, según sus necesidades. Esta es la última publicación de esta serie de tutoriales, donde realizaremos Operaciones Matemáticas un poco complejas utilizando lenguaje de programación. Los últimos cuatro artículos de la serie Shell Scripting que son cronológicamente.

  1. Understand Basic Linux Shell Scripting Language Tips – Part I
  2. 5 Shell Scripts for Linux Newbies to Learn Shell Programming – Part II
  3. Sailing Through The World of Linux BASH Scripting – Part III
  4. Mathematical Aspect of Linux Shell Programming – Part IV

Comencemos con la serie Fibonacci

Un patrón de números donde cada número es la suma de dos números anteriores. La serie es 0, 1, 1, 2, 3, 5, 8 …… Por definición, los dos primeros números de la secuencia de Fibonccai son 0 y 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
[[email protected] ~]# chmod 755 Fibonacci.sh
[[email protected] ~]# ./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

Está familiarizado con el hecho de que la computadora solo entiende en formato binario, es decir, "0" y "1", y la mayoría de nosotros hemos disfrutado aprendiendo la conversión de decimal a binario. ¿Qué tal escribir un script simple para esta compleja operación?

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

Decimal		Binary 
1121      	10001100001

Nota: El script anterior acepta la entrada en tiempo de ejecución, lo que obviamente es una ayuda.

Bueno, el comando "bc" incorporado puede convertir un decimal a binario en un script de una sola línea. Corre, en tu terminal.

[[email protected] ~]# echo "obase=2; NUM" | bc

Reemplace "NUM" por el número que desea convertir de decimal a binario. Por ejemplo,

[[email protected] ~]# echo "obase=2; 121" | bc 

1111001

A continuación, escribiremos una secuencia de comandos que funciona justo en frente de la secuencia de comandos anterior, Conversión de valores binarios a decimales.

#!/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
[[email protected] ~]# chmod 755 Binary2Decimal.sh
[[email protected] ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Nota: La función anterior se puede realizar en la terminal usando el comando "bc" como.

[[email protected] ~]# echo "ibase=2; BINARY" | bc

Reemplace "BINARIO" con el número binario, es decir,

[[email protected] ~]# echo "ibase=2; 11010101" | bc 

213

De manera similar, puede escribir la conversión de octal, hexadecimal a decimal y viceversa usted mismo. Lograr el resultado anterior en la terminal usando el comando "bc" es.

[[email protected] ~]# echo "obase=8; Decimal" | bc
[[email protected] ~]# echo "obase=16; Decimal" | bc
[[email protected] ~]# echo "ibase=8; Octal" | bc
[[email protected] ~]# echo "ibase=16; Hexadecimal" | bc
[[email protected] ~]# echo "ibase=2;obase=8 Binary" | bc

Algunas de las pruebas numéricas comunes utilizadas en el lenguaje de programación de shell con descripción son.

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

Eso es todo por este artículo y la serie de artículos. Este es el último artículo de Shell Script Series y no significa que ningún artículo sobre lenguaje de secuencias de comandos estará aquí nuevamente, solo significa que el tutorial de secuencias de comandos de shell ha terminado y cada vez que encontramos un tema interesante que vale la pena conocer o una consulta de ustedes, estaremos felices de continuar la serie desde aquí.

Mantente saludable, sintonizado y conectado a Tecmint. Muy pronto vendré con otro tema interesante, a ustedes les encantará leer. Comparta sus valiosos pensamientos en la sección de comentarios.