Inicio Apuntes FPApuntes DAM Cómo comparar cadenas en Bash

Cómo comparar cadenas en Bash

Publicado por entreunosyceros

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

Una vez más aquí. Esta noche mientras espero que termine el renderizado de un pequeño proyecto con el que ando liado, me he decidido a escribir un artículo que tenía pendiente sobre cómo comparar cadenas en bash. La verdad es que en mi día a día suelo utilizar scripts muy a menudo. En ocasiones los escribo yo y en otras son de otra gente. El caso es que cuando se escriben scripts de Bash, a menudo hay que comparar dos cadenas para comprobar si son iguales o no.

Dos cadenas se consideran iguales cuando tienen la misma longitud y contienen la misma secuencia de caracteres. Como he escrito, en las siguientes líneas vamos a ver cómo comparar cadenas en Bash con lo que quiero completar un poco el artículo que escribí hace algún tiempo sobre cómo realizar comparaciones con Bash Shell Script.

Operadores de comparación

Algo que conviene conocer a la hora de realizar los scripts son los operadores de comparación. Estos son operadores que comparan valores y devuelven verdadero o falso. Cuando comparamos cadenas en Bash, se pueden utilizar los siguientes operadores:

  • string1 = string2 y string1 == string2: El operador de igualdad devuelve true si las cadenas son iguales.
    • Usa el operador = con la prueba [ comando.
    • Usa el operador == con el comando [[ para la coincidencia de patrones.
  • string1 != string2: el operador de desigualdad devuelve true si las cadenas no son iguales.
  • string1 =~ regex: El operador de expresiones regulares devuelve true si la cadena de la izquierda coincide con la expresión regular de la derecha.
  • string1 > string2: El operador mayor que devuelve verdadero si el operador la izquierda es mayor que el de la derecha, 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 izquierda, 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.

Comparar cadenas utilizando bash

Lo siguiente que es bueno tener en cuenta al comparar cadenas es:

  • Debe usarse un espacio en blanco entre el operador binario y los operandos.
  • Utilizar siempre comillas dobles alrededor de los nombres de las variables para evitar cualquier división de palabras o problemas de globos.
  • Bash no segrega las variables por ‘tipo’, las variables se tratan como enteros o cadenas según el contexto.

Ejemplos para comparar cadenas utilizando bash

Verifica si las dos cadenas son iguales

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

La siguiente secuencia de comandos usa la prueba [ comando para verificar si las cadenas son iguales o no con el operador =:

#!/bin/bash

VAR1="entreunosyceros"
VAR2="entreunosyceros"

if [ "$VAR1" = "$VAR2" ]; then
    echo "Las cadenas son iguales."
else
    echo "Las cadenas NO son iguales."
fi

Cuando se ejecuta el script, se imprimirá la salida: Las cadenas son iguales.

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

#!/bin/bash

read -p "Escribe la primera cadena: " VAR1
read -p "Escribe una segunda cadena: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Las cadenas son iguales."
else
    echo "Las cadenas NO son iguales."
fi

Al ejecutar el script habrá que escribir las cadenas cuando se le solicite:

Escribe la primera cadena: entreunosyceros
Escribe una segunda cadena: sapoclay

Las cadenas NO son iguales.

También se pueden utilizar && y o || para comparar las cadenas:

[[ "string1" == "string2" ]] && echo "Iguales" || echo "NO son iguales"

Comprobar si una cadena contiene una subcadena

Como con casi todo, hay varias formas de verificar si una cadena contiene una subcadena.

Un enfoque es rodear la subcadena con símbolos de asterisco *, lo que significa que buscamos que coincidan con todos los caracteres.

#!/bin/bash

VAR='Ejemplo de bash publicado en entreunosyceros'
if [[ $VAR == *"entreunosyceros"* ]]; then
  echo "Aquí está!!"
fi

El script mostrará de lo siguiente:

Aquí está!!

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

#!/bin/bash

VAR='Comprar cadenas de texto con bash'
if [[ $VAR =~ .*cadenas.* ]]; then
  echo "Coincidencia encontrada!!"
fi

Verifique si una cadena está vacía

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

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "La cadena está vacía."
fi

Comparación de cadenas con el operador de caso

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

#!/bin/bash

VAR="Sistema Ubuntu"

case $VAR in

  "Sistema Ubuntu")
    echo -n "Encontrado"
    ;;

  Debian | Lubuntu)
    echo -n "Red Hat"
    ;;
esac

Comparación lexicográfica

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

Los siguientes scripts comparan dos cadenas lexicográficamente:

#!/bin/bash

VAR1="entreunosyceros"
VAR2="Ubuntu"

if [[ "$VAR1" > "$VAR2" ]]; then
    echo "${VAR1} es lexicográficamente mayor que ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
    echo "${VAR2} es lexicográficamente mayor que ${VAR1}."
else
    echo "Las cadenas son iguales"
fi

La comparación de cadenas es una de las operaciones más básicas y utilizadas en los scripts de Bash. Esto no es más que un pequeño conjunto de TIPS para tenerlo a mano, pero si ayuda a alguien, pues me alegro.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Resumen de privacidad
cookies entreunosyceros

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudarnos a comprender qué secciones de la web encuentras más interesantes y útiles.

Nunca almacenamos información personal de ningún tipo.

Tienes toda la información sobre privacidad, derechos legales y cookies en nuestra página sobre la política de privacidad o en la página sobre nuestra política de cookies.

Cookies necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de terceros

Esta web utiliza las siguientes cookies adicionales:

- Mailchimp: Recordar si ya estás suscrito al boletín de noticias y sino ofrecértelo al salir.

- Accesibilidad: Para saber tus ajustes de accesibilidad en cada visita.

- Comentarios: Saber si has leído y aceptado nuestra política de privacidad a la hora de dejar un comentario en la web.

- Google Analytics: Localización para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

- Goggle Adsense: Anuncios personalizados según tu geolocalización y preferencias.

Dejar estas cookies activadas nos permite mejorar nuestra web.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.