Bash Script – DÍA 4

Argumentos y parámetros especiales: $1, $#, «$@», shift

(cómo hacer scripts realmente reutilizables)


1. Objetivo del día

Hoy aprenderás a:

  • pasar datos al script desde la terminal
  • usar $1, $2, $3
  • contar cuántos argumentos llegan ($#)
  • recorrer todos los argumentos ("$@")
  • usar shift para mover argumentos
  • validar entradas

Esto permitirá crear scripts:

  • que acepten rutas
  • que procesen listas
  • que ejecuten acciones sobre varios elementos
  • que sean usados por otros compañeros

2. Requisitos

  • Días 1–3 completados
  • Saber usar bucles y condicionales

3. ¿Qué son los argumentos?

Cuando ejecutas:

./script.sh hola mundo

Los argumentos son:

  • $1 → hola
  • $2 → mundo

El script puede acceder a ellos.


4. Par\u00e1metros especiales

SímboloSignificado
$1primer argumento
$2segundo argumento
$@todos los argumentos
$#número de argumentos
$0nombre del script
"$@"cada argumento como elemento separado
shiftdesplazar argumentos hacia la izquierda

5. Usar $1, $2, $3…

Ejemplo básico:

#!/bin/bash

echo "Primer argumento: $1"
echo "Segundo argumento: $2"

Ejecutar:

./args.sh uno dos

6. Saber cuántos argumentos llegan: $#

echo "Has pasado $# argumentos"

Ejemplo real:

if [ $# -lt 1 ]; then
    echo "Uso: $0 <archivo>"
    exit 1
fi

7. Recorrer todos los argumentos: "$@"

Ejemplo práctico:

#!/bin/bash

for arg in "$@"; do
    echo "Argumento: $arg"
done

Ejecutar:

./listar.sh uno dos tres

8. Usar shift (muy útil para scripts complejos)

shift mueve los argumentos:

Antes:

$1 = uno
$2 = dos
$3 = tres

Tras ejecutar:

shift

Queda:

$1 = dos
$2 = tres

Ejemplo real:

#!/bin/bash

while [[ $# -gt 0 ]]; do
    echo "Procesando: $1"
    shift
done

9. Script real: procesar varios ficheros

Crear un script:

#!/bin/bash

if [[ $# -lt 1 ]]; then
    echo "Uso: $0 archivo1 archivo2 ..."
    exit 1
fi

for archivo in "$@"; do
    if [[ -f "$archivo" ]]; then
        echo "$archivo existe"
    else
        echo "$archivo NO existe"
    fi
done

Ejecutar:

./check_files.sh a.txt b.txt c.txt

10. Script real: probar conectividad a múltiples servidores

#!/bin/bash

if [[ $# -lt 1 ]]; then
    echo "Uso: $0 servidor1 servidor2 ..."
    exit 1
fi

for host in "$@"; do
    echo -n "Ping a $host: "
    if ping -c 1 "$host" >/dev/null 2>&1; then
        echo "OK"
    else
        echo "FALLO"
    fi
done

11. Práctica guiada (20–30 minutos)

11.1. Crear un script que compruebe un archivo pasado como argumento

nano comprueba_arg.sh
#!/bin/bash

if [[ $# -ne 1 ]]; then
    echo "Uso: $0 <archivo>"
    exit 1
fi

if [[ -f "$1" ]]; then
    echo "El archivo existe"
else
    echo "No existe"
fi

11.2. Recorrer todos los argumentos

./script.sh uno dos tres

11.3. Script con shift

./procesa.sh a b c d

12. Checklist del Día 4

  • Sabes usar $1, $2
  • Sabes usar $# para contar argumentos
  • Usas "$@" para recorrerlos
  • Has usado shift
  • Validaste argumentos con condicionales
  • Has creado scripts reutilizables

Si todo está marcado → Día 4 superado.


13. Ejercicio sugerido

Crea un script llamado:

multiping.sh

Que:

  1. Reciba varios hosts como argumentos
  2. Para cada uno haga:
    • ping -c1
    • nslookup
    • comprobar puerto 443 con nc
  3. Muestre un resumen del tipo:
google.com: ping OK, dns OK, puerto OK
192.168.1.1: ping FAIL, dns FAIL, puerto FAIL

Este será un anticipo del proyecto final del Día 7.


14. Día 4 completado

Ya tienes scripts REUTILIZABLES, que aceptan argumentos y procesan listas desde fuera.
Esto es exactamente lo que diferencia a un usuario de un profesional.

Mañana entramos al corazón “avanzado”:

👉 Día 5 – Funciones en Bash: modularización, variables locales, retorno, organización del script

Este día hará que tus scripts parezcan profesionales de verdad.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies