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.
Crear un nuevo archivo de script
Comencemos creando un nuevo archivo para nuestro script. Utilizaremos el WebIDE (VS Code) para este laboratorio.
- Abre el WebIDE si aún no está abierto.
- En el explorador de archivos de la izquierda, navega hasta el directorio
/home/labex/project. - Haz clic derecho en el explorador de archivos y selecciona "New File".
- 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:
$0representa 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,$2y$3estará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:
chmodsignifica "change mode" (cambiar modo). Se usa para cambiar los permisos de un archivo o directorio.- La opción
+xañ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.elifes una abreviatura de "else if". Permite comprobar múltiples condiciones en secuencia.- El operador
-eqsignifica "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
forse 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 variablecount.- 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:
- Creación y asignación de permisos de ejecución a un script.
- Acceso a argumentos individuales mediante variables especiales (
$1,$2, etc.). - Uso de la variable
$#para determinar la cantidad de argumentos recibidos. - Implementación de lógica condicional para gestionar diferentes escenarios de entrada.
- 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.



