Introducción
Las operaciones matemáticas y aritméticas son esenciales en las secuencias de comandos de Bash. Varias tareas de automatización requieren operaciones aritméticas básicas, como convertir la temperatura de la CPU a Fahrenheit. Implementar operaciones matemáticas en Bash es simple y muy fácil de aprender.
Esta guía le enseña cómo hacer operaciones matemáticas básicas en Bash de varias maneras.
Requisitos previos
- Acceso a la línea de comando/terminal.
- Un editor de texto para codificar ejemplos, como nano o Vi/Vim.
- Conocimiento básico de secuencias de comandos Bash.
¿Por qué necesita matemáticas en Bash Scripting?
Aunque las matemáticas no son el propósito principal de las secuencias de comandos de Bash, saber cómo hacer cálculos esenciales es útil para varios casos de uso.
Los casos de uso comunes incluyen:
- Sumar/restar/multiplicar/dividir números.
- Redondeo de números.
- Números crecientes y decrecientes.
- Conversión de unidades.
- Cálculos de punto flotante.
- Cómo encontrar porcentajes.
- Trabajar con diferentes bases numéricas (binaria, octal o hexadecimal).
Según la tarea de automatización, las operaciones matemáticas y aritméticas básicas en las secuencias de comandos de Bash ayudan a realizar un cálculo rápido, lo que genera resultados inmediatos en el formato deseado.
Métodos y comandos de Bash Math
Algunos comandos de Linux permiten realizar cálculos básicos y avanzados de forma inmediata. Esta sección muestra ejemplos matemáticos básicos con cada método.
Expansión aritmética
La forma preferible de hacer matemáticas en Bash es usar la expansión aritmética de shell. La capacidad incorporada evalúa expresiones matemáticas y devuelve el resultado. La sintaxis de las expansiones aritméticas es:
$((expression))
La sintaxis consta de:
- Notación compuesta
(())
que evalúa la expresión.
- El operador variable
$
para almacenar el resultado.
Por ejemplo, sume dos números y repita el resultado:
echo $((2+3))
La notación de expansión aritmética es el método preferido cuando se trabaja con scripts Bash. La notación se ve a menudo junto con if
instrucciones y bucles for en Bash.
Comando awk
El comando awk actúa como selector de expresiones de patrón. Por ejemplo, para realizar sumas usando awk
comando, use la siguiente declaración de ejemplo:
awk 'BEGIN { x = 2; y = 3; print "x + y = "(x+y) }'
Para variables x = 2
y y = 3
, la salida imprime x + y = 5
a la consola.
comando bc
El bc
comando (abreviatura de b asic c alculator) es una utilidad de línea de comandos que representa el lenguaje bc. El programa se ejecuta como un programa interactivo o toma una entrada estándar para realizar aritmética de precisión arbitraria.
Transfiera una ecuación de la entrada estándar al comando para obtener resultados. Por ejemplo:
echo "2+3" | bc
La salida imprime el resultado del cálculo.
Comando CC
El dc
comando (abreviatura de d esk c alculator) es una utilidad de calculadora que admite la notación polaca inversa. El programa toma entrada estándar y admite aritmética de precisión ilimitada.
Canalice una ecuación de entrada estándar en el comando para obtener el resultado. Por ejemplo:
echo "2 3 + p" | dc
El p
en la ecuación envía la señal de impresión al dc
comando.
declarar Comando
El comando Bash declare permite cálculos con números enteros. Para usar declare
para los cálculos, agregue -i
opción. Por ejemplo:
declare -i x=2 y=3 z=x+y
Haga eco de cada variable para ver los resultados:
echo $x + $y = $z
La salida imprime cada variable en la consola.
Comando expr
El expr
command es una utilidad de línea de comandos heredada para evaluar la aritmética de enteros. Un ejemplo expr
El comando se parece a lo siguiente:
expr 2 + 3
Separe los números y el signo de operación con espacios y ejecute el comando para ver el resultado del cálculo.
Comando factorizar
El factor
command es una utilidad de línea de comandos que imprime los factores de cualquier entero positivo y el resultado se factoriza en números primos.
Por ejemplo, para imprimir los factores del número 100, ejecute:
factor 100
La salida imprime el número factorizado.
dejar Comando
El comando Bash let realiza varias operaciones aritméticas, bit a bit y lógicas. El comando incorporado solo funciona con números enteros. El siguiente ejemplo demuestra el let
sintaxis del comando:
let x=2+3 | echo $x
La salida imprime los resultados.
comando de prueba
La test
El comando en Linux evalúa expresiones condicionales y, a menudo, se empareja con la instrucción Bash if. Hay dos variaciones para la sintaxis de prueba:
test 2 -gt 3; echo $?
O alternativamente:
[ 2 -gt 3 ]; echo $?
La test
El comando evalúa si dos es mayor que (-gt
) Tres. Si la expresión es verdadera, la salida es cero (0
), o uno (1
) si es falso.
Operadores Aritméticos Bash
Bash ofrece una amplia gama de operadores aritméticos para varios cálculos y evaluaciones. Los operadores trabajan con el let
, declare
y expansión aritmética.
A continuación se muestra una tabla de referencia rápida que describe los operadores aritméticos de Bash y su funcionalidad.
Sintaxis | Descripción |
++x , x++ | Pre y post-incremento. |
--x , x-- | Pre y post-decremento. |
+ , - , * , / | Suma, resta, multiplicación, división. |
% , ** (o ^ ) | Módulo (resto) y exponenciación. |
&& , || , ! | Y lógico, O y negación. |
& , | , ^ , ~ | Y, O, XOR bit a bit y negación. |
<= , < , > , => | Operadores de comparación menor o igual que, menor que, mayor que y mayor o igual que. |
== , != | Operadores de comparación de igualdad y desigualdad. |
= | Operador de asignación. Combina con otros operadores aritméticos. |
Cómo hacer matemáticas en Bash
Bash ofrece diferentes formas de realizar cálculos matemáticos según el tipo de problema.
A continuación se muestran ejemplos de algunos problemas comunes que utilizan funciones o comandos matemáticos de Bash como solución. La mayoría de los ejemplos usan la notación de expansión aritmética de Bash. La sección también cubre los errores matemáticos comunes de Bash y cómo resolverlos.
Matemáticas con números enteros
La notación de expansión aritmética es la más sencilla de usar y manipular cuando se trabaja con números enteros. Por ejemplo, cree una expresión con variables y calcule el resultado inmediatamente:
echo $((x=2, y=3, x+y))
Para evaluar varias expresiones, utilice la notación compuesta, almacene cada cálculo en una variable y reproduzca el resultado. Por ejemplo:
((x=2, y=3, a=x+y, b=x*y, c=x**y)); echo $a, $b, $c
Cuando intente dividir, tenga en cuenta lo siguiente:
1. La división por cero (0) es imposible y arroja un error.
2. La expansión aritmética de Bash no es compatible con la aritmética de coma flotante. Al intentar dividir en este caso, la salida muestra cero (0).
El resultado de la división de enteros debe ser un número entero.
Aumentando y Decrementando
La expansión aritmética de Bash utiliza incrementos y decrementos de enteros al estilo C. El operador para incrementar o disminuir está antes o después de la variable, lo que genera un comportamiento diferente.
Si el operador está antes de la variable (++x
o --x
), el incremento o decremento ocurre antes de la asignación de valor. Para ver cómo funciona el incremento previo, ejecute las siguientes líneas:
number=1
echo $((++number))
La variable aumenta y el nuevo valor está disponible inmediatamente.
Si el operador está detrás de la variable (x++
o x--
), el incremento o decremento ocurre después de la asignación de valor. Para ver cómo funciona el incremento posterior, ejecute lo siguiente:
number=1
echo $((number++))
echo $number
La variable permanece igual y se incrementa en el siguiente uso.
Aritmética de punto flotante
Aunque la expansión aritmética de Bash no es compatible con la aritmética de punto flotante, existen otras formas de realizar dichos cálculos. A continuación se muestran cuatro ejemplos que usan comandos o lenguajes de programación disponibles en la mayoría de los sistemas Linux.
1. Usar awk
hasta 6 decimales:
awk 'BEGIN { x = 2.3; y = 3.2; print "x * y = "(x * y) }'
2. Usar bc
con -l
indicador de hasta 20 decimales:
echo "2.3 * 3.2" | bc -l
3. Usar Perl hasta con 20 decimales:
perl -e 'print 2.3*3.2'
Perl a menudo viene preinstalado en los sistemas Linux.
4. Usando printf y expansión aritmética para convertir una fracción a un decimal:
printf %.<precision>f "$((10**<multiplier> * <fraction>))e-<multiplier>"
La precisión dicta cuántos lugares decimales, mientras que el multiplicador es una potencia de diez. El número debe ser menor que el multiplicador. De lo contrario, la fórmula coloca ceros finales en el resultado.
Por ejemplo, convierta 1/3 a decimal con precisión dos:
printf %.2f "$((10**3 * 1/3))e-3"
Evite este método para cálculos precisos y utilícelo solo para una pequeña cantidad de lugares decimales.
Calcular un porcentaje y redondear
A continuación se muestran dos formas de calcular un porcentaje en Bash.
1. Usa printf
con expansión aritmética.
printf %.2f "$((10**4 * part/total))e-4"%
Por ejemplo, calcule qué porcentaje es 40 de 71:
printf %.2f%% "$((10**4 * 40/71))e-4"%
La precisión está limitada a dos decimales y la respuesta siempre se redondea hacia abajo.
2. Usa awk
con printf
para mayor precisión:
awk 'BEGIN { printf "%.2f%%", (part/total*100) }'
Por ejemplo, calcula cuánto por ciento es 40 de 71 con:
awk 'BEGIN { printf "%.2f%%", (40/71*100) }'
La respuesta se redondea hacia arriba si el tercer lugar decimal es mayor que cinco, proporcionando una mayor precisión.
Encontrar un factorial en la concha
Para calcular un factorial para cualquier número, use una función Bash recursiva.
Para números pequeños, la expansión aritmética de Bash funciona bien:
factorial () {
if (($1 > 1))
then
echo $(( $( factorial $(($1 - 1)) ) * $1 ))
else
echo 1
return
fi
}
Para comprobar el factorial de un número, utilice la siguiente sintaxis:
factorial 5
El método es lento y tiene una precisión limitada (hasta factorial 20).
Para mayor precisión, resultados más rápidos y números más grandes, use el bc
dominio. Por ejemplo:
echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1}
factorial(<number>)' | bc
Reemplazar <number>
con el número factorial a calcular. Por ejemplo, para encontrar el factorial de 50, usa:
echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1} factorial(50)' | bc
La salida imprime el resultado del cálculo en el terminal.
Crear una función de calculadora Bash
Cree una función de calculadora Bash simple con el siguiente código:
calculate() { printf "%s\n" "[email protected]" | bc -l; }
La función toma la entrada del usuario y canaliza la ecuación al bc
dominio.
Alternativamente, para evitar el uso de programas, use la expansión aritmética de Bash en una función:
calculate() { echo $(("[email protected]")); }
Tenga en cuenta las limitaciones de expansión aritmética. La aritmética de punto flotante no está disponible con esta función.
Guarde la función en .bashrc archivo para tener siempre la función disponible en el shell.
Uso de diferentes bases aritméticas
De forma predeterminada, la expansión aritmética de Bash utiliza números de base diez. Para cambiar la base numérica, use el siguiente formato:
base#number
Donde base es cualquier número entero entre dos y 64.
Por ejemplo, para hacer un cálculo binario (base 2), use:
echo $((2#1010+2#1010))
Los cálculos octales (base 8) utilizan un prefijo 0 como alias. Por ejemplo:
echo $((010+010))
Los cálculos hexadecimales (base 16) permiten usar 0x como prefijo base. Por ejemplo:
echo $((0xA+0xA))
La salida imprime el resultado en base diez para cualquier cálculo.
Convertir Unidades
Cree un script Bash simple para convertir unidades:
1. Abra un editor de texto, como Vim, y cree un convert.sh texto. Por ejemplo:
vim convert.sh
2. Pegue el siguiente código:
#!/bin/bash
## Program for feet and inches conversion
echo "Enter a number to be converted:"
read number
echo $number feet to inches:
echo "$number*12" | bc -l
echo $number inches to feet:
echo "$number/12" | bc -l
El programa usa la lectura Bash para tomar la entrada del usuario y calcula la conversión de pies a pulgadas y de pulgadas a pies.
3. Guarde el script y cierre:
:wq
4. Ejecute el script Bash con:
. convert.sh
Introduzca un número y vea el resultado. Para diferentes conversiones, utilice fórmulas de conversión adecuadas.
Resolviendo "error bash:valor demasiado grande para la base"
Cuando trabaje con diferentes bases numéricas, manténgase dentro de los límites de la base numérica. Por ejemplo, los números binarios usan 0 y 1 para definir números:
echo $((2#2+2#2))
Intentando usar 2#2
como un número genera un error:
bash: 2#2: value too great for base (error token is "2#2")
El número no tiene el formato correcto para uso binario. Para resolver el error, convierta el número a binario para realizar el cálculo correctamente:
echo $((2#10+2#10))
El número binario 10
es 2
en base diez.
Resolviendo "error de sintaxis:operador aritmético no válido"
La notación de expansión aritmética de Bash solo funciona para cálculos de enteros. Intente sumar dos números de punto flotante, por ejemplo:
echo $((2.1+2.1))
El comando imprime un error:
bash: 2.1+2.1: syntax error: invalid arithmetic operator (error token is ".1+2.1")
Para resolver el error, utilice la aritmética de enteros regulares o un método diferente para calcular la ecuación.
Resolviendo "error de bash:se esperaba una expresión entera"
Al comparar dos números, la test
El comando requiere números enteros. Por ejemplo, pruebe el siguiente comando:
[ 1 -gt 1.5 ]
La salida imprime un error:
bash: [: 1.5: integer expression expected
Resuelva el error comparando valores enteros.