Saltar al contenido principal
Bash
Lenguaje DevOps

Formación corporativa en Bash

Intérprete de comandos y lenguaje de scripting para Unix y Linux.

Evidencias FUNDAE Activación guiada Evaluación con IA Itinerario a medida

¿Prefieres verlo en directo? Agenda una demo sin compromiso.

Resumen del itinerario en Bash

Para qué equipos

Equipos técnicos que incorporan Bash a su stack productivo o consolidan competencias antes de un proyecto crítico. Adaptamos el temario al nivel de partida y al stack acompañante.

Qué se trabaja

Lecciones aplicadas y ejercicios prácticos en Bash resueltos en el IDE del navegador, con corrección automática por IA y proyectos integradores revisados con rúbrica explícita.

Cómo se contrata

Propuesta concreta sobre teleformación, aula virtual o plan mixto. Sin coste de setup, sin permanencia, con evidencias FUNDAE exportables para la entidad organizadora.

Activación en 3 pasos

Diseñamos el itinerario, el alcance y el calendario según el nivel y el stack de tu equipo. Evidencias FUNDAE exportables, sin permanencia ni coste de setup.

  1. 1 Demo o llamada
    30 min con el fundador. Cuéntanos el stack, el nivel y el calendario.
  2. 2 Propuesta
    Itinerario y modalidad (teleformación, aula virtual o mixto) con evidencias FUNDAE exportables.
  3. 3 Tenant activo
    Tu equipo entra con SSO, asignaciones automáticas y panel admin completo.

¿Prefieres verlo en directo? Agenda una demo sin compromiso.

Qué incluye la formación

Toda la plataforma CertiDevs disponible para tu equipo durante el itinerario. Sin costes ocultos ni módulos premium.

Entornos de programación online, sin instalar nada en el equipo del alumno.
Evaluación con IA de cada ejercicio de código, proyecto y ensayo, con feedback y nota.
Certificado verificable con NIF del alumno y firma digital de CertiDevs.
Panel admin de empresa: alta masiva CSV, asignaciones, foros y encuestas.
Rol inspector FUNDAE con acceso de solo lectura a actividad y resultados.
Reportes exportables en Excel: accesos, progreso, completion y satisfacción.
Integración con tu LMS: LTI 1.1 + 1.3 Deep Linking y exportación SCORM 1.2.
SSO con tu Active Directory (OIDC, Microsoft Entra, Google Workspace).
White-label opcional: subdominio propio, logo y tema de tu marca.
Pruebas técnicas: mismos exámenes para evaluar candidatos en selección.
Foros y mensajería tutorial integrados, requisito FUNDAE cubierto de serie.
Soporte directo de nuestro equipo durante toda la formación.

Cursos disponibles en Bash

Cada curso se puede asignar de forma independiente o combinar en un plan formativo.

Curso completo Bash

Curso completo de Bash, el intérprete de comandos estándar de Linux y macOS y herramienta diaria para perfiles DevOps, SRE y backend. Cubre desde la instalación del entorno hasta la administración avanzada: navegación, archivos y permisos, procesos, servicios systemd, redes, SSH, scripting con control de flujo, funciones y arrays, manejo de errores y validación con linters. Al terminar construyes proyectos reales de automatización, backups y pipelines listos para producción.

Ver curso
Especialización Bash Comandos

Curso práctico de comandos de Bash en Linux y WSL para moverte con soltura en la terminal. Trabajas navegación del sistema de ficheros, gestión de archivos y permisos, control de procesos, redirecciones y tuberías, filtros de texto y comandos de red básicos. Al terminar manejas con autonomía un servidor Linux, depuras incidencias por SSH, operas contenedores Docker y resuelves tareas habituales de DevOps sin recurrir a interfaces gráficas.

Ver curso
Especialización Bash Scripting

Curso para escribir scripts Bash robustos y automatizar tareas en servidores Linux y pipelines CI/CD. Trabajas variables y expansiones, parámetros, estructuras de control, funciones, arrays, aritmética, gestión de errores con flags estrictos y traps, además de debugging y validación con linters de shell. Al terminar construyes scripts profesionales para backups, despliegues y tareas programadas, integrables en cron, systemd timers y pipelines de GitHub Actions o Jenkins.

Ver curso

Ver todos los cursos del catálogo

Stacks habituales que las empresas combinan en sus planes formativos junto a Bash.

Estructura del itinerario

Módulos, lecciones y ejercicios del itinerario

Introducción a Bash Shell

Bash Shell es uno de los intérpretes de comandos más utilizados en sistemas Unix y Linux. Su versatilidad y potencia lo hacen una herramienta indispensable para programadores y administradores de sistemas. En este módulo, abordaremos los conceptos básicos y configuraciones del entorno necesarios para empezar a trabajar con Bash Shell de forma eficiente.

Instalación de Bash Shell

La mayoría de las distribuciones de Linux vienen con Bash Shell preinstalado. Para verificar si Bash está instalado en tu sistema, abre una terminal y ejecuta:

bash --version

Si Bash no está instalado, puedes instalarlo utilizando el gestor de paquetes de tu distribución. Por ejemplo, en Debian/Ubuntu:

sudo apt-get update
sudo apt-get install bash

En Fedora/CentOS:

sudo dnf install bash

Configuración del entorno

Variables de entorno

Las variables de entorno son esenciales para la configuración de Bash Shell. Algunas de las variables más comunes son PATH, HOME, y USER. Puedes ver todas las variables de entorno ejecutando:

printenv

Para establecer una variable de entorno, puedes usar el siguiente comando:

export NOMBRE_VARIABLE=valor

Por ejemplo, para añadir un directorio a tu PATH:

export PATH=$PATH:/ruta/a/tu/directorio

Archivos de configuración

Bash Shell utiliza varios archivos de configuración para personalizar el entorno. Los más importantes son .bashrc, .bash_profile, y .profile.

  • .bashrc: Se ejecuta para sesiones de terminal interactivas no de login.
  • .bash_profile: Se ejecuta para sesiones de terminal interactivas de login.
  • .profile: Se ejecuta si .bash_profile no está presente.

Puedes editar estos archivos para añadir alias, funciones y otras configuraciones personalizadas. Por ejemplo, para añadir un alias en .bashrc:

alias ll='ls -la'

Personalización del prompt

El prompt de Bash Shell puede ser personalizado para mostrar información útil como el nombre del usuario, el host, y el directorio actual. La variable PS1 controla el prompt principal. Un ejemplo de personalización es:

export PS1="\u@\h:\w\$ "

Esto mostrará el prompt en el formato usuario@host:directorio_actual$.

  • Principales distribuciones de Linux Lección
  • Test: distribuciones de Linux Test
  • Instalar Ubuntu en Windows con WSL Lección
  • Test: instalar Ubuntu en Windows con WSL Ejercicio
  • Introducción a Shell y Bash Lección
  • Test: introducción a shell y Bash Test

Modalidades de contratación

Elige la modalidad que mejor se adapte a tu organización. Sin permanencia ni coste de setup.

Teleformación

Acceso autónomo al itinerario en la plataforma: lecciones, vídeos, ejercicios evaluados por IA y proyecto integrador. Con tutorización y foro técnico.

Solicitar propuesta

Aula virtual privada

Sesiones en directo sobre cohorte cerrada del cliente. Práctica guiada, resolución de dudas, evaluación al cierre y evidencias exportables.

Solicitar propuesta

Plan mixto

Teleformación con sesiones en directo intercaladas. Equilibra autonomía del alumno con hitos guiados, revisión de proyectos y feedback síncrono.

Solicitar propuesta

Sobre Bash

Chet Ramey Desde 1989 Documentación oficial

Bash (Bourne Again SHell) es un interprete de comandos y lenguaje de scripting que actua como interfaz entre el usuario y el sistema operativo Unix o Linux. Desarrollada como parte del proyecto GNU, es la evolución moderna de la shell Bourne original (sh) e incorpora caracteristicas de otras shells como Korn shell (ksh) y C shell (csh).

Como shell predeterminada en la mayoria de distribuciones Linux y en Windows a través de WSL (Windows Subsystem for Linux), Bash es una herramienta esencial para administradores de sistemas, desarrolladores backend y perfiles DevOps. En macOS el shell por defecto paso a ser zsh, pero Bash sigue disponible y, como veremos, la mayor parte del scripting portable escrito en Bash funciona también en zsh con cambios mínimos.

Este curso se centra en la versión estable en producción, Bash 5.x, que aporta arrays asociativos robustos, mejoras en la gestión de jobs, variables EPOCHSECONDS y EPOCHREALTIME, y compatibilidad con herramientas modernas de ecosistema como ShellCheck para análisis estático y bats-core para testing unitario.

El pipeline en Bash: stdin, stdout y stderr

El modelo de flujos estándar es la piedra angular del trabajo en línea de comandos. Cada proceso recibe tres descriptores: 0 (stdin), 1 (stdout) y 2 (stderr). El operador | conecta la salida estándar de un comando a la entrada estándar del siguiente, permitiendo componer herramientas pequenas en procesos de datos complejos.

flowchart LR
    stdin[[stdin 0]] --> cmd[Comando]
    cmd -->|descriptor 1| stdout[[stdout 1]]
    cmd -->|descriptor 2| stderr[[stderr 2]]
    stdout -->|`|` tuberia| next[Siguiente comando]
    stderr -->|`2>` redirección| logfile[(archivo de log)]

Procesos: foreground, background y control de jobs

Bash gestiona procesos de forma explícita. Un comando normal se ejecuta en primer plano y bloquea la terminal. Anadiendo & al final, pasa a segundo plano; con Ctrl+Z se suspende y con bg o fg se retoma. El builtin jobs lista los trabajos asociados a la sesión.

stateDiagram-v2
    [*] --> Foreground: comando
    Foreground --> Suspended: Ctrl+Z
    Suspended --> Background: bg
    Foreground --> Background: `&` al final
    Background --> Foreground: fg
    Foreground --> [*]: exit
    Background --> [*]: exit

Ciclo fork, exec y wait

Cuando escribes un comando externo, la shell bifurca un proceso hijo con fork(), sustituye la imagen del hijo por el binario del comando con exec() y se queda esperando su finalización con wait(). Entender este ciclo explica por que las variables exportadas viajan a los hijos pero las no exportadas no, y por que un builtin como cd no puede cambiar el directorio si se ejecutase en un subproceso.

sequenceDiagram
    participant S as Bash (padre)
    participant H as Proceso hijo
    S->>H: fork() crea proceso identico
    H->>H: exec("/bin/ls") sustituye la imagen
    H-->>S: exit code
    S->>S: wait() recoge el estado y actualiza $?

Variables de entorno y shells anidadas

Las variables exportadas viajan a los procesos hijos a través del entorno, mientras que las variables locales quedan confinadas a la shell actual. Al invocar un script como ./script.sh se lanza una subshell que hereda el entorno pero no las variables no exportadas ni las funciones no exportadas con export -f.

flowchart TB
    subgraph Padre[Bash interactivo]
        PATH_P["PATH (exportada)"]
        TEMP_P["TEMP (no exportada)"]
        FUNC_P["función saludar"]
    end
    subgraph Hijo[subshell `./script.sh`]
        PATH_H["PATH heredada"]
        TEMP_H["TEMP ausente"]
    end
    PATH_P --> PATH_H
    TEMP_P -.no viaja.-> TEMP_H
    FUNC_P -.solo con `export -f`.-> Hijo

Heredocs: bloques de texto como entrada

Los here-documents permiten pasar un bloque multilinea como stdin sin crear un fichero intermedio. Son útiles para SQL, generación de ficheros de configuración y scripts SSH remotos. Con <<EOF se expanden variables dentro del bloque; con <<'EOF' (entre comillas) el contenido es literal y no se expanden variables ni comandos.

flowchart LR
    script["Script Bash"] --> here[<<EOF ... EOF]
    here -->|stdin multilinea| cat["cat / mysql / ssh host"]
    here --> variante{Entre comillas?}
    variante -->|<<EOF| exp["Expande `$variable` y `$(comando)`"]
    variante -->|<<'EOF'| lit["Literal, sin expansión"]

Control de flujo: bucles y cortes

Los bucles for, while y until se combinan con break y continue para detener o saltar iteraciones. La sentencia case permite comparar una variable con varios patrones de forma legible. Este diagrama resume el flujo típico de un bucle con corte y continuación.

flowchart TD
    start([inicio]) --> check{condición?}
    check -->|falsa| end1([fin])
    check -->|verdadera| body[ejecutar cuerpo]
    body --> break_q{break?}
    break_q -->|si| end1
    break_q -->|no| cont_q{continue?}
    cont_q -->|si| check
    cont_q -->|no| work[seguir con el resto del cuerpo]
    work --> check

Sintaxis básica

La estructura general de un comando es:

comando [opciones] [argumentos]

Por ejemplo:

ls -la /home/usuario

Encadenamientos útiles:

echo "Primero"; echo "Segundo"           # secuencial
mkdir directorio && cd directorio         # AND logico, el 2 solo si el 1 tuvo exito
grep "patron" f.txt || echo "no existe"  # OR logico, el 2 solo si el 1 fallo

Variables

nombre="Ana"
edad=25
echo "Hola, $nombre. Tienes $edad anos."
echo "${nombre:-anonimo}"   # valor por defecto si esta vacia
echo "${nombre^^}"          # mayusculas (Bash 4+)

Variables especiales frecuentes: $0 nombre del script, $1..$N argumentos, $# número de argumentos, $? código de salida, $$ PID, $! PID del último background.

Arrays

Bash 5.x soporta indexados y asociativos:

frutas=("manzana" "naranja" "platano")
echo "${frutas[0]}"
frutas+=("uva")

declare -A colores
colores[rojo]="#FF0000"
colores[verde]="#00FF00"
echo "${colores[rojo]}"
echo "${!colores[@]}"   # todas las claves

Operadores y aritmetica

resultado=$(( (a + b) * 2 ))
((contador++))

if [[ "$a" == "$b" ]]; then echo "iguales"; fi
if (( a < b )); then echo "a menor"; fi
if [[ -f "$fichero" ]]; then echo "es fichero"; fi

Control de flujo

if [[ -z "$var" ]]; then
    echo "vacia"
elif [[ "$var" == "admin" ]]; then
    echo "privilegiado"
else
    echo "normal"
fi

case "$accion" in
    start|restart) echo "arrancar" ;;
    stop)          echo "parar" ;;
    *)             echo "desconocido" ;;
esac

for archivo in *.log; do
    echo "procesando $archivo"
done

while IFS= read -r linea; do
    echo "leido: $linea"
done < entrada.txt

Funciones

saludar() {
    local nombre="${1:?falta nombre}"
    echo "Hola, $nombre"
}

saludar "Ana"

Redirección y tuberias

comando > salida.log        # sobrescribe stdout
comando >> salida.log       # anade
comando 2> errores.log      # solo stderr
comando > out.log 2>&1      # stdout y stderr al mismo destino
comando &> out.log          # forma moderna equivalente
comando | tee -a log.txt    # ver y guardar a la vez
ls *.txt | wc -l

Scripting robusto con Bash 5.x

Patrón recomendado en la cabecera de cualquier script de producción:

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'

readonly LOG_FILE="/var/log/app/$(basename "$0").log"

log() { printf '[%s] %s\n' "$(date '+%F %T')" "$*" >> "$LOG_FILE"; }
error() { printf '[%s] ERROR: %s\n' "$(date '+%F %T')" "$*" >&2; exit 1; }

trap 'error "fallo en linea $LINENO"' ERR
trap 'rm -f /tmp/app.$$' EXIT

Principales flags de set:

  • -e aborta al primer error con código distinto de cero
  • -u trata como error el uso de variables no definidas
  • -o pipefail propaga fallos en tuberias

Ecosistema moderno

  • ShellCheck: análisis estático obligatorio antes de dar por terminado un script. En CI se ejecuta con shellcheck --severity=warning deploy.sh y suele integrarse con pre-commit.
  • bats-core: framework de testing unitario para Bash, con ficheros .bats que describen casos con @test. Permite ejecutar suites desde bats tests/ y combinarse con shellcheck en un pipeline de integración continua.
  • shfmt: formateador consistente (indentación, espacios, comillas) útil como equivalente a gofmt o prettier en el mundo de los scripts.
  • POSIX sh frente a Bash: los scripts pensados para ser portables (contenedores Alpine con dash, busybox) deben evitar [[ ]], arrays, {1..10} y otras extensiones de Bash. Para estos casos se escribe #!/bin/sh y se valida con shellcheck --shell=sh.
  • Interoperabilidad con zsh: la mayor parte del scripting portable en Bash 5.x funciona en zsh cambiando el shebang, pero el división de palabras y algunos comportamientos de expansión difieren; conviene probar con el interprete concreto de destino antes de publicar.

Buenas practicas

  • Entrecomillar siempre las expansiones de variables: "$var", "${array[@]}".
  • Preferir [[ ... ]] frente a [ ... ] en scripts Bash.
  • Usar local dentro de funciones para evitar contaminar el ámbito global.
  • Validar dependencias con command -v herramienta >/dev/null || exit 1.
  • Devolver siempre un código de salida explícito (exit 0 en exito; exit 1..125 en error según convención).
  • Integrar shellcheck y bats en CI; tratar los warnings como errores en scripts de producción.
  • Evitar eval sobre entrada del usuario y nunca imprimir secretos en logs.

Este curso combina teoria ilustrada con diagramas, tutoriales paso a paso, ejercicios de test, puzzles de rellenar huecos, retos de código y un proyecto final integrador que reune todas las piezas en un script profesional de backup y deploy.

¿Necesitas un itinerario completo?

Este curso puede formar parte de una carrera profesional que combine varias tecnologías. Explora nuestros itinerarios o te diseñamos uno a medida para tu equipo.

Plan formativo de Bash para tu equipo

Recibe una propuesta concreta: modalidad, alcance, calendario y evidencias FUNDAE exportables. Damos de alta a tu equipo, configuramos la plataforma con tus dominios y entregamos certificados verificables e informes para tu entidad organizadora. Sin coste de setup, sin permanencia.

¿Prefieres verlo en directo? Agenda una demo sin compromiso.

Formación en Bash: preguntas frecuentes

¿La formación en Bash para empresas es bonificable por FUNDAE?
Puede ser bonificable cuando la acción cumple los requisitos aplicables. La plataforma aporta evidencias técnicas: seguimiento de tiempos, registro de conexiones, foros, encuestas y certificados para que tu entidad organizadora o gestoría revise la documentación.
¿En qué modalidades se imparte la formación en Bash?
En tres modalidades: teleformación (online asíncrona), aula virtual privada en directo y mixta. Adaptamos temario, calendario y modalidad al equipo.
¿Se adapta el temario de Bash al nivel de mi equipo?
Sí. Ajustamos el itinerario de Bash al nivel y al stack de tu equipo, con ejercicios evaluados por IA y certificado verificable. La activación corporativa se acuerda durante la fase de propuesta.
¿Cómo se evalúa a los alumnos?
Con ejercicios corregidos automáticamente por IA (test, puzle, código, proyecto y ensayo), detección de entregas generadas con IA y certificados verificables por URL.