Bash

🐚 ¿Qué es Bash y por qué usarlo?

Bash (Bourne Again SHell) es el intérprete de comandos más común en Linux y macOS. Sirve para:

  • Automatizar tareas repetitivas
  • Administrar sistemas y archivos
  • Encadenar herramientas de forma potente

🗺 Mapa mental de Bash

Tema Qué cubre
Comandos básicos Navegación, gestión de archivos
Variables Creación, expansión, especiales
Redirecciones stdout, stderr, pipes
Expansiones Globs, braces, sustitución
Test y comparaciones Numéricas, cadenas, archivos
Control de flujo Bucles y condicionales
Funciones Reutilización de código
Arrays Indexados y asociativos
Historia y edición Atajos, búsqueda
Opciones Seguridad, depuración
Comandos internos Integrados en Bash
Recetas rápidas Hacks listos para usar

📦 Comandos básicos

Comando Descripción Ejemplo
pwd Ruta actual pwd
ls Lista archivos ls -lha
cd Cambia directorio cd /etc
mkdir Crea carpeta mkdir -p a/b/c
rm Borra archivos rm file.txt
cp Copia archivos cp a.txt b.txt
mv Mueve/renombra mv viejo.txt nuevo.txt

🎯 Variables y parámetros especiales

Variable Descripción Ejemplo
$0 Nombre del script echo $0
$1..$9 Argumentos echo $1
"$@" Todos los argumentos for a in "$@"; do echo $a; done
$# Nº de argumentos echo $#
$? Código salida último comando ls /noexiste; echo $?
$$ PID del shell echo $$
$! PID último proceso bg sleep 10 & echo $!

🧯 Redirecciones y pipes

Operador Acción Ejemplo
> Sobrescribir salida ls > out.txt
>> Añadir salida echo hola >> out.txt
< Entrada desde archivo cat < file.txt
2> Redirigir errores cmd 2> err.log
&> stdout+stderr juntos cmd &> all.log
| Conectar comandos ls | grep txt

🧩 Expansiones y globs

Patrón Significado Ejemplo
* Cualquier cadena ls *.txt
? Un solo carácter ls file?.txt
[abc] Uno de estos ls *[12].txt
{a,b} Lista fija echo {rojo,verde,azul}
{1..3} Rango numérico echo {1..3}
$() Sustitución comando echo $(date)

🧪 Test y comparaciones

Tipo Operadores Ejemplo
Numérica -eq -ne -lt -le -gt -ge [ "$x" -gt 5 ]
Cadenas = != -z -n [ -n "$var" ]
Archivos -f -d -e -r -w -x -s [ -f script.sh ]
Avanzado [[ expr ]] [[ "$a" == a* ]]

🔁 Bucles y condicionales

Estructura Ejemplo
for lista for f in *.txt; do echo $f; done
while condición while true; do date; sleep 1; done
if if [ "$x" -gt 10 ]; then echo OK; fi
case case $var in a) echo A;; b) echo B;; esac

🛠️ Funciones y arrays

Tema Ejemplo
Función simple saludar() { echo "Hola $1"; }
Array indexado nums=(1 2 3)
Array asociativo declare -A edad; edad[Ada]=36
Recorrer array for i in "${nums[@]}"; do echo $i; done

⌨️ Atajos de teclado en Bash

Atajo Acción
CTRL+A Ir al inicio
CTRL+E Ir al final
CTRL+U Borrar línea antes del cursor
CTRL+K Borrar línea después del cursor
CTRL+R Buscar en historial
!! Último comando
!n Comando número n

⚙️ Opciones de shell

Opción Acción Ejemplo
set -x Modo traza set -x
set -e Salir si falla comando set -e
set -u Error si var no definida set -u
shopt Gestionar opciones shopt -s nullglob

🏗 Comandos internos útiles

Comando Uso Ejemplo
echo Mostrar texto echo Hola
read Leer entrada read nombre
test Evaluar condición test -f file.txt
type Ver tipo de comando type ls

🍳 Mini-recetas y hacks

Objetivo Comando
Buscar en archivos grep -R "texto" .
Ordenar por tamaño ls -lhS
Top 5 carpetas pesadas du -sh * | sort -h | tail -n 5
Descargar y extraer curl -L URL | tar xz
Renombrar masivo for f in *.jpg; do mv "$f" new_$f; done

🚫 Errores comunes

Error Cómo evitarlo
Variables sin comillas Cita siempre: "$var"
Usar sh para scripts Bash Usa #!/usr/bin/env bash
Olvidar set -euo pipefail Añádelo en scripts serios
Confundir [ y [[ Prefiere [[ en Bash

🧪 Ejercicios prácticos

  1. Imprime números 1-20 separados por comas sin coma final.
  2. Filtra líneas con ERROR de un log y numéralas.
  3. Cuenta cuántos .txt, .md, .sh hay en un directorio.
  4. Script backup.sh que comprima src/ en backup_YYYYMMDD.tar.gz.
  5. Top 10 palabras más usadas en texto.txt.
  6. Renombra foto1.jpg a foto_001.jpg.
  7. Muestra diferencias únicas entre a.txt y b.txt.
  8. Función is_up host que devuelva 0 si responde a ping.
  9. Lista las 5 carpetas más pesadas.
  10. Reloj en terminal que actualiza cada segundo.

📚 Recursos extra