Crear scripts de Shell con bucles

Red Hat Enterprise LinuxBeginner
Practicar Ahora

Introducción

En este desafío, aprenderás a crear un script de shell básico que emplea estructuras de control de flujo (como for y while) para procesar archivos o argumentos introducidos por terminal. El scripting en shell es una herramienta sumamente potente para automatizar tareas monótonas y agilizar tus procesos de trabajo. Al completar este reto, adquirirás experiencia práctica en el desarrollo de scripts capaces de gestionar entradas dinámicas y ejecutar diversas operaciones de forma automática.

Crear un script de Shell con un bucle for

En este paso, desarrollarás un script de shell que utilice un bucle for para recorrer una lista de archivos en un directorio específico y realizar una acción con cada uno de ellos. Este script servirá para demostrar cómo procesar múltiples archivos de manera dinámica, una tarea fundamental en la administración de sistemas.

Tareas

  • Crear un script de shell que utilice un bucle for para iterar a través de los archivos de un directorio indicado.
  • Por cada archivo encontrado, el script debe mostrar en pantalla el nombre del archivo y su contenido.

Requisitos

  • El script debe llamarse list_files.sh.
  • El script debe estar ubicado en el directorio ~/project.
  • El script debe comenzar con el shebang #!/bin/bash.
  • El script debe aceptar la ruta de un directorio como su primer argumento de línea de comandos.
  • El script debe emplear un bucle for para recorrer los elementos dentro del directorio proporcionado.
  • Por cada archivo regular detectado, el script debe imprimir "File: " seguido del nombre base del archivo, y a continuación, mostrar todo el contenido del mismo.
  • Si no se proporciona el argumento del directorio, el script debe mostrar un mensaje de uso y finalizar con un código de estado de error (distinto de cero).

Ejemplo

Supongamos que has creado el script list_files.sh en ~/project y le has dado permisos de ejecución. Al ejecutarlo usando ~/project como argumento, el resultado debería ser similar a este:

[labex@host ~]$ cd ~/project
[labex@host project]$ chmod +x list_files.sh
[labex@host project]$ ./list_files.sh ~/project
File: file1.txt
Content of file1.txt

File: file2.txt
Content of file2.txt

File: file3.txt
Content of file3.txt

[labex@host project]$

Si ejecutas el script sin argumentos, debería mostrar el mensaje de uso:

[labex@host project]$ ./list_files.sh
Usage: ./list_files.sh <directory_path>
[labex@host project]$ echo $?
1
[labex@host project]$

El contenido exacto de los archivos dependerá de lo que hayas guardado en ellos.

Pistas

  • Puedes usar la variable especial $1 para acceder al primer argumento pasado al script.
  • Para iterar sobre los archivos de un directorio, puedes usar un patrón de comodín como "$1"/*.
  • Utiliza una sentencia if con el operador de prueba -f (por ejemplo, if [ -f "$file" ]) para verificar si un elemento es un archivo regular y no un directorio.
  • El comando basename es útil para extraer solo el nombre del archivo de una ruta completa. Por ejemplo, basename /home/labex/project/file1.txt devolvería file1.txt.
  • El comando cat se utiliza para mostrar el contenido de un archivo.
  • No olvides otorgar permisos de ejecución a tu script con chmod +x.
  • Para comprobar si una variable está vacía, puedes usar if [ -z "$variable" ].
  • Para finalizar un script con un código de estado específico, usa exit <status_code>.
✨ Revisar Solución y Practicar

Resumen

En este desafío, has aprendido a crear un script de shell sencillo que utiliza un bucle for para iterar a través de los archivos de un directorio y realizar operaciones con ellos. Has practicado la recepción de argumentos por línea de comandos, la validación de entradas y el uso de sentencias condicionales (if) para filtrar únicamente archivos regulares. También has empleado basename para extraer nombres de archivos y cat para visualizar su contenido. Estas habilidades son fundamentales para la automatización de tareas, el procesamiento de datos y la gestión eficiente de archivos en entornos Linux, competencias esenciales tanto para la certificación RHCSA como para la administración de sistemas en el día a día.