Bash en Linux: historia, creador, comandos y ejemplos prácticos

Saltar al contenido

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.

Lectura: 12 minutos Nivel inicial e intermedio Ejemplos prácticos
01 / INICIO

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.

terminal
$ 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-y-guardar.sh
# 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.

saludo.sh
#!/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.

backup.sh
#!/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.

Bash transforma comandos cotidianos en automatizaciones reproducibles.

Comentarios

Entradas populares de este blog

Inicios de un Gran Proyecto: cómo convertir una idea en realidad

Historia de la Computación: desde el ábaco hasta la Inteligencia Artificial

Código Máquina: Qué es, cómo funciona y ejemplos prácticos en Linux x86-64