GNU/Linux >> Tutoriales Linux >  >> Linux

Explicación de las operaciones matemáticas de Bash (aritmética de Bash)

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.

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.


Linux
  1. Explicación del comando Bash trap

  2. Comando de espera bash

  3. Paréntesis en aritmética Expr:3 * (2 + 1)?

  4. comando de exportación bash

  5. Ejecute el comando bash en la canalización de jenkins

Comando Bash Echo explicado con ejemplos en Linux

Bash Scripting - Comando Printf explicado con ejemplos

Script Bash (II)

Comando Arping en Linux explicado

El comando Move de Linux:¡Explicado y simplificado!

Explicación del comando cp de AWS S3

    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.