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. Comprender los consejos básicos del lenguaje de secuencias de comandos del shell de Linux: Parte I
  2. 5 scripts de shell para que los principiantes de Linux aprendan a programar en shell - Parte II
  3. Navegando por el mundo de las secuencias de comandos BASH de Linux - Parte III
  4. Aspecto matemático de la programación del shell de Linux - Parte 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 el 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: La secuencia de comandos anterior acepta la entrada en tiempo de ejecución, lo que obviamente es una ayuda.

Bueno, el comando "bc" incorporado puede convertir un decimal en 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 el lado opuesto 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 que se utilizan en el lenguaje de secuencias de comandos 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 encantados 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.