Búsqueda de sitios web

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


Ustedes se sentirán cómodos, entenderán los Shell Scripts y los escribirán con fluidez, según sus necesidades. Esta es la última publicación de esta serie de tutoriales, donde llevaremos a cabo Operaciones Matemáticas un poco complejas utilizando un lenguaje de scripting. Los últimos cuatro artículos de la serie Shell Scripting están ordenados cronológicamente.

  1. Comprender los consejos básicos del lenguaje de secuencias de comandos Shell de Linux: Parte I
  2. 5 scripts de Shell para que los principiantes de Linux aprendan a programar 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 Fibonccai son 0 y 1.

Guión 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
Salida de muestra
[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

Descargar Fibonacci.sh

Usted está familiarizado con el hecho de que la computadora sólo 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?

Guión 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
Salida de muestra
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

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

Descargar Decimal2Binary.sh

Bueno, el comando incorporado 'bc' puede convertir un decimal a binario en un script de una sola línea. Ejecute, en su terminal.

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

Reemplace 'NUM' con el número que desea convertir de Decimal a Binario. Por ejemplo,

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

1111001

A continuación escribiremos un script que funciona justo lo contrario del script anterior, Conversión de valores binarios a Decimal.

Guión 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
Salida de muestra
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

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

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

Reemplace 'BINARIO' con el número binario, a saber,

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

213

Descargar Binary2Decimal.sh

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

Decimal a octal
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Decimal a hexadecimal
[root@tecmint ~]# echo "obase=16; Decimal" | bc
De octal a decimal
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Hexadecimal a decimal
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Binario a octal
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Algunas de las pruebas numéricas comunes utilizadas en el lenguaje de scripting 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 la Serie Shell Script y no significa que no volverá a aparecer ningún artículo sobre lenguaje de scripting, solo significa que el tutorial de scripting de Shell ha terminado y siempre que encontremos un tema interesante que valga la pena conocer. o una consulta de ustedes, estaremos encantados de continuar la serie desde aquí.

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