Comparación de arrays en Shell

ShellShellBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo comparar arrays en scripting de Shell. Los arrays son estructuras de datos útiles para almacenar múltiples valores, y compararlos es una tarea común en la programación. Trabajarás con tres arrays y desarrollarás un script para encontrar los elementos comunes entre ellos. Este proceso te ayudará a entender la manipulación de arrays, los bucles y las declaraciones condicionales en scripting de Shell.

Crear el archivo del script

Primero, creemos un nuevo archivo para nuestro script.

  1. Abre una terminal en el WebIDE. Deberías ver un indicador de comando que termina con el signo $.

  2. Navega hasta el directorio del proyecto:

cd ~/project

Este comando cambia tu directorio actual al directorio del proyecto. El símbolo ~ representa tu directorio principal, y /project es una subcarpeta dentro de él.

  1. Crea un nuevo archivo llamado array-comparison.sh:
touch array-comparison.sh

El comando touch crea un archivo vacío. Si el archivo ya existe, actualiza la marca de tiempo del archivo sin modificar su contenido.

  1. Abre el archivo en el editor del WebIDE. Puedes hacer esto haciendo clic en el nombre del archivo en el explorador de archivos en el lado izquierdo de la interfaz del WebIDE.

Agregar el shebang e inicializar los arrays

Ahora, comencemos a escribir nuestro script agregando el shebang e inicializando nuestros arrays.

  1. Agrega el siguiente contenido a array-comparison.sh:
#!/bin/bash

## Initialize the arrays
a=(3 5 8 10 6)
b=(6 5 4 12)
c=(14 7 5 7)

Analicemos esto:

  • La primera línea #!/bin/bash se llama shebang. Le dice al sistema que use el intérprete Bash para ejecutar este script. Esta línea es crucial para cualquier script de shell.
  • Luego, inicializamos tres arrays: a, b y c. En Bash, los arrays se definen encerrando los elementos entre paréntesis () y separándolos con espacios.
  • Cada array contiene diferentes valores enteros. Usaremos estos arrays para encontrar elementos comunes.

Implementar el primer bucle de comparación

Implementemos el primer bucle de comparación para encontrar los elementos comunes entre los arrays a y b.

Agrega el siguiente código a tu script:

## Initialize an array to store common elements between a and b
z=()

## Compare arrays a and b
for x in "${a[@]}"; do
  for y in "${b[@]}"; do
    if [ $x = $y ]; then
      z+=($x)
    fi
  done
done

echo "Common elements between a and b: ${z[@]}"

Expliquemos este código en detalle:

  • z=() inicializa un array vacío z para almacenar los elementos comunes.
  • for x in "${a[@]}" es un bucle que itera sobre cada elemento del array a. La sintaxis "${a[@]}" se expande a todos los elementos del array.
  • Luego, tenemos un bucle anidado for y in "${b[@]}" que itera sobre cada elemento del array b.
  • if [ $x = $y ] comprueba si el elemento actual de a es igual al elemento actual de b.
  • Si son iguales, agregamos este elemento al array z usando z+=($x).
  • Finalmente, imprimimos los elementos comunes usando echo "Common elements between a and b: ${z[@]}". La sintaxis ${z[@]} se expande a todos los elementos del array z.

Implementar el segundo bucle de comparación

Ahora, implementemos el segundo bucle de comparación para encontrar los elementos comunes entre el array c y los elementos comunes previamente encontrados en el array z.

Agrega el siguiente código a tu script:

## Initialize an array to store common elements among a, b, and c
j=()

## Compare array c with the common elements found in z
for i in "${c[@]}"; do
  for k in "${z[@]}"; do
    if [ $i = $k ]; then
      j+=($i)
    fi
  done
done

echo "Common elements among a, b, and c: ${j[@]}"

Este código es similar al bucle anterior, pero con algunas diferencias clave:

  • Inicializamos un nuevo array vacío j para almacenar los elementos comunes finales.
  • El bucle exterior for i in "${c[@]}" itera sobre los elementos del array c.
  • El bucle interior for k in "${z[@]}" itera sobre los elementos comunes que encontramos entre a y b, que se almacenan en el array z.
  • Comparamos los elementos de c con los elementos de z, y si hay una coincidencia, la agregamos al array j.
  • Finalmente, imprimimos los elementos comunes entre los tres arrays.

Hacer el script ejecutable y ejecutarlo

Ahora que hemos completado nuestro script, hagámoslo ejecutable y ejecutémoslo.

  1. En la terminal, haz el script ejecutable:
chmod +x ~/project/array-comparison.sh

El comando chmod cambia los permisos de un archivo. La opción +x agrega permisos de ejecución, lo que te permite ejecutar el script.

  1. Ejecuta el script:
~/project/array-comparison.sh

Este comando ejecuta tu script. La parte ~/project/ especifica la ruta al script.

Deberías ver una salida similar a esta:

Common elements between a and b: 5 6
Common elements among a, b, and c: 5

Esta salida muestra que:

  • Los elementos comunes entre los arrays a y b son 5 y 6.
  • El elemento común entre los tres arrays (a, b y c) es 5.

Si no ves esta salida o encuentras un error, revisa tu script para ver si hay errores tipográficos o partes faltantes.

Resumen

En este laboratorio, aprendiste cómo comparar arrays en scripting de Shell. Creaste un script que encuentra elementos comunes entre tres arrays utilizando bucles anidados y declaraciones condicionales. Este ejercicio demostró conceptos clave en scripting de Shell, incluyendo:

  1. Crear e inicializar arrays
  2. Utilizar bucles anidados para comparar elementos de arrays
  3. Declaraciones condicionales para comprobar la igualdad
  4. Agregar elementos a arrays de forma dinámica
  5. Hacer un script ejecutable y ejecutarlo

Estas habilidades son fundamentales en scripting de Shell y se pueden aplicar a tareas de procesamiento de datos más complejas en el futuro. A medida que sigas trabajando con scripts de Shell, descubrirás que la manipulación de arrays es una herramienta poderosa para manejar conjuntos de datos de manera eficiente.

Recuerda, la práctica es la clave para dominar estos conceptos. Intenta modificar el script para que funcione con diferentes arrays o para encontrar elementos únicos en lugar de comunes. ¡Que disfrutes scripting!