GNU/Linux >> Tutoriales Linux >  >> Linux

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

¡Hagamos un poco de Bash Math!

Mientras escribe sus scripts de bash, 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 serie para principiantes de bash, aprenderá a usar operadores de bash para realizar varios cálculos aritméticos.

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

Realizar sumas y restas en scripts bash

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

Debe estar familiarizado con los argumentos en scripts de bash 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 usa 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. Por ejemplo, aquí 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 en addition.sh el 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. Por ejemplo, el valor de la subvariable en la siguiente declaración resultará en siete:

sub=$((10-3))

Realizar multiplicaciones y divisiones en scripts bash

Vamos a crear un script bash 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é el operador de multiplicación (*) para multiplicar el número de Gigabytes por 1024 para obtener el equivalente en Megabytes:

MEGA=$(($GIGA * 1024))

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

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

¡Te dejaré convertir Gigabytes a bytes como ejercicio de práctica!

También puede usar el operador de división (/) para dividir dos números. Por ejemplo, el valor de la variable div en la siguiente instrucción se evaluará como cinco:

div=$((20 / 4))

Tenga en cuenta que esta es una división de enteros, por lo que todas las fracciones se pierden. Por ejemplo, si divides 5 entre 2, obtendrás 2, lo cual es incorrecto, por supuesto:

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

Para obtener una salida decimal; puedes hacer uso de bc dominio. Por ejemplo, para dividir 5 entre 2 con el bc comando, puede usar la siguiente instrucción:

echo "5/2" | bc -l
2.50000000000000000000

Tenga en cuenta que también puede usar otros operadores con bc Comando siempre que se trate de números decimales:

Uso de potencia y resto (módulo)

¡Creemos una calculadora de potencia! Voy a crear un script llamado power.sh que aceptará dos números a y b (como argumentos) y mostrará el resultado de a elevado a la potencia de b :

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

Observe que uso el operador de exponenciación (**) para calcular el resultado de a elevado a la potencia de b .

Hagamos algunas ejecuciones del script para asegurarnos de que arroja las respuestas correctas:

[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

También puede usar el operador de módulo (%) para calcular los restos de números enteros. Por ejemplo, el valor del rem variable en la siguiente declaración se evaluará a 2:

rem=$((17%5))

¡El resto aquí es 2 porque 5 cabe tres veces en 17 y quedan dos!

Tiempo de práctica:hacer un script bash de convertidor de grados

Terminemos este tutorial creando un script llamado c2f.sh que convertirá grados Celsius a grados Fahrenheit usando la siguiente ecuación:

F = C x (9/5) + 32

Este será un buen ejercicio para que pruebes las cosas nuevas que acabas de aprender en este tutorial de bash.

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

#!/bin/bash

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

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

Usé el bc comando porque estamos tratando con decimales y también usé "escala =2" para mostrar la salida en dos puntos decimales.

Hagamos algunas ejecuciones del script para asegurarnos de que está generando los resultados correctos:

[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.

¡Perfecto! Esto nos lleva al final de este tutorial. Practique lo que aprendió descargando el conjunto de ejercicios bash de este capítulo.

Bash Capítulo 5 Preguntas de práctica Problemas y su solución para practicar lo que acabas de aprender en este capítulo Bash-Chapter-5-Practice-Questions-Linux-Handbook.pdf32 KB

Espero que hayas disfrutado haciendo algunas operaciones matemáticas con bash y mantente atento al próximo tutorial de la serie para principiantes de bash, ya que aprenderás a manipular cadenas.


Linux
  1. Uso del comando Linux Basename en Bash Scripts

  2. Bash Beginner Series #9:Uso de funciones en Bash

  3. Bash Beginner Series #8:Bucles en Bash

  4. ¿Obtener mtime de un archivo específico usando Bash?

  5. ¿Cómo escribir un entero en un archivo binario usando Bash?

Script Bash (III)

Bash Beginner Series #2:Comprender las variables en Bash Shell Scripting

Bash Beginner Series #4:Uso de arreglos en Bash

Bash Beginner Series #3:Pasando Argumentos a Bash Scripts

Bash Beginner Series #6:Operaciones de cadenas en Bash

Bash Beginner Series #10:Automatización con Bash

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