📚 Módulo 2: Creando tus primeros comandos automáticos¶
Duración estimada: 2-3 horas según tu ritmo y experiencia.
Objetivo: Dominar la creación de scripts básicos, utilizar variables para almacenar datos, redirigir salidas y usar pipes para conectar comandos. 🎯
Prerrequisitos: Haber completado el Módulo 1, acceso a un sistema Linux, macOS o WSL con una terminal y un editor de texto (nano, vim o VS Code).
Nota: Experimenta con cada paso para entender bien cómo funcionan los conceptos antes de continuar.
📖 Contenidos del Módulo¶
2.1. Primeros scripts: Automatiza tu saludo 🌱¶
Teoría:
Un script es un archivo con comandos que Bash ejecuta en secuencia. El shebang #!/bin/bash en la primera línea indica que Bash es el intérprete. Esto permite agrupar múltiples órdenes y ejecutarlas como un solo programa.
Práctica:
- Crea un archivo
saludo.sh:
nano saludo.sh
- Escribe el script y guarda con
Ctrl+O,Enter,Ctrl+X:
#!/bin/bash
echo "¡Bienvenido a mi primer script!"
- Dale permisos y ejecútalo:
chmod +x saludo.sh
./saludo.sh
chmod +x habilita la ejecución; ./ lo corre desde el directorio actual.
- Añade la hora actual y prueba:
nano saludo.sh
# Añade esta línea al final:
echo "Hora actual: $(date)"
./saludo.sh
$(date) es una sustitución de comandos: Bash ejecuta date y sustituye el resultado en su lugar. Los $() sirven para capturar la salida de cualquier comando. No confundas esto con $(( )), que es para aritmética (lo veremos en el Módulo 3).
- Modifica el script para saludar con tu nombre:
nano saludo.sh
# Edita la línea echo para que quede así:
echo "¡Hola, [tu nombre]! Hora: $(date)"
./saludo.sh
Dato curioso: Los scripts agrupan comandos que usas a menudo, ahorrándote escribirlos una y otra vez. 😄
2.2. Variables: Almacena y reutiliza datos 🖌️¶
Teoría:
Las variables guardan datos (texto, números, resultados de comandos) para usarlos en distintos puntos del script. En Bash se definen con nombre=valor (sin espacios alrededor del =) y se acceden anteponiendo $ al nombre: $nombre. Esto hace los scripts más flexibles y fáciles de mantener.
Práctica:
- Crea un script
variables.sh:
nano variables.sh
- Define una variable y úsala:
#!/bin/bash
nombre="Aprendiz"
echo "¡Hola, $nombre!"
Guarda y dale permisos: chmod +x variables.sh. Ejecútalo con ./variables.sh.
- Cambia el valor de la variable con tu nombre y vuelve a ejecutar:
nano variables.sh
# Cambia la línea nombre= por tu nombre real
nombre="TuNombre"
./variables.sh
- Guarda la salida de un comando en una variable:
nano variables.sh
# Añade estas líneas:
hora=$(date)
echo "La hora es: $hora"
./variables.sh
- Combina varias variables en un mensaje:
nano variables.sh
# Deja el script así:
#!/bin/bash
nombre="TuNombre"
hora=$(date)
saludo="¡Bienvenido, $nombre!"
echo "$saludo Son las: $hora"
./variables.sh
Consejo: Usa nombres descriptivos para las variables (ej.
mi_nombre,archivo_destino). Evita espacios alrededor del=;nombre = "valor"dará error. 💡
2.3. Redirecciones: Guarda y controla salidas ⚙️¶
Teoría:
Las redirecciones envían la salida de un comando a un archivo en lugar de a la pantalla. Los operadores principales son:
- > crea o sobrescribe el archivo con la salida.
- >> añade la salida al final del archivo sin borrar lo anterior.
- 2> redirige los mensajes de error (stderr) a un archivo.
Esto es fundamental para registrar resultados y depurar scripts.
Práctica:
- Redirige un mensaje a un archivo:
echo "Guardando mi primer resultado" > salida.txt
cat salida.txt
> crea el archivo si no existe, o lo sobrescribe si ya existe.
- Añade más texto al mismo archivo:
echo "Añadiendo una segunda línea" >> salida.txt
cat salida.txt
>> agrega al final sin borrar lo que había.
- Redirige un mensaje de error:
ls /ruta/que/no/existe 2> errores.txt
cat errores.txt
2> captura el error sin que aparezca en pantalla. Muy útil para logs.
- Crea un script que combine redirecciones:
nano guarda.sh
Escribe:
#!/bin/bash
echo "Guardando datos en archivo" > resultado.txt
date >> resultado.txt
echo "Script finalizado" >> resultado.txt
Luego: chmod +x guarda.sh && ./guarda.sh && cat resultado.txt
- Vacía un archivo sin borrarlo:
> resultado.txt
cat resultado.txt
Redirigir nada a un archivo lo deja vacío. Útil para resetear logs.
Advertencia:
>sobrescribe sin preguntar. Si quieres conservar el contenido anterior, usa siempre>>. 🛑
2.4. Pipes: Conecta comandos como un experto 📜¶
Teoría:
El pipe (|) toma la salida de un comando y la pasa directamente como entrada al siguiente, sin necesidad de archivos intermedios. Ejemplo: ls | grep "txt" lista archivos y filtra los que contienen "txt". Esta capacidad de encadenar herramientas es una de las características más poderosas de Bash.
Práctica:
- Lista archivos y filtra con
grep:
ls | grep "mi"
Muestra solo los archivos cuyo nombre contiene "mi".
- Cuenta el número de archivos con
wc -l:
ls | wc -l
wc -l cuenta líneas; como cada archivo ocupa una línea, obtienes el total.
- Crea un script que use un pipe para guardar resultados:
nano pipe.sh
Escribe:
#!/bin/bash
ls | grep "txt" > archivos_txt.txt
echo "Archivos .txt encontrados:"
cat archivos_txt.txt
Luego: chmod +x pipe.sh && ./pipe.sh
- Guarda el resultado de un pipe en una variable:
nano pipe.sh
# Modifica el script:
#!/bin/bash
archivos=$(ls | grep "txt")
echo "Archivos .txt: $archivos" > resultado.txt
./pipe.sh
cat resultado.txt
- Encadena tres comandos:
ls -l | grep "^d" | wc -l
Esto lista en detalle (-l), filtra las líneas que empiezan por d (directorios) y cuenta cuántas hay.
Consejo: Los pipes te permiten construir herramientas potentes combinando comandos simples. Es uno de los conceptos más elegantes de Unix. 💡
2.5. Permisos y ejecución: Seguridad básica 🚀¶
Teoría:
En Linux, cada archivo tiene permisos que definen quién puede leerlo, escribirlo o ejecutarlo. Los permisos se organizan en tres grupos: propietario, grupo y otros. El comando chmod los modifica. Puedes usar la notación simbólica (+x, -w) o la notación octal, donde cada dígito es la suma de los permisos activos:
4= lectura (r)2= escritura (w)1= ejecución (x)
Por ejemplo, 755 significa: propietario puede todo (7 = 4+2+1), grupo y otros pueden leer y ejecutar (5 = 4+1).
Práctica:
- Crea un script sin permisos de ejecución:
nano prueba.sh
Escribe:
#!/bin/bash
echo "Sin permisos aún"
Intenta ejecutarlo con ./prueba.sh — debería fallar con "Permission denied".
- Añade permisos de ejecución y vuelve a intentarlo:
chmod +x prueba.sh
./prueba.sh
- Revisa los permisos con
ls -l:
ls -l prueba.sh
Busca la x en la salida. Verás algo como -rwxr-xr-x, donde cada grupo de tres letras representa propietario, grupo y otros.
- Crea un script solo accesible por ti:
nano secreto.sh
Escribe:
#!/bin/bash
echo "Este script es privado"
Luego:
chmod 700 secreto.sh
ls -l secreto.sh
./secreto.sh
700 da todos los permisos al propietario y ninguno al resto.
- Cambia a permisos compartidos y compara:
chmod 755 secreto.sh
ls -l secreto.sh
Consejo: Usa
chmod 755para scripts que otros también deban ejecutar;chmod 700para scripts privados con datos sensibles. 💡
🛠️ Ejercicios prácticos¶
- Script básico: Crea un script
presentacion.shque muestre tu nombre y la fecha actual. - Variables: Modifica el script para guardar tu ciudad en una variable y mostrarla también.
- Redirección: Redirige la salida del script a un archivo
mi_presentacion.txt. - Pipe: Usa
ls | grep "sh"y cuenta los resultados conwc -l. - Desafío: Crea un script que guarde en un archivo la lista de scripts
.shdel directorio, usando pipes y variables.
📝 Evaluación¶
Cuestionario (5 preguntas):
- ¿Qué hace el shebang
#!/bin/bash? - ¿Cómo defines una variable en Bash y cómo la usas?
- ¿Cuál es la diferencia entre
>y>>? - ¿Qué hace el símbolo
|(pipe) en un comando? - ¿Cómo cambias los permisos de un script para poder ejecutarlo?
Tarea práctica:
Crea un script automatiza.sh que:
- Guarde tu nombre en una variable y lo muestre.
- Guarde la fecha actual en un archivo fecha.txt usando redirección.
- Liste los archivos .sh del directorio usando un pipe y los cuente.
Entrega: El script, el archivo fecha.txt y una nota con los pasos seguidos.
🎬 Vídeo con la solución de la evaluación: Próximamente.
🎉 Recursos adicionales¶
- Documentación:
man bash,man chmod. - Guía de scripting avanzado: Advanced Bash-Scripting Guide (TLDP) — referencia completa para cuando quieras profundizar.
- Tutorial de pipes: Linux Command - Redirection — explica redirecciones y pipes con ejemplos claros.
Tip: Experimenta combinando
echo, pipes y redirecciones para interiorizar bien cada concepto. 💡
🚀 Siguientes pasos¶
¡Felicidades por completar el Módulo 2! En el Módulo 3 aprenderás a tomar decisiones con condicionales (if, case) y a repetir tareas con bucles. ¡Sigue automatizando! ✍️