Comparación de cuerdas en Bash un tutorial práctico

Comparación de cuerdas en Bash un tutorial práctico

Comparar cadenas es una tarea común cuando se trabaja con scripts de shell, entrada del usuario o datos de cadena. En el shell, es posible que deba verificar si existe un valor en otra cadena, encuentre si dos cuerdas tienen la misma longitud, prueba el principio o el final de una palabra, o cualquier otro tipo de comparación. Las herramientas UNIX estándar no proporcionan muchas opciones para comparar cadenas; La comparación léxica tradicional (como verificar si dos palabras son la misma longitud y comparar cada carácter individualmente) es difícil de implementar de manera eficiente en el código y no es tan valioso para un lenguaje dinámico como Bash.

Este artículo explica diferentes formas de comparar cadenas en Bash y varios comandos relacionados.

Operadores de comparación de cadenas

Podemos usar operadores de comparación con bash if declaraciones para comparar dos cadenas. Aquí está la lista de operadores de comparación para trabajar con cuerdas en el shell bash.

OperadorDetalles
[“String1” == “String2”]Devuelve verdadero si ambas cuerdas son iguales.
["String1" != "Cadena"Devuelve verdadero si ambas cuerdas no son iguales.
[“String = ~ regex]Compare String1 con la expresión regular y devuelve las coincidencias verdaderas
[-z "cadena"]Devolver verdadero si la longitud de la cadena dada es cero (0)
[-n "cadena"]Devolver verdadero si la longitud de la cadena dada no es cero

Ahora, discutiremos el operador de comparación anterior uno por uno con ejemplos.

Comparar dos cadenas son iguales?

Si necesita verificar si dos cadenas son iguales, use el == operador. Estos operadores comparan el operando izquierdo con el operando derecho y devuelven verdadero si ambos coinciden.

Entendamos con un ejemplo. En un script de shell, inicialice dos variables con una cadena. Luego use la instrucción if para comparar si ambas cadenas son iguales o no utilizando el == operador.

#!/usr/bin/env Bash str1 = "tecadmin" str2 = "tecadmin" if ["$ str1" == "$ str2"] entonces eco "ambas cadenas son iguales" más eco "ambas cuerdas no son iguales" fi F
1234567891011#!/usr/bin/env Bash str1 = "tecadmin" str2 = "tecadmin" if ["$ str1" == "$ str2"] entonces eco "ambas cadenas son iguales" más eco "ambas cuerdas no son iguales" fi F

Ejecute el script de shell anterior en un shell bash y verifique los resultados.

Salida: ambas cadenas son iguales 

Ahora, cambie los valores de ambas variables con diferentes cuerdas. Luego, de nuevo, el script y vea los resultados.

Verificar que dos cadenas no son iguales (!=)

A veces estamos obligados a verificar si ambas cuerdas no son iguales. Puedes usar != operador para probar si dos cuerdas no son iguales. Vamos a ver con un ejemplo:

#!/usr/bin/env Bash str1 = "tecadmin" str2 = "helloworld" ## verifique si ambas cadenas no son iguales si ["$ str1" != "$ Str2"] entonces eco "verdadero, ambas cuerdas no son iguales" de lo contrario "falsas", ambas cadenas son iguales "Fi
123456789101112#!/usr/bin/env Bash str1 = "tecadmin" str2 = "helloworld" ## verifique si ambas cadenas no son igualif ["$ str1" != "$ Str2"] entonces eco "verdadero, ambas cuerdas no son iguales" de lo contrario "falsas", ambas cadenas son iguales "Fi

Ejecute el script de shell anterior en un shell bash y verifique los resultados.

Salida: Verdadero, ambas cadenas no son iguales 

Compare cadenas con expresión regular

Para comparar cadenas con expresiones regulares en Bash, puede usar el comando "GREP" con la opción "-E" (extendido regex). El comando "GREP" busca una cadena para un patrón y devuelve un código de salida de éxito (0) si se encuentra el patrón y un código de salida de falla (1) si no se encuentra el patrón.

Aquí hay un ejemplo de usar el comando "GREP" para comparar una cadena con una expresión regular:

String = "Hello World" if echo "$ String" | Grep -e "^Hello"; Entonces Echo "Match Found" Else Echo "Match no encontrado" Fi
123456String = "Hello World" if echo "$ String" | Grep -e "^Hello"; Entonces Echo "Match Found" Else Echo "Match no encontrado" Fi

También podemos comparar una cadena con una expresión regular en scripts bash. Mientras usa la comparación de cadenas con la expresión regular con una instrucción IF, siempre debe encerrar con [[]] citas. El siguiente ejemplo que mostrará lo ayudará a verificar si la variable contiene la cadena que comienza con una cadena específica.

#!/usr/bin/env Bash str = "tecadmin" if [["$ str" = ~ ^tec]] luego echo "Sí, la expresión regular" más eco "expresión regular no coincide con" Fi
12345678910#!/usr/bin/env Bash str = "tecadmin" if [["$ str" = ~ ^tec]] luego echo "Sí, la expresión regular" más eco "expresión regular no coincide con" Fi
Salida: sí, la expresión regular coincide 

Revisemos otro ejemplo. En este script, le pediremos al usuario que ingrese un número. Luego verifique si el valor de entrada es un número o no. Un contenedor numérico los dígitos entre 0 a 9.

#!/usr/bin/env Bash Read -p "Ingrese un número:" var ## verifique si el valor de entrada es un número si [["$ var" = ~ ^[0-9]+$]] luego se eco "dado La entrada es un número "más eco", lo siento, la entrada no es un número "FI
1234567891011#!/usr/bin/env Bash Read -p "Ingrese un número:" var ## Compruebe si el valor de entrada es un númeroif [["$ var" = ~ ^[0-9]+$]] luego echo "dada la entrada dada es un número "más eco" lo siento, la entrada no es un número "FI

Ejecute el script bash anterior y proporcione la entrada cuando se le solicite.

Primera ejecución: entrada Un número: 12 La entrada dada es un número 

Nuevamente ejecute este script, pero esta vez ingresa un valor no numérico y vea los resultados.

Segunda ejecución: Entrada Un número: 1234a Lo siento, la entrada no es un número 

Verifique si una cadena está vacía

Para verificar si una cadena está vacía en Bash, puede usar la siguiente sintaxis:

if [-z "$ string"]; Entonces echo "la cadena es vacía" más eco "la cadena no está vacía" Fi
12345if [-z "$ string"]; Entonces echo "la cadena es vacía" más eco "la cadena no está vacía" Fi

El "-Z" El operador se usa para probar si la longitud de la cadena es cero. Si la longitud de la cadena es cero, la expresión dentro de los soportes cuadrados devuelve verdadero y se ejecuta la cláusula "entonces". Si la longitud de la cadena es mayor que cero, la expresión devuelve falso y la cláusula "más" se ejecuta.

Conclusión

En conclusión, la comparación de cadenas en Bash es un aspecto fundamental de los scripts de shell que se puede utilizar para tomar decisiones, controlar el flujo de sus scripts y procesar datos. En este tutorial práctico, hemos cubierto los conceptos básicos de la comparación de cuerdas en Bash, incluidos los diversos operadores de comparación, sintaxis y dificultades comunes. También hemos proporcionado ejemplos y ejercicios para ayudarlo a practicar y dominar los conceptos presentados en este tutorial. Siguiendo las mejores prácticas descritas en este tutorial, puede escribir scripts que sean más robustos, confiables y eficientes. Ya sea que sea un usuario principiante o un usuario experimentado, la comparación de cadenas en Bash es una habilidad valiosa que puede ayudarlo a automatizar tareas, resolver problemas y aprovechar al máximo sus scripts de shell.