Bash Beginner Series #5: Uso de operadores aritméticos en Bash Scripting

¡Hagamos un poco de Bash Math!

Mientras escribe su bash scripts, a menudo querrá averiguar el resultado de un cálculo aritmético para determinar el espacio restante en el disco, el tamaño de los archivos, las fechas de caducidad de la contraseña, la cantidad de hosts, el ancho de banda de la red, etc.

En este capítulo de la bash Serie para principiantes, aprenderás a usar bash operadores para realizar varios cálculos aritméticos.

Para refrescar su memoria, aquí están los operadores aritméticos en bash:

Operador Descripción
+ Adición
resta
* Multiplicación
/ División entera (sin números decimales)
% División de módulo (solo da resto)
** exponenciación (x a la potencia y)

Realizar sumas y restas en bash guiones

Vamos a crear un bash guión llamado adición.sh eso simplemente agregará dos tamaños de archivo (en bytes) y mostrará la salida.

Debe estar familiarizado con los argumentos en bash guiones por ahora. Espero que también estés familiarizado con los comandos cut y du.

El comando du le da el tamaño del archivo junto con . La salida tiene tanto el tamaño del archivo como el nombre del archivo. Aquí es donde se utiliza el comando de corte para extraer la primera columna (es decir, el tamaño del archivo) de la salida. La salida del comando du se pasa al comando cut mediante la redirección de tuberías.

Aquí está el guión:

                      
                        #!/bin/bash

fs1=$(du -b $1 | cut -f1)
fs2=$(du -b $2 | cut -f1)

echo "File size of $1 is: $fs1"
echo "File size of $2 is: $fs2"

total=$(($fs1 + $fs2))

echo "Total size is: $total"
                      
                    

Tenga en cuenta que pasará los dos nombres de archivo como argumentos al script. Para exampleaquí ejecuto el script y paso los dos archivos /etc/passwd y /etc/group como argumentos:

                      
                        [email protected]:~/scripts$ ./addition.sh /etc/passwd /etc/group
File size of /etc/passwd is: 2795
File size of /etc/group is: 1065
Total size is: 3860
                      
                    

La línea más importante de la adición.sh guión es:

                      
                        total=$(($fs1 + $fs2))
                      
                    

Donde usó el operador + para sumar los dos números $fs1 y $fs2. Tenga en cuenta también que para evaluar cualquier expresión aritmética debe encerrar entre paréntesis dobles de la siguiente manera:

                      
                        $((arithmetic-expression))
                      
                    

También puede usar el operador menos (-) para restar. Para exampleel valor de la subvariable en la siguiente declaración resultará en siete:

                      
                        sub=$((10-3))
                      
                    

Realizar multiplicaciones y divisiones en bash guiones

Vamos a crear un bash guión llamado giga2mega.sh que convertirá Gigabytes (GB) a Megabytes (MB):

                      
                        #!/bin/bash

GIGA=$1
MEGA=$(($GIGA * 1024))

echo "$GIGA GB is equal to $MEGA MB"
                      
                    

Ahora ejecutemos el script para averiguar cuántos Megabytes hay en cuatro Gigabytes:

                      
                        [email protected]:~/scripts$ ./giga2mega.sh 4
4 GB is equal to 4096 MB
                      
                    

Aquí usé la multiplicación.

                      
                        MEGA=$(($GIGA * 1024))
                      
                    

operador para multiplicar el número de Gigabytes por 1024 para obtener el equivalente en Megabytes:

                      
                        KILO=$(($GIGA * 1024 * 1024))
                      
                    

Es fácil agregar más funciones a este script para convertir Gigabytes (GB) a Kilobytes (KB):

¡Te dejaré convertir Gigabytes a bytes como ejercicio de práctica! exampleTambién puede usar el operador de división (/) para dividir dos números. Para

                      
                        div=$((20 / 4))
                      
                    

el valor de la variable div en la siguiente instrucción se evaluará como cinco:

                      
                        [email protected]:~/scripts$ div=$((5 / 2))
[email protected]:~/scripts$ echo $div
2
                      
                    

Tenga en cuenta que esta es una división de enteros, por lo que todas las fracciones se pierden. Por ejemplo, si divides 5 por 2, obtendrás 2, lo cual es incorrecto, por supuesto: bc Para obtener una salida decimal; puedes hacer uso de la examplemando. Para bc para dividir 5 por 2 con el

                      
                        echo "5/2" | bc -l
2.50000000000000000000
                      
                    

comando, puede usar la siguiente declaración: bc Tenga en cuenta que también puede utilizar otros operadores con el

texto

Uso de potencia y resto (módulo) ¡Creemos una calculadora de potencia! Voy a crear un script llamado poder.sh que aceptará dos números a y B (como argumentos) y mostrará el resultado de a elevado al poder de B

                      
                        #!/bin/bash
a=$1
b=$2
result=$((a**b))
echo "$1^$2=$result"
                      
                    

: Note que uso el operador de exponenciación (**) para calcular el resultado de a elevado al poder de B

.

                      
                        [email protected]:~/scripts$ ./power.sh 2 3
2^3=8
[email protected]:~/scripts$ ./power.sh 3 2
3^2=9
[email protected]:~/scripts$ ./power.sh 5 2
5^2=25
[email protected]:~/scripts$ ./power.sh 4 2
4^2=16
                      
                    

Hagamos algunas ejecuciones del script para asegurarnos de que arroja las respuestas correctas: También puede usar el operador de módulo (%) para calcular los restos de números enteros. Por ejemplo, el valor de la movimiento rápido del ojo

                      
                        rem=$((17%5))
                      
                    

variable en la siguiente declaración se evaluará a 2:

El resto aquí es 2 porque 5 cabe tres veces en 17, ¡y queda dos! bash Tiempo de práctica: hacer un convertidor de grados

texto Terminemos este tutorial creando un script llamado c2f.sh

                      
                        F = C x (9/5) + 32
                      
                    

que convertirá grados Celsius a grados Fahrenheit usando la siguiente ecuación: bash Este será un buen ejercicio para que pruebes las cosas nuevas que acabas de aprender en este

tutorial.

                      
                        #!/bin/bash

C=$1
F=$(echo "scale=2; $C * (9/5) + 32" | bc -l)

echo "$C degrees Celsius is equal to $F degrees Fahrenheit."
                      
                    

Aquí hay una solución (podría haber varias formas de lograr el mismo resultado): usé el antes de Cristo

comando porque estamos tratando con decimales y también usé “escala = 2” para mostrar la salida en dos puntos decimales.

                      
                        [email protected]:~/scripts$ ./c2f.sh 2
2 degrees Celsius is equal to 35.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh -3
-3 degrees Celsius is equal to 26.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh 27
27 degrees Celsius is equal to 80.60 degrees Fahrenheit.
                      
                    

Hagamos algunas ejecuciones del script para asegurarnos de que está generando los resultados correctos: bash ¡Perfecto! Esto nos lleva al final de este tutorial. Practica lo que aprendiste descargando el

conjunto de ejercicios de este capítulo.

.a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px;}

descarga-círculo bash Espero que hayas disfrutado haciendo matemáticas con bash y estad atentos al próximo tutorial en el

¡Serie para principiantes, ya que aprenderá a manipular cuerdas!

Related Posts