Bash en Linux: historia, creador, comandos y ejemplos prácticos
Guía Linux desde cero
Bash: historia, comandos y scripts para dominar la terminal
Conoce el origen del intérprete de comandos más asociado a GNU/Linux y aprende a automatizar tareas con ejemplos claros y reutilizables.
Bash es un intérprete de comandos y un lenguaje de scripting. Permite conversar con el sistema, combinar programas y convertir tareas repetitivas en procesos automáticos.
Conceptos esenciales
¿Qué es Bash?
Su nombre significa Bourne Again Shell, un juego de palabras con «born again» y con la Bourne shell. Se ejecuta normalmente dentro de una terminal, interpreta lo que escribimos y solicita al sistema operativo que realice la acción.
Shell interactiva
Lee órdenes como ls, cd o grep, expande variables y comodines, guarda un historial y presenta el resultado en pantalla.
Lenguaje de scripting
Guarda instrucciones en archivos, admite variables, funciones, condiciones y bucles, y conecta herramientas mediante tuberías y redirecciones.
Origen y evolución
Brian Fox, GNU y la historia de Bash
Richard Stallman inició el proyecto GNU en 1983 con la meta de crear un sistema operativo libre. Años después, GNU necesitaba una shell compatible con Unix que también fuese software libre.
1977: Bourne shell
Stephen Bourne desarrolló sh en Bell Labs para Unix. Su sintaxis y sus ideas se convirtieron en la base de numerosas shells posteriores.
1988–1989: nace Bash
Brian Fox escribió Bash para el proyecto GNU. La primera versión beta apareció en 1989 como reemplazo libre y mejorado de la Bourne shell.
1990–hoy: evolución
Chet Ramey asumió el mantenimiento principal a comienzos de los noventa. Bash se extendió con GNU/Linux y también llegó a macOS, BSD y Windows mediante distintas capas.
Primeros pasos
Comandos que conviene conocer
Abre una terminal y prueba estas órdenes. El símbolo $ representa el prompt: no hace falta escribirlo.
$ pwd # Muestra la carpeta actual
$ ls -lah # Lista archivos, incluidos los ocultos
$ cd Documentos # Cambia de directorio
$ mkdir proyecto # Crea un directorio
$ touch notas.txt # Crea un archivo vacío
$ cp notas.txt copia.txt # Copia un archivo
$ mv copia.txt datos.txt # Mueve o renombra
$ cat datos.txt # Muestra su contenido
$ man grep # Abre el manual de un comando
Para saber qué shell está ejecutando el proceso actual puedes usar ps -p $$. echo "$SHELL" suele mostrar la shell configurada para iniciar sesión, que no siempre coincide con la que está activa.
La filosofía Unix
Tuberías, filtros y redirecciones
Una de las mayores virtudes de Bash es poder conectar programas pequeños. La salida de uno se convierte en la entrada del siguiente.
# Buscar errores sin distinguir mayúsculas
grep -i "error" aplicacion.log
# Encadenar: buscar, ordenar y contar valores únicos
grep -i "error" aplicacion.log | sort | uniq -c
# > reemplaza el archivo; >> añade al final
date > informe.txt
df -h >> informe.txt
# Guardar también los mensajes de error
comando > salida.log 2>&1
Variables y decisiones
De comandos sueltos a programas
En una asignación no se dejan espacios alrededor de =. Al utilizar una variable, conviene escribirla entre comillas dobles para conservar espacios y evitar expansiones inesperadas.
#!/usr/bin/env bash
nombre="${1:-visitante}"
hora=$(date +%H)
if (( hora < 12 )); then
saludo="Buenos días"
elif (( hora < 20 )); then
saludo="Buenas tardes"
else
saludo="Buenas noches"
fi
printf '%s, %s.\n' "$saludo" "$nombre"
Guárdalo como saludo.sh, concede permiso con chmod +x saludo.sh y ejecútalo con ./saludo.sh Ana. El primer argumento queda disponible en $1; la expresión ${1:-visitante} aporta un valor por defecto.
Automatización real
Ejemplo: copia de seguridad comprimida
Este script recibe una carpeta, comprueba que exista y genera un archivo .tar.gz fechado. Es un buen ejemplo de validación, variables y códigos de salida.
#!/usr/bin/env bash
set -Eeuo pipefail
origen="${1:-}"
destino="${2:-$HOME/backups}"
if [[ -z "$origen" || ! -d "$origen" ]]; then
printf 'Uso: %s CARPETA [DESTINO]\n' "$0" >&2
exit 1
fi
mkdir -p "$destino"
fecha=$(date +%Y-%m-%d_%H-%M-%S)
nombre=$(basename "$origen")
archivo="$destino/${nombre}_${fecha}.tar.gz"
tar -czf "$archivo" -C "$(dirname "$origen")" "$nombre"
printf 'Copia creada: %s\n' "$archivo"
Ejemplo de uso: ./backup.sh "$HOME/Documentos". La opción set -Eeuo pipefail ayuda a detectar fallos, variables no definidas y errores ocultos dentro de tuberías, aunque en proyectos complejos debe acompañarse de un manejo de errores consciente.
Buenas prácticas
Scripts más seguros y mantenibles
Cita las variables
Prefiere "$archivo" a $archivo. Así una ruta con espacios no se divide en varios argumentos.
Valida antes de actuar
Comprueba argumentos, archivos y permisos. Evita ejecutar rm con variables vacías, comodines dudosos o rutas no verificadas.
Analiza y depura
Usa bash -n script.sh para revisar la sintaxis, bash -x para seguir la ejecución y ShellCheck para detectar errores frecuentes.
Conclusión
La terminal se aprende practicando
Bash une décadas de cultura Unix con una herramienta vigente para administrar sistemas, desarrollar software y automatizar trabajo. Empieza con comandos sencillos, combina filtros y termina convirtiendo tus secuencias habituales en scripts pequeños, legibles y seguros.
Comentarios
Publicar un comentario
Hola amigos/as dejad vuestros comentarios, gracias 🙂