Bash Script – DÍA 6
Redirecciones, pipes y ejecución segura: >, >>, 2>, |, &&, ||
(el 80% de la potencia real de Bash está aquí)
1. Objetivo del día
Aprender a controlar:
- la salida estándar
- la salida de error
- la redirección a archivos
- la combinación de comandos con pipes
- la ejecución segura con && y ||
- la captura de errores reales
Esto es lo que permite construir scripts eficientes, limpios y seguros.
Hoy sudamos… pero terminamos siendo profesionales de verdad 😄.
2. Requisitos
- Días 1–5 completos
- Especialmente funciones y bucles
3. Redirecciones: escribir y capturar salidas
3.1. Sobrescribir un archivo: >
echo "Hola" > salida.txt
Esto BORRA el contenido anterior del archivo.
3.2. Añadir al final: >>
echo "Línea adicional" >> salida.txt
No borra nada.
3.3. Redirigir errores: 2>
comando_que_falla 2> errores.log
1>es salida estándar (stdout)2>es salida de error (stderr)
3.4. Guardar salida normal Y errores (muy real)
comando > salida.log 2> errores.log
O mezclarlas juntas:
comando > todo.log 2>&1
2>&1 = “redirige errores donde vaya stdout”.
4. Pipes (|): conectar comandos
Un pipe envía la salida de un comando a otro:
Ejemplo simple:
ls -l | grep ".txt"
Ejemplo real:
ps aux | grep ssh
Ejemplo ultra real en monitorización:
journalctl -p 3 -n 50 | grep "timeout"
Ejemplo para ver los 5 procesos con más CPU:
ps aux | sort -nrk 3 | head -5
5. Ejecución segura con operadores lógicos
5.1. Ejecutar un comando SOLO si el anterior fue bien: &&
ping -c1 google.com && echo "Conectado"
5.2. Ejecutar un comando SOLO si el anterior falla: ||
ping -c1 google.com || echo "Sin conexión"
5.3. Cadena de comandos segura
cp archivo.txt /backup/ && echo "Copia OK" || echo "Copia FALLÓ"
Muy útil en scripts de backup o despliegue.
6. Combinando pipes + redirecciones + seguridad
6.1. Buscar errores y guardarlos en un archivo
journalctl -p 3 -n 100 | grep "ERROR" > errores.txt
6.2. Guardar salida normal y errores SEMÁNTICAMENTE
curl http://localhost 1>ok.log 2>errores.log
6.3. Pipeline con “fallback”
ping -c1 "$host" > /dev/null 2>&1 \
&& echo "$host OK" \
|| echo "$host FAIL"
Esto es exactamente lo que se usa en scripts de health-check.
7. Capturar salida de un comando dentro del script
Muy usado para obtener valores.
fecha=$(date)
host=$(hostname)
usuarios=$(who | wc -l)
Usos reales:
ip=$(hostname -I | awk '{print $1}')
cpu=$(top -bn1 | grep "Cpu" | awk '{print $2}')
8. Práctica guiada (20–30 minutos)
8.1. Crear archivo con errores
ls carpeta_inexistente > salida.txt 2> error.txt
8.2. Buscar procesos usando pipes
ps aux | grep bash
8.3. Contar procesos ssh
ps aux | grep ssh | wc -l
8.4. Hacer un health-check seguro
ping -c1 google.com >/dev/null 2>&1 && echo OK || echo FAIL
8.5. Guardar logs en un archivo
journalctl -p 3 -n 20 | tee errores.txt
(tee = muestra en pantalla y guarda.)
9. Checklist del Día 6
- Usas
>y>>correctamente - Rediriges errores con
2> - Combinas stdout y stderr
- Conectas comandos con pipes
- Usas
&&y||para ejecutar de forma segura - Capturas salidas con
$( ) - Puedes hacer health-checks seguros
Si está todo marcado → Día 6 superado.
10. Ejercicio sugerido
Crea un script:
analiza_log.sh
Que haga:
- Reciba un archivo de log como argumento
- Cuente cuántas veces aparece “error”
- Cuente cuántas veces aparece “timeout”
- Muestre las últimas 20 líneas
- Guarde un informe en
resultado.txtusando redirecciones
Ejemplo de salida:
Errores: 5
Timeouts: 2
Últimas líneas guardadas en resultado.txt
11. Día 6 completado
Hoy has aprendido lo que separa a un usuario de terminal de un verdadero script creator profesional.
Mañana llega EL GRAN FINAL:
👉 DÍA 7 — Proyecto final: Script de chequeo completo de un servidor
Será un script real, profesional y digno de producción, basado en:
- funciones
- bucles
- argumentos
- pipes
- redirecciones
- ejecución segura
- lectura de archivos
