1. Introducción al Shell y al Scripting

1. ¿Qué es un Shell?

Un shell es un programa que permite al usuario comunicarse con el sistema operativo. Interpreta los comandos que escribimos y envía instrucciones al sistema para que las ejecute.

En sistemas GNU/Linux existen varios shells. Algunos de los más conocidos son:

  • Bash (Bourne Again SHell): el más utilizado en Linux, objetivo de este curso.
  • Zsh: muy usado en macOS y por usuarios que personalizan el terminal.
  • Fish: ofrece funcionalidades más modernas (autocompletado avanzado, etc.).
  • Dash: es un shell muy minimalista usado en muchos sistemas para scripts del sistema.

En nuestro caso trabajaremos con Bash porque es el estándar en Ubuntu y muy común en servidores Linux.


2. ¿Qué es Bash?

Bash es tanto un intérprete de comandos como un lenguaje de scripting. Esto significa que:

  • Podemos usarlo interactivamente, escribiendo comandos en la terminal.
  • Podemos guardar comandos en un archivo para ejecutarlos como un programa.

Gracias a esto, Bash es muy útil para:

  • Automatizar tareas repetitivas.
  • Administrar sistemas Linux.
  • Crear herramientas personalizadas.
  • Trabajar en entornos DevOps y ciberseguridad.

3. ¿Qué es un Script?

Un script es un archivo que contiene una secuencia de comandos. En lugar de escribirlos uno a uno en la terminal, los agrupamos para que se ejecuten automáticamente.

Un ejemplo básico de script sería:





echo "Hola, mundo!"
echo "Este es mi primer script."

Un script se ejecuta de principio a fin, permitiendo automatizar procesos como:

  • Copias de seguridad.
  • Instalación de software.
  • Monitorización del sistema.
  • Generación de informes.
  • Gestión de archivos.

4. ¿Por qué aprender Bash?

Dominar Bash abre la puerta a muchas áreas técnicas, como:

  • Administración de sistemas y servidores.
  • DevOps y automatización CI/CD.
  • Ciberseguridad (análisis, auditorías, automatización).
  • Ciencia de datos (procesamiento rápido de archivos).
  • Desarrollo backend y despliegues.

Además:

  • Está disponible por defecto en la mayoría de sistemas Linux.
  • Funciona en entornos gráficos y no gráficos.
  • Requiere pocos recursos.
  • Es sencillo de empezar, pero muy potente en niveles avanzados.

5. Rutas, Directorios y Comandos Básicos

Para trabajar con Bash necesitamos movernos entre carpetas y ejecutar comandos.

Algunos comandos básicos que ya deberías conocer o aprender ahora son:

  • pwd — muestra la ruta actual (“print working directory”)
  • ls — lista los archivos en el directorio
  • cd — cambia de directorio
  • mkdir — crea una carpeta
  • touch — crea un archivo vacío
  • cat — muestra el contenido de un archivo
  • rm, cp, mv — borrar, copiar y mover archivos
  • man comando — ver el manual de un comando

Estos comandos se usan tanto en modo interactivo como dentro de scripts.


6. Tipos de Rutas: Absolutas y Relativas

En Linux todo comienza en /, llamado root del sistema.

Existen dos tipos de rutas:

Ruta absoluta: empieza desde la raíz del sistema.
Ejemplos:





/home/usuario/documentos
/etc
/var/log

Ruta relativa: depende de la ruta en la que estés.
Ejemplos:





./miarchivo
../otra_carpeta
scripts/

Conocer esto es importante para escribir scripts reproducibles.


7. Primer Script: Hola Mundo

Vamos a crear un script sencillo para entender el proceso.

  1. Crea un archivo:




nano hola.sh
  1. Escribe dentro:




#!/bin/bash
echo "Hola mundo desde Bash"
  1. Guarda y sal del editor.
  2. Dale permisos de ejecución:




chmod +x hola.sh
  1. Ejecútalo:




./hola.sh

Si aparece el texto en pantalla, lo has hecho bien.


8. ¿Qué es el Shebang?

La primera línea del script se llama shebang, y sirve para indicar qué intérprete debe ejecutar el archivo.

Ejemplos:

  • #!/bin/bash → interpreta el script con Bash
  • #!/usr/bin/python3 → interpreta con Python 3
  • #!/bin/sh → shell compatible POSIX

Si no pones shebang, el sistema usará el intérprete por defecto, lo que puede causar comportamientos inesperados.


9. Errores habituales del Principiante

Es normal ver errores como:

  • permission denied → falta ejecutar chmod +x script.sh
  • command not found → se ejecuta con un shell distinto o está mal escrito
  • no such file or directory → falta ruta, archivo o extensión

También es común olvidar que Linux diferencia mayúsculas y minúsculas:





hola.sh ≠ Hola.sh ≠ HOLA.SH

Ejercicios propuestos

Ejercicio 1: Abrir la terminal y ejecutar los comandos:

  • pwd
  • ls
  • cd hacia diferentes carpetas
  • Crear y borrar archivos con touch y rm

Ejercicio 2: Crear un script llamado presentacion.sh que muestre:

  • Tu nombre
  • El día actual
  • Tu directorio de trabajo

Ejemplo de salida esperada:





Mi nombre es Juan Pérez
Hoy es 2026-01-10
Estoy trabajando en /home/juan

Ejercicio 3: Crear un script que liste los archivos del directorio /etc y guarde el resultado en etc-listado.txt.


Soluciones

Ejercicio 1 — Solución

Enunciado:
Abrir la terminal y ejecutar los comandos:

  • pwd
  • ls
  • cd hacia diferentes carpetas
  • Crear y borrar archivos con touch y rm

📌 Solución / Resultado esperado:

  1. Mostrar la ruta actual:




pwd

Ejemplo de salida:





/home/alumno
  1. Listar archivos del directorio actual:




ls

Salida posible:





Documentos  Descargas  Imágenes
  1. Cambiar de directorio:




cd Documentos
pwd

Ejemplo:





/home/alumno/Documentos

Luego volver al home:





cd ~
pwd
  1. Crear y borrar archivos:

Crear un archivo vacío:





touch prueba.txt

Verificar:





ls

Debería aparecer prueba.txt.

Borrar el archivo:





rm prueba.txt

Ejercicio 2 — Solución

Enunciado:
Crear un script presentacion.sh que muestre:

  • Tu nombre
  • El día actual
  • Tu directorio de trabajo

Ejemplo de salida esperada:





Mi nombre es Juan Pérez
Hoy es 2026-01-10
Estoy trabajando en /home/juan

💡 Solución propuesta (presentacion.sh):





#!/bin/bash

echo "Mi nombre es Juan Pérez"
echo "Hoy es $(date +%Y-%m-%d)"
echo "Estoy trabajando en $(pwd)"

📌 Instrucciones de ejecución:

Dar permisos:





chmod +x presentacion.sh

Ejecutar:





./presentacion.sh

Salida aproximada:





Mi nombre es Juan Pérez
Hoy es 2026-01-10
Estoy trabajando en /home/juan

Evidentemente, cada alumno pondrá su nombre.


Ejercicio 3 — Solución

Enunciado:
Crear un script que liste los archivos del directorio /etc y guarde el resultado en etc-listado.txt.


💡 Solución propuesta (listar_etc.sh):





#!/bin/bash

ls /etc > etc-listado.txt

📌 Explicación:

  • ls /etc → lista el contenido del directorio /etc
  • > → redirecciona la salida estándar a un archivo

📌 Instrucciones:

  1. Crear script:




nano listar_etc.sh
  1. Pegar el contenido, guardar y salir.
  2. Dar permisos:




chmod +x listar_etc.sh
  1. Ejecutar:




./listar_etc.sh
  1. Verificar el resultado:




cat etc-listado.txt

Ejemplo de contenido:





adduser.conf aliases alternatives apache2 apt bash.bashrc ...