Paso de argumentos al script

ShellBeginner
Practicar Ahora

Introducción

En la programación de Shell, la capacidad de pasar argumentos a un script es una característica fundamental y potente. Permite que los scripts sean más flexibles y reutilizables al aceptar entradas directamente desde la línea de comandos. Este laboratorio te guiará a través del proceso de creación de un script de Shell capaz de recibir y utilizar argumentos. Aprenderás a acceder a estos parámetros dentro de tu código, gestionar múltiples entradas y utilizar variables especiales para procesarlas de manera eficiente.

Este es un Laboratorio Guiado, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso 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 96%. Ha recibido una tasa de valoraciones positivas del 100% por parte de los alumnos.

Crear un nuevo archivo de script

Comencemos creando un nuevo archivo para nuestro script. Utilizaremos el WebIDE (VS Code) para este laboratorio.

  1. Abre el WebIDE si aún no está abierto.
  2. En el explorador de archivos de la izquierda, navega hasta el directorio /home/labex/project.
  3. Haz clic derecho en el explorador de archivos y selecciona "New File".
  4. Nombra al nuevo archivo como arguments.sh.

Ahora que hemos creado el archivo, añadamos la estructura básica de nuestro script:

#!/bin/bash

## Your code will go here

La primera línea se conoce como "shebang" o "hashbang". Indica al sistema qué intérprete debe usar para ejecutar el script. En este caso, estamos utilizando bash.

Para principiantes: La línea shebang es importante porque te permite ejecutar el script directamente (como ./arguments.sh) en lugar de tener que escribir bash arguments.sh cada vez. Es un pequeño detalle que hace que tus scripts sean mucho más cómodos de usar.

Acceder a los argumentos del script

Ahora, modifiquemos nuestro script para acceder y mostrar los argumentos que se le pasan. En el scripting de Shell, se utilizan variables especiales para acceder a los argumentos de la línea de comandos:

  • $0 representa el nombre del propio script.
  • $1, $2, $3, etc., representan el primer, segundo y tercer argumento, y así sucesivamente.

Añade el siguiente código a tu archivo arguments.sh:

#!/bin/bash

echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"

Este script mostrará el nombre del archivo y los tres primeros argumentos que reciba.

Para principiantes:

  • El símbolo $ se utiliza para hacer referencia a variables en bash.
  • $0, $1, $2, etc., son variables especiales que bash configura automáticamente cuando ejecutas un script con argumentos.
  • Si ejecutas el script sin ningún argumento, $1, $2 y $3 estarán vacíos, pero el script se ejecutará sin errores.

Hacer que el script sea ejecutable

Antes de poder ejecutar nuestro script, necesitamos darle permisos de ejecución. Esto se hace mediante el comando chmod. En la terminal, navega al directorio del proyecto y ejecuta el siguiente comando:

cd /home/labex/project
chmod +x arguments.sh

El comando chmod +x añade permisos de ejecución al archivo, permitiendo que se ejecute como un programa.

Para principiantes:

  • chmod significa "change mode" (cambiar modo). Se usa para cambiar los permisos de un archivo o directorio.
  • La opción +x añade el permiso de ejecución. Esto es necesario para que bash pueda lanzar el archivo como un script.
  • Si olvidas este paso, recibirás un error de "permission denied" (permiso denegado) al intentar ejecutar el script.

Ejecutar el script con argumentos

Ahora que nuestro script es ejecutable, vamos a probarlo con algunos argumentos. En la terminal, ejecuta el siguiente comando:

./arguments.sh hello world example

Deberías ver una salida similar a esta:

Script name: ./arguments.sh
First argument: hello
Second argument: world
Third argument: example

Este resultado confirma que nuestro script ha accedido y mostrado correctamente los argumentos de la línea de comandos.

Para principiantes:

  • El ./ antes del nombre del script le indica a bash que busque el archivo en el directorio actual.
  • Cada palabra después del nombre del script se convierte en un argumento independiente. En este caso, "hello" es el primero, "world" el segundo y "example" el tercero.
  • Si quieres pasar un argumento que contenga espacios, debes usar comillas, así: ./arguments.sh "hello world" example

Gestionar el número de argumentos

Vamos a modificar nuestro script para que reaccione de forma distinta según la cantidad de argumentos recibidos. Usaremos la variable especial $#, que almacena el número total de argumentos pasados al script.

Actualiza tu archivo arguments.sh con el siguiente contenido:

#!/bin/bash

if [ $## -eq 0 ]; then
  echo "No arguments provided."
elif [ $## -eq 1 ]; then
  echo "One argument provided: $1"
elif [ $## -eq 2 ]; then
  echo "Two arguments provided: $1 and $2"
else
  echo "More than two arguments provided:"
  echo "First argument: $1"
  echo "Second argument: $2"
  echo "Third argument: $3"
  echo "Total number of arguments: $#"
fi

Este script utiliza estructuras condicionales para manejar diferentes escenarios según el número de argumentos.

Para principiantes:

  • $# es una variable especial que contiene el conteo de argumentos entregados al script.
  • [ $## -eq 0 ] es una condición que verifica si el número de argumentos es igual a 0.
  • elif es una abreviatura de "else if". Permite comprobar múltiples condiciones en secuencia.
  • El operador -eq significa "equal to" (igual a). Existen otros operadores como -lt (menor que), -gt (mayor que), etc.

Probar el script actualizado

Ahora, probemos nuestro script actualizado con diferentes cantidades de argumentos:

./arguments.sh
./arguments.sh one
./arguments.sh one two
./arguments.sh one two three four

Verás diferentes mensajes en la salida dependiendo de cuántos argumentos proporciones.

Para principiantes:

  • Ejecutar el script sin argumentos (./arguments.sh) activará la primera condición de nuestro código.
  • Cada comando posterior añade más argumentos, demostrando cómo el script gestiona cada caso.
  • Observa cómo el comportamiento del script cambia dinámicamente. Este tipo de flexibilidad es sumamente útil en scripts del mundo real.

Recorrer todos los argumentos con un bucle

Finalmente, modifiquemos nuestro script para iterar a través de todos los argumentos proporcionados usando la variable especial $@, que representa la lista completa de argumentos.

Actualiza tu archivo arguments.sh con el siguiente contenido:

#!/bin/bash

echo "Total number of arguments: $#"
echo "All arguments:"

count=1
for arg in "$@"; do
  echo "Argument $count: $arg"
  count=$((count + 1))
done

Este script utiliza un bucle for para recorrer cada argumento y mostrarlo junto con su posición numérica.

Para principiantes:

  • $@ es una variable especial que contiene todos los argumentos pasados al script como una lista.
  • El bucle for se utiliza para iterar sobre una lista de elementos. En este caso, recorre cada uno de los argumentos.
  • $((count + 1)) es una expansión aritmética en bash. Se utiliza para incrementar el valor de la variable count.
  • Este script funcionará con cualquier número de argumentos, lo que lo hace mucho más versátil que las versiones anteriores.

Probar el script final

Probemos nuestra versión final del script con varios argumentos:

./arguments.sh apple banana cherry date

Deberías ver una salida similar a esta:

Total number of arguments: 4
All arguments:
Argument 1: apple
Argument 2: banana
Argument 3: cherry
Argument 4: date

Esto demuestra que nuestro script ahora puede procesar cualquier cantidad de argumentos y listarlos todos.

Para principiantes:

  • Esta versión final es mucho más flexible que las primeras que escribimos.
  • Puede manejar desde cero hasta muchísimos argumentos sin problemas.
  • El script ahora numera cada argumento, lo cual resulta muy útil en scripts más complejos.
  • Intenta ejecutar el script con diferentes combinaciones para ver cómo se comporta.

Resumen

En este laboratorio, has aprendido a crear un script de Shell capaz de aceptar y procesar argumentos de línea de comandos. Has explorado varios conceptos clave:

  1. Creación y asignación de permisos de ejecución a un script.
  2. Acceso a argumentos individuales mediante variables especiales ($1, $2, etc.).
  3. Uso de la variable $# para determinar la cantidad de argumentos recibidos.
  4. Implementación de lógica condicional para gestionar diferentes escenarios de entrada.
  5. Uso de la variable $@ para recorrer todos los argumentos mediante un bucle.

Estas habilidades son fundamentales en el scripting de Shell y te permitirán crear herramientas más potentes y adaptables. A medida que sigas desarrollando tus habilidades en Shell, verás que la gestión de argumentos es crucial para automatizar tareas y administrar sistemas de manera eficiente.