0Pricing
Linux Command Line & Bash Scripting Mastery · Lección

Argumentos y opciones de scripts ($@, $#, getopts)

Aprenda a pasar argumentos a sus scripts y analizar opciones de la línea de comandos mediante variables especiales y «getopts».

Argumentos y opciones de scripts ($@, $#, getopts) es una lección gratuita de Linux Command Line & Bash Scripting Mastery en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Linux Command Line & Bash Scripting Mastery, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Linux Command Line & Bash Scripting Mastery incluye 4 lecciones en total.

Argumentos de scripts: ¿por qué usarlos?

¿Ha usado alguna vez un comando como ls -l o cp file1 file2? ¡-l, file1 y file2 son argumentos! Indican al comando qué debe hacer o sobre qué debe actuar.

En los scripts de Bash, los argumentos hacen que sus scripts sean flexibles. En lugar de codificar valores directamente, el script puede aceptar entradas desde la línea de comandos al ejecutarse.

Acceder a los argumentos posicionales

Cuando ejecuta un script con argumentos, Bash los asigna automáticamente a unas variables especiales llamadas parámetros posicionales.

  • El primer argumento es $1.
  • El segundo argumento es $2.
  • Y así sucesivamente, hasta $9.

Para los argumentos posteriores al noveno, debe usar llaves, como en ${10}, ${11}, etc. Estas variables contienen los valores que se pasan al script.

Demostración: argumentos posicionales

Veamos cómo acceder a estos argumentos en un script. Guarde el archivo como greet.sh y ejecútelo con ./greet.sh Alice Bob.

#!/bin/bash

echo "Hello, $1!"
echo "Welcome, $2."
echo "The third argument (if any) is: $3"

<code>$0</code> y <code>$#</code>: información del script

Bash proporciona algunas variables especiales más que ofrecen información sobre el propio script y sus argumentos:

  • $0: contiene el nombre del script que se está ejecutando. Es útil para los mensajes de error o el registro.
  • $#: contiene el número total de argumentos posicionales que se han pasado al script.

Estas variables ayudan a que sus scripts sean más robustos y fáciles de usar.

Demostración: <code>$0</code> y <code>$#</code>

Ejecute este script con diferentes cantidades de argumentos, por ejemplo, ./info.sh one two three o simplemente ./info.sh.

#!/bin/bash

echo "Script name: $0"
echo "Number of arguments received: $#"

<code>$@</code> frente a <code>$*</code>: todos los argumentos

A veces necesita hacer referencia a todos los argumentos a la vez. Bash ofrece dos formas:

  • $@: se expande a argumentos independientes. Cuando se escribe entre comillas dobles ("$@"), cada argumento sigue siendo una palabra distinta, aunque contenga espacios. Esta suele ser la opción preferida para los bucles.
  • $*: se expande a una única cadena con todos los argumentos. Cuando se escribe entre comillas dobles ("$*"), todos los argumentos se combinan en una sola palabra, separados por el primer carácter de IFS (separador interno de campos, normalmente un espacio).

¡Use siempre "$@" al iterar sobre argumentos para conservar los espacios!

Demostración: recorrer con <code>"$@"</code>

Este script muestra cómo "$@" gestiona correctamente los argumentos que contienen espacios. Ejecútelo así: ./loop_args.sh hello "world wide" web

#!/bin/bash

echo "Processing arguments with \"$@\":"
for arg in "$@"; do
  echo "  Argument: [$arg]"
done

echo "\nProcessing arguments with \"$*\":"
for arg in "$*"; do
  echo "  Argument: [$arg]"
done

Opciones: más allá de los argumentos posicionales

Los argumentos posicionales son excelentes para casos sencillos, pero ¿qué ocurre si su script necesita opciones o parámetros con nombre opcionales, como -v para el modo detallado o -f filename?

Aquí entran en juego las opciones de la línea de comandos. Hacen que los scripts sean más flexibles y fáciles de usar, ya que permiten especificar la configuración en cualquier orden.

Bash proporciona el comando getopts específicamente para analizar este tipo de opciones.

Sintaxis de <code>getopts</code>: <code>optstring</code>

La sintaxis básica de getopts es: getopts optstring variable.

  • optstring: una cadena de caracteres de opción válidos. Si una opción requiere un argumento, como -f filename, añada dos puntos después del carácter (por ejemplo, f:).
  • variable: un nombre de variable en el que getopts almacenará el carácter de la opción que se esté procesando (por ejemplo, opt).

getopts también establece OPTARG para los argumentos de las opciones y OPTIND para el índice del argumento siguiente.

Demostración: <code>getopts</code> básico

Este script procesa las opciones -v (modo detallado) y -f (archivo). Pruebe a ejecutarlo: ./options.sh -v -f mydata.txt -x o ./options.sh -vf mydata.txt

#!/bin/bash

while getopts "vf:" opt; do
  case $opt in
    v)
      echo "Verbose mode enabled."
      ;;
    f)
      echo "File specified: $OPTARG"
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

Comprobación rápida: variables de argumentos

Considere el siguiente script y la forma en que se ejecuta:

#!/bin/bash
echo "Script: $0"
echo "Count: $#"
for arg in "$@"; do
  echo "Arg: $arg"
done

Si ejecuta: ./myscript.sh "Hello World" 123

¿Cuál sería la salida?

Repaso: argumentos y opciones

¡Excelente trabajo! Ha aprendido a hacer que sus scripts de Bash sean mucho más versátiles:

  • Argumentos posicionales: use $1, $2, etc., para acceder directamente a los argumentos.
  • Variables especiales: $0 para el nombre del script, $# para el número de argumentos y "$@" para iterar de forma segura sobre todos los argumentos.
  • Opciones de la línea de comandos: use getopts para analizar opciones con nombre, como -v, y sus argumentos, como -f filename, haciendo que sus scripts sean más robustos y fáciles de usar.

¡Practique el uso de estos elementos en sus propios scripts para crear herramientas potentes y flexibles de línea de comandos!

Preguntas frecuentes

¿La lección «Argumentos y opciones de scripts ($@, $#, getopts)» es gratis?

Sí — el texto completo de «Argumentos y opciones de scripts ($@, $#, getopts)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Linux Command Line & Bash Scripting Mastery, actualiza a CoddyKit PRO. El curso de Linux Command Line & Bash Scripting Mastery incluye 4 lecciones en total.

¿Qué aprenderé en «Argumentos y opciones de scripts ($@, $#, getopts)»?

Aprenda a pasar argumentos a sus scripts y analizar opciones de la línea de comandos mediante variables especiales y «getopts». Practicas Linux Command Line & Bash Scripting Mastery con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Linux Command Line & Bash Scripting Mastery?

No se requiere experiencia previa. Linux Command Line & Bash Scripting Mastery en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Argumentos y opciones de scripts ($@, $#, getopts)»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Linux Command Line & Bash Scripting Mastery?

Sí. Cada lección de Linux Command Line & Bash Scripting Mastery incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Estructuras de bucle (for, while)
  2. Funciones en scripts de Bash
  3. Argumentos y opciones de scripts ($@, $#, getopts)
  4. La sentencia case y la coincidencia de patrones
← Volver a Linux Command Line & Bash Scripting Mastery