Comparación de Arreglos en Shell

ShellBeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, aprenderás a comparar arreglos utilizando scripts de Shell. Los arreglos son estructuras de datos muy útiles para almacenar múltiples valores, y compararlos es una tarea habitual en el mundo de la programación. Trabajarás con tres arreglos distintos y desarrollarás un script para identificar los elementos que tienen en común. Este proceso te ayudará a dominar la manipulación de arreglos, el uso de bucles y las sentencias condicionales en Shell.

Esta es una Guía de Laboratorio (Guided Lab), que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las indicaciones cuidadosamente para completar cada etapa y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 98%. Ha recibido una calificación positiva del 100% por parte de los estudiantes.

Crear el archivo del script

En primer lugar, vamos a crear un nuevo archivo para nuestro script.

  1. Abre una terminal en el WebIDE. Deberías ver un símbolo de sistema que termina con el signo $.

  2. Dirígete al directorio del proyecto:

cd ~/project

Este comando cambia tu directorio actual a la carpeta del proyecto. El símbolo ~ representa tu directorio personal (home), 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, simplemente actualiza la marca de tiempo del archivo sin modificar su contenido.

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

Añadir el shebang e inicializar los arreglos

Ahora, comenzaremos a escribir nuestro script añadiendo el shebang e inicializando los arreglos.

  1. Añade 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 lo que hemos escrito:

  • La primera línea #!/bin/bash se conoce como shebang. Indica al sistema que debe utilizar el intérprete de Bash para ejecutar este script. Esta línea es fundamental en cualquier script de shell.
  • A continuación, inicializamos tres arreglos: a, b y c. En Bash, los arreglos se definen encerrando los elementos entre paréntesis () y separándolos con espacios.
  • Cada arreglo contiene diferentes valores enteros. Utilizaremos estos datos para encontrar los elementos que coinciden en todos ellos.

Implementar el primer bucle de comparación

Vamos a implementar el primer bucle de comparación para encontrar los elementos comunes entre los arreglos a y b.

Añade 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[@]}"

Explicación detallada del código:

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

Implementar el segundo bucle de comparación

Ahora, implementaremos el segundo bucle de comparación para encontrar los elementos comunes entre el arreglo c y los resultados previos almacenados en el arreglo z.

Añade 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 arreglo vacío j para guardar los elementos comunes finales.
  • El bucle externo for i in "${c[@]}" recorre los elementos del arreglo c.
  • El bucle interno for k in "${z[@]}" recorre los elementos comunes que encontramos entre a y b, los cuales están guardados en z.
  • Comparamos los elementos de c con los de z, y si hay una coincidencia, la añadimos al arreglo j.
  • Por último, imprimimos los elementos que están presentes en los tres arreglos originales.

Dar permisos de ejecución al script y ejecutarlo

Una vez completado el script, debemos darle permisos de ejecución y ponerlo a prueba.

  1. En la terminal, otorga permisos de ejecución al archivo:
chmod +x ~/project/array-comparison.sh

El comando chmod cambia los permisos de un archivo. La opción +x añade el permiso de ejecución, permitiéndote correr el script.

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

Este comando inicia la ejecución de tu script. La parte ~/project/ especifica la ruta donde se encuentra el archivo.

Deberías ver una salida similar a esta:

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

Este resultado indica que:

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

Si no ves esta salida o recibes un error, revisa cuidadosamente tu script para detectar posibles errores tipográficos o partes faltantes.

Resumen

En esta práctica de laboratorio, has aprendido a comparar arreglos en Shell scripting. Has creado un script capaz de encontrar elementos comunes entre tres arreglos distintos utilizando bucles anidados y sentencias condicionales. Este ejercicio ha demostrado conceptos fundamentales de Bash, tales como:

  1. Creación e inicialización de arreglos.
  2. Uso de bucles anidados para comparar elementos de arreglos.
  3. Aplicación de sentencias condicionales para verificar igualdades.
  4. Adición dinámica de elementos a un arreglo.
  5. Asignación de permisos de ejecución y ejecución de scripts.

Estas habilidades son esenciales en la programación con Shell y pueden aplicarse a tareas de procesamiento de datos mucho más complejas en el futuro. A medida que sigas practicando, descubrirás que la manipulación de arreglos es una herramienta poderosa para gestionar conjuntos de datos de manera eficiente.

Recuerda que la práctica es fundamental para dominar estos conceptos. Intenta modificar el script para que funcione con otros arreglos o para que busque elementos únicos en lugar de comunes. ¡Feliz programación!