Pasar Argumentos al Script

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 la programación de Shell, la capacidad de pasar argumentos a un script es una característica fundamental y poderosa. Permite que los scripts sean más flexibles y reutilizables al aceptar entrada desde la línea de comandos. Este laboratorio (lab) te guiará a través del proceso de crear un script de Shell que pueda aceptar y utilizar argumentos de línea de comandos. Aprenderás cómo acceder a estos argumentos dentro de tu script, manejar múltiples argumentos y utilizar variables especiales para procesarlos de manera eficiente.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) shell(("Shell")) -.-> shell/BasicSyntaxandStructureGroup(["Basic Syntax and Structure"]) shell(("Shell")) -.-> shell/VariableHandlingGroup(["Variable Handling"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) shell(("Shell")) -.-> shell/ControlFlowGroup(["Control Flow"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") shell/BasicSyntaxandStructureGroup -.-> shell/shebang("Shebang") shell/BasicSyntaxandStructureGroup -.-> shell/comments("Comments") shell/VariableHandlingGroup -.-> shell/variables_usage("Variable Usage") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") shell/ControlFlowGroup -.-> shell/if_else("If-Else Statements") shell/ControlFlowGroup -.-> shell/for_loops("For Loops") subgraph Lab Skills linux/echo -.-> lab-388811{{"Pasar Argumentos al Script"}} shell/shebang -.-> lab-388811{{"Pasar Argumentos al Script"}} shell/comments -.-> lab-388811{{"Pasar Argumentos al Script"}} shell/variables_usage -.-> lab-388811{{"Pasar Argumentos al Script"}} linux/touch -.-> lab-388811{{"Pasar Argumentos al Script"}} linux/chmod -.-> lab-388811{{"Pasar Argumentos al Script"}} shell/if_else -.-> lab-388811{{"Pasar Argumentos al Script"}} shell/for_loops -.-> lab-388811{{"Pasar Argumentos al Script"}} end

Crea un nuevo archivo de script

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

  1. Abre el WebIDE si 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 "Nuevo archivo".
  4. Nombrar el nuevo archivo arguments.sh.

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

#!/bin/bash

## Your code will go here

La primera línea se llama "shebang" o "hashbang". Le dice al sistema qué intérprete utilizar para ejecutar el script. En este caso, estamos utilizando bash.

Para los 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 detalle pequeño, pero hace que tus scripts sean más convenientes de usar.

Acceder a los argumentos del script

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

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

Agrega 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 script y los primeros tres argumentos que se le pasen.

Para los principiantes:

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

Hacer el script ejecutable

Antes de poder ejecutar nuestro script, debemos hacerlo ejecutable. Esto se hace utilizando el comando chmod. En la terminal, navega hasta el directorio del proyecto y ejecuta el siguiente comando:

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

El comando chmod +x agrega permisos de ejecución al archivo, lo que permite que se ejecute como un script.

Para los principiantes:

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

Ejecutar el script con argumentos

Ahora que nuestro script es ejecutable, ejecutémoslo 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

Esta salida muestra que nuestro script accedió y mostró con éxito los argumentos de línea de comandos.

Para los principiantes:

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

Manejar la cantidad de argumentos

Modifiquemos nuestro script para manejar diferentes cantidades de argumentos. Utilizaremos la variable especial $#, que contiene la cantidad 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 declaraciones condicionales para manejar diferentes cantidades de argumentos.

Para los principiantes:

  • $# es una variable especial que contiene la cantidad de argumentos pasados al script.
  • [ $## -eq 0 ] es una condición que verifica si la cantidad de argumentos es igual a 0.
  • elif es la abreviatura de "else if" (si no, si). Permite verificar múltiples condiciones en secuencia.
  • El operador -eq significa "igual a". Hay 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

Deberías ver diferentes salidas según la cantidad de argumentos proporcionados.

Para los principiantes:

  • Ejecutar el script sin ningún argumento (./arguments.sh) activará la primera condición de nuestro script.
  • Cada comando subsiguiente agrega más argumentos, lo que demuestra cómo nuestro script maneja diferentes casos.
  • Observa cómo cambia el comportamiento del script según la cantidad de argumentos. Este tipo de flexibilidad es muy útil en scripts del mundo real.

Recorrer todos los argumentos

Finalmente, modifiquemos nuestro script para recorrer todos los argumentos proporcionados utilizando la variable especial $@, que representa todos los argumentos de línea de comandos.

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 iterar sobre todos los argumentos y mostrarlos con su posición.

Para los principiantes:

  • $@ es una variable especial que contiene todos los argumentos pasados al script.
  • El bucle for se utiliza para iterar sobre una lista de elementos. En este caso, está iterando sobre todos los argumentos.
  • $((count + 1)) es una expansión aritmética en bash. Se utiliza para incrementar la variable count.
  • Este script funcionará con cualquier cantidad de argumentos, lo que lo hace más flexible que nuestras versiones anteriores.

Probar el script final

Probemos nuestro script final con múltiples 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 manejar cualquier cantidad de argumentos y mostrarlos todos.

Para los principiantes:

  • Esta versión final del script es mucho más flexible que nuestras versiones anteriores.
  • Puede manejar cualquier cantidad de argumentos, desde cero hasta muchos.
  • El script ahora enumera cada argumento, lo cual puede ser muy útil en scripts más complejos.
  • Intenta ejecutar el script con diferentes cantidades de argumentos para ver cómo se comporta.

Resumen

En este laboratorio, has aprendido cómo crear un script de Shell que puede aceptar y procesar argumentos de línea de comandos. Has explorado varios conceptos clave:

  1. Crear y hacer ejecutable un script
  2. Acceder a argumentos individuales utilizando variables especiales ($1, $2, etc.)
  3. Utilizar la variable $## para determinar la cantidad de argumentos
  4. Implementar lógica condicional para manejar diferentes cantidades de argumentos
  5. Utilizar la variable $@ para recorrer todos los argumentos proporcionados

Estas habilidades son fundamentales en la programación de scripts de Shell y te permitirán crear scripts más flexibles y potentes que pueden adaptarse a diferentes entradas. A medida que continúes desarrollando tus habilidades en la programación de scripts de Shell, descubrirás que la capacidad de manejar argumentos de línea de comandos es crucial para crear scripts versátiles y reutilizables para diversas tareas en la administración de sistemas y la automatización.