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
shiftpara 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ámetros especiales
| Símbolo | Significado |
|---|---|
$1 | primer argumento |
$2 | segundo argumento |
$@ | todos los argumentos |
$# | número de argumentos |
$0 | nombre del script |
"$@" | cada argumento como elemento separado |
shift | desplazar 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
Script: 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 "El archivo NO existe"
fi
Ejemplo de uso:
./comprueba_arg.sh datos.txt
Salida si existe:
El archivo existe
Salida si no existe:
El archivo NO existe
11.2. Recorrer todos los argumentos
Script: recorre.sh
#!/bin/bash
echo "Número de argumentos: $#"
echo "Lista completa: $@"
echo "----"
for arg in "$@"; do
echo "Procesando: $arg"
done
Ejemplo:
./recorre.sh uno dos tres
Salida:
Número de argumentos: 3
Lista completa: uno dos tres
----
Procesando: uno
Procesando: dos
Procesando: tres
11.3. Script usando shift para ir “consumiendo” argumentos
Esto es algo que muchos scripts profesionales hacen: procesar opciones una a una.
Script: procesa.sh
#!/bin/bash
echo "Argumentos iniciales: $@"
while [[ $# -gt 0 ]]; do
echo "Tomando: $1"
shift
done
echo "Sin argumentos restantes."
Ejemplo:
./procesa.sh a b c d
Salida:
Argumentos iniciales: a b c d
Tomando: a
Tomando: b
Tomando: c
Tomando: d
Sin argumentos restantes.
Esto muestra claramente que shift va eliminando el primer argumento en cada iteración.
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:
- Reciba varios hosts como argumentos
- Para cada uno haga:
ping -c1nslookup- comprobar puerto 443 con
nc
- 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.
