GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo comparar cadenas en Bash

Al escribir scripts de Bash, a menudo necesitará comparar dos cadenas para verificar si son iguales o no. Dos cadenas son iguales cuando tienen la misma longitud y contienen la misma secuencia de caracteres.

Este tutorial describe cómo comparar cadenas en Bash.

Operadores de comparación #

Los operadores de comparación son operadores que comparan valores y devuelven verdadero o falso. Al comparar cadenas en Bash, puede usar los siguientes operadores:

  • string1 = string2 y string1 == string2 - El operador de igualdad devuelve verdadero si los operandos son iguales.
    • Utilice el = operador con el test [ comando.
    • Utilice el == operador con el [[ comando para la coincidencia de patrones.
  • string1 != string2 - El operador de desigualdad devuelve verdadero si los operandos no son iguales.
  • string1 =~ regex - El operador de expresiones regulares devuelve verdadero si el operando de la izquierda coincide con la expresión regular extendida de la derecha.
  • string1 > string2 - El operador mayor que devuelve verdadero si el operando izquierdo es mayor que el derecho ordenado por orden lexicográfico (alfabético).
  • string1 < string2 - El operador menor que devuelve verdadero si el operando de la derecha es mayor que el de la derecha ordenado por orden lexicográfico (alfabético).
  • -z string - Verdadero si la longitud de la cadena es cero.
  • -n string - Verdadero si la longitud de la cadena no es cero.

Los siguientes son algunos puntos a tener en cuenta al comparar cadenas:

  • Se debe usar un espacio en blanco entre el operador binario y los operandos.
  • Utilice siempre comillas dobles alrededor de los nombres de las variables para evitar problemas de división de palabras o de aglomeración.
  • Bash no separa las variables por "tipo", las variables se tratan como enteros o cadenas según el contexto.

Verificar si dos cadenas son iguales #

En la mayoría de los casos, al comparar cadenas, querrá verificar si las cadenas son iguales o no.

El siguiente script usa la sentencia if y la prueba [ comando para verificar si las cadenas son iguales o no con el = operador:

#!/bin/bash

VAR1="Linuxize"
VAR2="Linuxize"

if [ "$VAR1" = "$VAR2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

Cuando se ejecuta el script, imprimirá el siguiente resultado.

Strings are equal.

Aquí hay otro script que toma la entrada del usuario y compara las cadenas dadas. En este ejemplo, usaremos el [[ comando y == operador.

#!/bin/bash

read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

Ejecute el script e ingrese las cadenas cuando se le solicite:

Enter first string: Linuxize
Enter second string: Ubuntu
Strings are not equal.

También puede usar el lógico y && y o || para comparar cadenas:

[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
Not equal

Comprobar si una cadena contiene una subcadena #

Hay varias formas de comprobar si una cadena contiene una subcadena.

Un enfoque consiste en rodear la subcadena con símbolos de asterisco * lo que significa hacer coincidir todos los caracteres.

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
  echo "It's there."
fi

El script hará eco de lo siguiente:

It's there.

Otra opción es usar el operador regex =~ como se muestra a continuación:

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
  echo "It's there."
fi

El punto seguido de un asterisco .* coincide con cero o más ocurrencias de cualquier carácter excepto un carácter de nueva línea.

Comprobar si una cadena está vacía #

Muy a menudo, también deberá verificar si una variable es una cadena vacía o no. Puedes hacer esto usando -n y -z operadores.

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "String is empty."
fi
String is empty.
#!/bin/bash

VAR='Linuxize'
if [[ -n $VAR ]]; then
  echo "String is not empty."
fi
String is not empty.

Comparando cadenas con el operador de casos #

En lugar de usar los operadores de prueba, también puede usar la declaración de caso para comparar cadenas:

#!/bin/bash

VAR="Arch Linux"

case $VAR in

  "Arch Linux")
    echo -n "Linuxize matched"
    ;;

  Fedora | CentOS)
    echo -n "Red Hat"
    ;;
esac
Linuxize matched.

Comparación lexicográfica #

La comparación lexicográfica es una operación en la que dos cadenas se comparan alfabéticamente comparando los caracteres de una cadena secuencialmente de izquierda a derecha. Este tipo de comparación rara vez se usa.

Los siguientes scripts comparan dos cadenas lexicográficamente:

#!/bin/bash

VAR1="Linuxize"
VAR2="Ubuntu"

if [[ "$VAR1" > "$VAR2" ]]; then
    echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
    echo "${VAR2} is lexicographically greater than ${VAR1}."
else
    echo "Strings are equal"
fi

El script generará lo siguiente:

Ubuntu is lexicographically greater than Linuxize.

Conclusión #

La comparación de cadenas es una de las operaciones más básicas y de uso frecuente en las secuencias de comandos de Bash. Después de leer este tutorial, debería comprender bien cómo comparar cadenas en Bash. También puede consultar nuestra guía sobre la concatenación de cadenas.

Si tiene alguna pregunta o comentario, no dude en dejar un comentario.


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

  2. Cómo comparar cadenas en Bash Shell Scripting

  3. Cómo evaluar cadenas como números en Bash

  4. Cómo concatenar cadenas en Bash

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

Cómo crear alias de Bash

Bash concatenar cadenas

Cómo leer un archivo línea por línea en Bash

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

Cómo ejecutar un script Bash

Cómo establecer la variable de entorno en Bash