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
ystring1 == string2
- El operador de igualdad devuelve verdadero si los operandos son iguales.- Utilice el
=
operador con eltest
[
comando. - Utilice el
==
operador con el[[
comando para la coincidencia de patrones.
- Utilice el
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.