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\u00e1metros 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
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:
- 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.
