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