Programación · n.º 5 entre los lenguajes más usados

Aprende Bash y la terminal desde cero

Controla el ordenador con órdenes de texto y automatiza tareas con scripts.

  • 10 lecciones
  • 10 ejercicios interactivos
  • 12 conceptos clave
  • 51,3 % lo usa*

Qué es Bash y la terminal y para qué sirve

Bash es la shell (el intérprete de órdenes) más extendida en Linux y la que encontrarás en servidores, en macOS (que hoy usa zsh, muy parecido) y en Windows a través de WSL. Saber moverte por la terminal y escribir pequeños scripts te ahorra horas de tareas repetitivas.

  • Administrar servidores Linux
  • Automatizar tareas
  • Herramientas de desarrollo y despliegue

Para empezar: En Linux o macOS abre la app Terminal. En Windows instala WSL con Ubuntu y abre su terminal.

Nivel 1 Básico

Lección 1 · Básico

La terminal y tus primeros comandos

La terminal es una ventana donde escribes órdenes y la shell las ejecuta. El texto que aparece antes del cursor es el prompt: suele indicar tu usuario y la carpeta en la que estás.

echo escribe un texto, pwd muestra la carpeta actual y ls lista lo que hay en ella. Muchos comandos aceptan opciones que empiezan por guion, como ls -l para ver detalles.

Ejemplo práctico
echo "Hola desde la terminal"
pwd          # /home/ana
ls           # documentos  fotos  notas.txt
ls -l        # lista con permisos, tamaño y fecha

Ejercicio

¿Qué comando muestra la carpeta en la que estás?

Ver la solución

Respuesta: pwd. pwd (print working directory) muestra la ruta de la carpeta actual.

Lección 2 · Básico

Moverse y manejar archivos

cd cambia de carpeta (cd .. sube una), mkdir crea carpetas, cp copia, mv mueve o renombra y rm borra.

rm no envía nada a la papelera: lo borra directamente. Revisa dos veces antes de usarlo, sobre todo con -r (carpetas enteras).

Ejemplo práctico
mkdir proyecto
cd proyecto
echo "primera nota" > notas.txt
cp notas.txt copia.txt
mv copia.txt antigua.txt
rm antigua.txt
cd ..

Ejercicio

Completa el comando que crea la carpeta «fotos».

 fotos
Ver la solución

Respuesta: mkdir. mkdir (make directory) crea una carpeta nueva.

Lección 3 · Básico

Tu primer script

Un script es un archivo de texto con comandos que se ejecutan en orden. La primera línea, #!/bin/bash (el shebang), indica qué programa debe ejecutarlo.

Para poder lanzarlo con ./script.sh hay que darle permiso de ejecución con chmod +x.

Ejemplo práctico
#!/bin/bash
# saludo.sh
echo "Hoy es $(date +%d/%m/%Y)"
echo "Estás en: $(pwd)"

# En la terminal:
# chmod +x saludo.sh
# ./saludo.sh

Ejercicio

¿Para qué sirve chmod +x saludo.sh?

Ver la solución

Respuesta: Para darle permiso de ejecución. chmod +x añade el permiso de ejecución, necesario para lanzar el archivo como programa.

Lección 4 · Básico

Variables y comillas

Una variable se crea con nombre=valor, sin espacios alrededor del =, y se lee con $nombre. Con $(comando) guardas la salida de un comando.

Entre comillas dobles las variables se sustituyen; entre comillas simples, no. Pon las variables entre comillas dobles para que los espacios no rompan nada.

Ejemplo práctico
nombre="Ana"
archivos=$(ls | wc -l)

echo "Hola, $nombre"     # Hola, Ana
echo 'Hola, $nombre'     # Hola, $nombre (literal)
echo "Hay $archivos elementos aquí"

Ejercicio

¿Por qué falla nombre = "Ana"?

Ver la solución

Respuesta: Porque no puede haber espacios alrededor del =. Con espacios, Bash interpreta nombre como un comando. La asignación se escribe nombre="Ana".

Conceptos clave

Nivel 2 Intermedio

Lección 5 · Intermedio

Condiciones

if ejecuta un bloque si un comando termina bien. Lo habitual es usar [[ … ]] para comprobar cosas: -f (existe el archivo), -d (existe la carpeta), -z (texto vacío), y comparar números con -eq, -lt o -gt.

El bloque se cierra con fi (if al revés).

Ejemplo práctico
archivo="notas.txt"

if [[ -f "$archivo" ]]; then
  echo "$archivo existe"
else
  echo "No encuentro $archivo"
fi

edad=20
if [[ $edad -ge 18 ]]; then echo "Mayor de edad"; fi

Ejercicio

Completa la palabra que cierra el bloque.

if [[ -d fotos ]]; then
  echo "Hay carpeta"
Ver la solución

Respuesta: fi. Los bloques if terminan con fi.

Lección 6 · Intermedio

Bucles

for repite órdenes para cada elemento de una lista; con comodines como *.jpg la lista son los archivos que coinciden. while repite mientras se cumpla una condición.

Un uso muy práctico es renombrar o convertir muchos archivos de golpe.

Ejemplo práctico
# Renombra todas las fotos .jpeg a .jpg
for f in *.jpeg; do
  mv -- "$f" "${f%.jpeg}.jpg"
done

# Cuenta atrás
n=3
while [[ $n -gt 0 ]]; do
  echo "$n…"
  n=$((n - 1))
done

Ejercicio

En for f in *.txt, ¿qué contiene f en cada vuelta?

Ver la solución

Respuesta: El nombre de cada archivo .txt. El comodín *.txt se sustituye por los nombres de los archivos que coinciden, y f toma uno en cada vuelta.

Conceptos clave

Lección 7 · Intermedio

Tuberías y redirecciones

La tubería | pasa la salida de un comando como entrada del siguiente, y así se encadenan herramientas pequeñas: grep filtra líneas, sort ordena, wc -l cuenta.

> guarda la salida en un archivo (sustituyéndolo) y >> la añade al final.

Ejemplo práctico
# ¿Cuántas líneas del registro contienen "error"?
grep -i "error" registro.log | wc -l

# Los 5 archivos más grandes de la carpeta
du -ah . | sort -rh | head -n 5

# Guardar y añadir a un archivo
date > informe.txt
echo "Copia terminada" >> informe.txt

Ejercicio

¿Qué diferencia hay entre > y >>?

Ver la solución

Respuesta: > sustituye el archivo y >> añade al final. > reescribe el archivo desde cero; >> añade el texto al final sin borrar lo anterior.

Nivel 3 Avanzado

Lección 8 · Avanzado

Funciones y argumentos

Un script recibe argumentos: $1 es el primero, $# cuántos hay y "$@" todos ellos. Las funciones funcionan igual, con sus propios $1, $2…

Comprueba siempre que te han pasado lo que necesitas y explica cómo se usa si no.

Ejemplo práctico
#!/bin/bash
# copia.sh: copia un archivo añadiendo la fecha al nombre
copiar_con_fecha() {
  local origen="$1"
  cp -- "$origen" "$origen.$(date +%F)"
}

if [[ $# -lt 1 ]]; then
  echo "Uso: $0 archivo" >&2
  exit 1
fi
copiar_con_fecha "$1"

Ejercicio

Completa la variable que contiene el número de argumentos.

echo "Me has pasado $ argumentos"
Ver la solución

Respuesta: #. $# es el número de argumentos recibidos.

Conceptos clave

Lección 9 · Avanzado

Códigos de salida y errores

Cada comando termina con un código de salida: 0 si fue bien y otro número si falló. $? guarda el del último comando, && ejecuta lo siguiente solo si el anterior fue bien y || solo si falló.

Empezar un script con set -euo pipefail hace que se detenga ante el primer error, una variable sin definir o un fallo dentro de una tubería, en vez de seguir como si nada.

Ejemplo práctico
#!/bin/bash
set -euo pipefail

mkdir -p copias && echo "Carpeta lista"
cp datos.csv copias/ || { echo "No se pudo copiar" >&2; exit 1; }

ls archivo_que_no_existe
echo "Esta línea no se ejecuta: el script ya se ha detenido"

Ejercicio

¿Qué código de salida indica que un comando terminó bien?

Ver la solución

Respuesta: 0. Por convención, 0 significa éxito y cualquier otro valor indica un error.

Lección 10 · Avanzado

Variables de entorno y tareas programadas

Las variables de entorno las heredan los programas que lanzas; export convierte una variable en variable de entorno. PATH es la lista de carpetas donde la shell busca los comandos.

Con cron programas scripts para que se ejecuten solos: crontab -e abre tu lista de tareas, una por línea, con minuto, hora, día, mes, día de la semana y la orden.

Ejemplo práctico
export EDITOR=nano
echo "$PATH"

# Añade tu carpeta de scripts al PATH (en ~/.bashrc)
export PATH="$HOME/bin:$PATH"

# crontab -e → copia de seguridad cada día a las 3:30
30 3 * * * /home/ana/bin/copia.sh /home/ana/documentos

Ejercicio

¿Qué guarda la variable PATH?

Ver la solución

Respuesta: Las carpetas donde se buscan los comandos. Cuando escribes un comando, la shell lo busca en las carpetas de PATH, en orden.

¿Has terminado? Sigue practicando

Repasa los conceptos en el diccionario, practica con estas herramientas o prueba otro lenguaje: las ideas que has aprendido (variables, condiciones, funciones, objetos…) te servirán en cualquiera.

  • Texto y programación

    Comparar dos textos

    Encuentra las diferencias entre dos versiones de un texto, línea a línea y palabra a palabra.

  • Texto y programación

    Probador de expresiones regulares

    Prueba una expresión regular sobre tu texto, con coincidencias, grupos y explicación en español.

Fuentes consultadas

* Porcentaje de personas que dijeron haber usado Bash en la Stack Overflow Developer Survey 2026: Technology (pregunta sobre lenguajes de programación, de scripts y de marcado; todas las respuestas). El progreso de las lecciones se guarda solo en este navegador.