GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo evaluar cadenas como números en Bash

Como todo es un archivo en Linux, todo es una cadena en bash.

¡Sí! Técnicamente, no hay tipos de datos en Bash. Esencialmente, las variables de Bash son solo cadenas de caracteres.

Y eso crea un problema cuando intentas hacer operaciones aritméticas en bash. Los números que intentas sumar te dan resultados extraños.

[email protected]:~$ sum=3+6
[email protected]:~$ echo $sum
3+6

Para convertir cadenas en números enteros en bash, envuélvalos en $((X)). Así:

$((string))

Si la cadena tiene un número identificable, se tratará como un número. El ejemplo que mostré arriba se puede corregir como:

[email protected]:~$ sum=$((3+6))
[email protected]:~$ echo $sum
9
Cualquier cosa que haga dentro de $((...)) se considera una operación aritmética.

Veamos la conversión de cadenas en números con un poco más de detalle para que pueda usar cálculos aritméticos en bash.

Convertir variables de cadena en números

Declaremos algunos "números" que son básicamente cadenas de caracteres.

[email protected]:~$ a=11
[email protected]:~$ b=3

Puede consultar el número asignado:

[email protected]:~$ echo $a
11
[email protected]:~$ echo $b
3

Ahora intentemos sumar ambos números y almacenar el valor en una tercera variable c :

[email protected]:~$ c=$a+$b
[email protected]:~$ echo $c
11+3

Como puede ver en el resultado anterior, c también se trata como una cadena.

Para que la suma sea exitosa, debe "convertirla" a través de una expansión aritmética:

[email protected]:~$ c=$(($a+$b))
[email protected]:~$ echo $c
14

Tenga en cuenta que c sigue siendo en realidad una cadena, hasta que implícitamente usas la misma expansión aritmética nuevamente para otra operación que discutiré en un rato.

[email protected]:~$ c=$((5))

Lo anterior es equivalente a:

[email protected]:~$ c=5

Usemos una tercera variable d para otra operación:

[email protected]:~$ d=10

Todas estas declaraciones implícitas siguen siendo cadenas. Es igual a como había definido a y b antes.

Ahora para la segunda operación:

[email protected]:~$ e=$(($a+$b*$c-$d))
[email protected]:~$ echo $e
16

En la expresión anterior, primero se calcula el producto de b y c y finalmente sigue la suma y la resta.

Como mencioné anteriormente, cualquier cosa que haga entre $((...)) se considera una operación aritmética.

Toda esta conversión funciona para números enteros. No funcionará con puntos flotantes, es decir, números con puntos decimales.

Intente mezclar cadenas y números reales

Mezclar cadenas y números enteros sigue siendo más seguro que mezclar coca cola y menta. Sin embargo, produce un resultado extraño.

[email protected]:~$ sum=$((3+hello))
[email protected]:~$ echo $sum
3

Solo funcionará cuando haya números (como una cadena). Si es una cadena de caracteres pura, no se convertirá mágicamente en algunos números. En cambio, se ignora como puede ver en el ejemplo anterior.

Método alternativo:usar expr

También puede usar expr herramienta para hacer la evaluación, pero tenga en cuenta que no es un procedimiento Bash "nativo", ya que necesita tener coreutils instalado (por defecto en Ubuntu) como un paquete separado.

[email protected]:~$ expr $a + $b \* $c - $d
16

Espero que este pequeño y rápido tutorial te haya ayudado a evaluar las cadenas bash como números. Si tiene preguntas o sugerencias, no dude en dejar un comentario a continuación.


Linux
  1. ¿Cómo detectar Bash> =4.0?

  2. ¿Cómo comparar dos cadenas en formato de versión separada por puntos en Bash?

  3. Cómo comprobar si smtp funciona desde la línea de comandos (Linux)

  4. Bash:cómo imprimir cadenas de varias líneas (con '\ n') usando printf

  5. ¿Por qué los nombres de usuario de Linux no pueden comenzar con números?

Bash concatenar cadenas

Cómo comparar cadenas en Bash

Cómo usar bash if -z y if -n para probar cadenas en Linux

Cómo mostrar el historial de Bash sin números de línea

Cómo ejecutar un script Bash

Diferencia entre comillas simples y dobles en Bash Shell