Crear y ejecutar scripts de Bash en Windows es hoy más sencillo que nunca gracias a WSL, la capa que permite usar un entorno Linux completo integrado en el sistema de Microsoft sin montar máquinas virtuales pesadas ni configurar arranques duales. Si tu objetivo es automatizar tareas, trabajar con la terminal y aprovechar herramientas clásicas de Linux, este recorrido te llevará desde la instalación hasta el desarrollo y la depuración de scripts.
En las próximas secciones vas a ver cómo habilitar WSL y elegir una distro (por ejemplo Ubuntu), dominar los comandos básicos, escribir tus primeros scripts de Bash con buenas prácticas y llevarlos a producción con cron. Además, aprenderás a integrar Linux y Windows de forma interoperable (comandos cruzados, acceso a archivos, VS Code/Visual Studio, Docker, bases de datos, GPU, GUI), junto a una guía de solución de problemas y diferencias entre WSL, máquinas virtuales, dual boot y contenedores.
Qué es WSL y por qué usarlo para scripts de Bash
WSL (Windows Subsystem for Linux) es una característica de Windows que ejecuta un entorno Linux dentro de Windows, con integración directa del sistema de archivos y la posibilidad de lanzar comandos, herramientas y scripts de Bash como si estuvieras en una distro nativa. Con WSL 2, que emplea un kernel Linux real en una VM ligera, el rendimiento y la compatibilidad mejoran notablemente frente a WSL 1.
Entre sus ventajas destacan la compatibilidad con herramientas CLI (grep, sed, awk, etc.), el acceso cruzado al sistema de archivos y el soporte de Docker sobre WSL 2. Si trabajas en entornos mixtos, necesitas automatizar procesos, compilar, probar o desplegar, WSL reduce fricción y elimina la necesidad de alternar de OS o mantener VMs pesadas.

Preparación del entorno en Windows
Habilita WSL y la Plataforma de Máquina Virtual desde una consola con privilegios de administrador. Puedes hacerlo con PowerShell o CMD de forma muy directa usando el comando simplificado:
wsl --install
Si prefieres hacerlo paso a paso, habilita las características y deja WSL 2 como predeterminado:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartwsl --set-default-version 2
En algunos casos WSL 2 requiere actualizar manualmente el kernel de Linux; descarga el paquete oficial de Microsoft cuando el sistema lo solicite. Tras la instalación o cambios de características, reinicia el equipo.
Instala una distribución de Linux desde Microsoft Store (por ejemplo Ubuntu). Al abrirla por primera vez, crea tu usuario y contraseña de Linux (la entrada será ciega: no verás caracteres al escribir). Verifica que usas WSL 2:
wsl --list --verbose
Instalación y puesta a punto de Ubuntu en WSL
Una vez instalada Ubuntu, actualiza los paquetes para tener las últimas versiones y parches:
sudo apt update && sudo apt upgrade -y
Comprueba o cambia la versión de WSL de la distro (si se instaló en WSL 1):
wsl --list --verbose
wsl --set-version Ubuntu 2
Instala utilidades comunes de desarrollo según tus necesidades:
sudo apt install git curl build-essential -y
Accede a archivos de Windows desde Ubuntu por los puntos de montaje: las unidades aparecen en /mnt. Por ejemplo, el disco C:
cd /mnt/c
Para mejorar el rendimiento: si vas a trabajar con herramientas de Linux, almacena el proyecto en el sistema de archivos de WSL para minimizar latencias, por ejemplo en \\wsl$<DistroName>\home\<UserName>\Proyecto, y evita cargas intensivas en ubicaciones como /mnt/c/Users/<User>/Proyecto.
Primeros pasos en la terminal: comandos básicos útiles
Muévete por el sistema de archivos y lista contenidos:
cd /home,cd ~,pwdls,ls -a
Gestiona archivos y directorios:
mkdir mi_carpeta,touch archivo.txt,cp origen.txt destino.txtmv archivo.txt renombrado.txt,rm archivo.txt,rm -r carpeta
Edita con editores en terminal: nano archivo.txt es sencillo; vim archivo.txt es potente (para salir, usa :q y Enter).
Instala y actualiza paquetes:
sudo apt install htopsudo apt updatesudo apt upgrade -y
Permisos y propiedad: otorga ejecución a un script con chmod +x script.sh y cambia propietario con sudo chown usuario:grupo archivo.txt.
Tu primer script de Bash: estructura y ejecución
Los scripts de Bash terminan en .sh (opcional) y empiezan con un shebang para indicar el intérprete:
#!/bin/bash
Crea un script sencillo, hazlo ejecutable y ejecútalo:
echo "#!/bin/bash" > hola.sh
echo "echo \"Hola, mundo\"" >> hola.sh
chmod +x hola.sh
./hola.sh
También puedes ejecutarlo explícitamente con sh o bash: sh hola.sh o bash hola.sh.
Ejemplo con interacción: solicita una ruta, lista su contenido y muestra la fecha actual:
#!/bin/bash
echo "Hoy es" `date`
echo -e "\nIngresa la ruta al directorio"
read the_path
echo -e "\nTu ruta contiene:"
ls "$the_path"
Comentarios, variables y convenciones en Bash
Usa comentarios con # para documentar y desactivar líneas:
# Esto es un comentario
Las variables no tienen tipos nativos en Bash; almacenan números, texto o caracteres. Asigna y usa con = y expón con $:
pais=España
echo "$pais"
Buenas prácticas de nombres: empieza por letra o guion bajo, usa letras, números y _, distingue mayúsculas/minúsculas, evita espacios, guiones y palabras reservadas. Válidos: nombre_cuenta, miVar; inválidos: 2var, mi var, mi-var.
Entrada y salida en tus scripts
Lee entrada del usuario con read:
read nombre
echo "Hola, $nombre"
Lee desde archivo con bucle while:
while read linea; do echo "$linea"; done < input.txt
Argumentos de línea de comandos: $1, $2, …
echo "Hola, $1!" # ./script.sh Zaira -> Hola, Zaira!
Genera salida con echo, redirecciones y anexos:
echo "Hola, Mundo!"echo "Texto" > output.txt(sobrescribe)echo "Más texto" >> output.txt(adjunta)ls > files.txt(redirige salida de un comando)
Comandos básicos de la shell que usarás a diario
Algunos imprescindibles para scripts y administración: cd, ls, mkdir, touch, rm, cp, mv, echo, cat, grep, chmod, sudo, df, history, ps, y man para consultar manuales.
Condicionales, bucles y case en Bash
Evalúa condiciones con if/elif/else (y lógico -a, or -o):
read n
if [ "$n" -gt 0 ]; then echo "Positivo";
elif [ "$n" -lt 0 ]; then echo "Negativo";
else echo "Cero"; fi
Bucle while: repite mientras la condición sea cierta; incluye contador:
i=0; while [ $i -lt 10 ]; do echo $i; (( i+=1 )); done
Bucle for: para un número fijo de iteraciones o elementos:
for i in {1..5}; do echo $i; done
Case: patrón contra opciones, con comodines y caso por defecto:
fruta="manzana"
case "$fruta" in
manzana) echo "Fruta roja";;
banana) echo "Fruta amarilla";;
*) echo "Fruta desconocida";;
esac
Programar scripts con cron
Cron permite ejecutar tareas automáticas en horarios definidos. Ejemplo de sintaxis:
* * * * * sh /ruta/a/script.sh
Ejemplos útiles:
0 0 * * * /ruta/a/script.sh(cada medianoche)*/5 * * * * /ruta/a/script.sh(cada 5 minutos)0 6 * * 1-5 /ruta/a/script.sh(de lunes a viernes, a las 6:00)0 0 1-7 * * /ruta/a/script.sh(primeros 7 días del mes)0 12 1 * * /ruta/a/script.sh(día 1 del mes al mediodía)
Gestiona tus tareas con crontab -e y crontab -l. En Ubuntu/Debian, /var/log/syslog registra los logs de cron para depuración.
Depuración y solución de problemas en scripts de Bash
Activa el modo de depuración para ver cada comando:
#!/bin/bash
set -x # depuración
Comprueba códigos de salida con $? para detectar errores:
comando_critico
if [ $? -ne 0 ]; then echo "Hubo un error."; fi
Usa echos para inspección: imprime valores y flujos del script:
echo "Valor de x: $x"
Fuerza la salida en caso de error con set -e para detener el script si algún comando falla:
#!/bin/bash
set -e
Interoperabilidad Windows ⇄ Linux y comandos WSL clave
Ejecuta herramientas Linux desde PowerShell o CMD con wsl:
wsl ls -la
Combina comandos de ambos sistemas:
wsl ls -la | findstr "git" o
dir | wsl grep git
Lanza herramientas de Windows desde Bash añadiendo .exe:
notepad.exe .bashrc
Ejecución mixta de llamadas de red:
ipconfig.exe | grep IPv4 | cut -d: -f2
Resumen rápido de comandos WSL útiles:
wsl --install,wsl --list --online,wsl --list --verbosewsl --set-version <Distro> <1|2>wsl --set-default-version 2wsl --shutdown- IPs:
wsl hostname -I(IP en WSL 2) yip route show | grep -i default | awk '{ print $3 }'para IP de Windows desde WSL
Almacenamiento, Windows Terminal y rendimiento
Abre el directorio actual de WSL en el Explorador de Windows con:
explorer.exe .
Para mejor rendimiento, trabaja los proyectos Linux en el sistema de archivos de WSL y evita accesos intensivos en /mnt desde herramientas Linux. Desde Windows, mantiene los archivos en NTFS.
Windows Terminal es ideal para gestionar múltiples sesiones (pestañas, paneles, soporte Unicode, aceleración GPU y temas), y personalizar perfiles de cada distro instalada.
Editor y herramientas de desarrollo: VS Code y Visual Studio
Visual Studio Code funciona perfectamente con WSL usando la extensión de Desarrollo Remoto. Abre tus proyectos con:
code .
Visual Studio 2022 incluye soporte nativo para WSL en proyectos C++ con CMake, facilitando compilar y depurar en diferentes entornos — Windows, WSL y servidores SSH — desde una misma instancia.
Git, credenciales y mejores prácticas
Utiliza Git en WSL para gestionar versiones y configura el administrador de credenciales si trabajas con repositorios remotos. Presta atención a los finales de línea (LF/CRLF) y usa los comandos integrados en VS Code para facilitar las operaciones:
git clone https://github.com/usuario/repositorio.git
Docker, bases de datos, GPU y aplicaciones gráficas
Con WSL 2, Docker Desktop para Windows funciona de manera integrada, permitiendo usar contenedores de desarrollo sin necesidad de máquinas virtuales adicionales.
Para desarrollo local, instala y ejecuta bases de datos como MySQL, PostgreSQL, MongoDB, Redis, SQL Server o SQLite, logrando reproducir entornos Linux de producción y facilitando el trabajo.
Configura aceleración GPU para cargas intensivas y aprendizaje automático, aprovechando el hardware gráfico para un mejor rendimiento.
Las aplicaciones Linux con interfaz gráfica son posibles en WSL (Windows 11 con WSLg lo facilita). En sistemas sin soporte directo, existen alternativas con soluciones integradas como Win‑KeX.
Montar unidades externas o USB en WSL 2
Puedes conectar y montar discos físicos y VHD/VHDX en WSL 2 usando:
wsl --mount <DiskPath>
Opciones útiles: --vhd para discos virtuales, --type <Filesystem> (por defecto ext4), --partition <Nº> y --options con parámetros del FS. Para desmontar, usa:
wsl --unmount <DiskPath>
Diferencias: WSL 1 vs WSL 2, VM, dual boot y Docker
WSL 1 traduce llamadas del sistema, mientras que WSL 2 ejecuta un kernel Linux real en una VM ligera. Esto mejora la compatibilidad y el rendimiento, además de soportar herramientas como Docker de forma nativa.
Frente a una máquina virtual tradicional, WSL 2 arranca casi instantáneo, consume menos recursos y se integra mucho mejor con Windows. Sin embargo, una VM proporciona mayor aislamiento y control, útil en redes complejas o entornos completos.
Con respecto al dual boot, WSL evita reinicios y ofrece una interoperabilidad superior. Si necesitas aprovechar todo el hardware y la interfaz gráfica de Linux, el arranque dual sigue siendo una opción más directa.
En comparación con Docker, recuerda que un contenedor es un servicio aislado y mínimo, mientras que WSL ofrece un entorno de desarrollo generalista. Son complementarios: usa contenedores para servicios específicos y WSL para todo el entorno de desarrollo.
Limitaciones y consideraciones
Algunas limitaciones de WSL (especialmente en WSL 1) afectan a la compatibilidad y rendimiento. En WSL 2, la red pasa por capas de virtualización, lo que puede impactar en escenarios muy sensibles. Ciertos periféricos o servicios de bajo nivel pueden no funcionar igual que en un Linux nativo. También, revisa si tu distro usa systemd si necesitas correr servicios como en un servidor convencional.
La interoperabilidad es muy buena: acceso a ext4 vía WSL, comandos mixtos, y la posibilidad de reinstalar la distro sin afectar Windows si algo falla.
Seguridad y gestión de usuarios en la distro
El usuario creado en la primera ejecución será el predeterminado y tendrá permisos de sudo. Puedes cambiar la contraseña con passwd o, si la olvidas, resetearla desde PowerShell entrando como root:
wsl -u root
passwd <usuario>
Para establecer un usuario predeterminado en una distro, usa:
ubuntu config --default-user <usuario>
Solución de problemas frecuentes
El instalador puede pedirte actualizar el kernel de WSL 2: descarga e instala el paquete oficial y reinicia. Para errores como 0x80070003 o 0x80370102, activa la virtualización en BIOS y asegúrate que los componentes WSL y VM están habilitados.
Para error 0x8007019e (WslRegisterDistribution), habilita WSL desde Características de Windows o usando DISM.
«WSL no tiene ninguna distribución instalada»: abre al menos una vez la distro desde el menú Inicio antes de usarla en la consola.
Distribuciones en ubicación incorrecta (0x80070003): preferiblemente, instala las distros en la misma unidad del sistema Windows, habitualmente C:.
Rendimiento pobre: verifica que usas WSL 2 (wsl -l -v) y trata de almacenar tus proyectos en el sistema de archivos de WSL, evitando rutas en /mnt para cargas intensivas.
Problemas de compatibilidad de software: si necesitas características específicas del kernel, considera una VM o un Linux nativo.
Ya puedes escribir, programar, depurar y automatizar scripts de Bash en Windows, integrando herramientas como Git, VS Code, Docker y bases de datos, con la opción de usar cron para tareas programadas y experimentar con GUI cuando sea posible; todo con un control fino del almacenamiento, comandos clave y soluciones ante errores comunes para facilitarte el trabajo.