2. Preparación del Entorno y Ejecución de Scripts

Después de entender qué es Bash y qué es un script, el siguiente paso es aprender a preparar correctamente el entorno de trabajo y ejecutar scripts de forma segura y ordenada.


1. Crear Scripts Correctamente

Un script no es más que un archivo de texto plano. Se puede crear con cualquier editor, desde los más simples hasta los más avanzados.

Editores recomendados:

  • nano (para trabajar en la terminal, muy sencillo)
  • vim (más avanzado, orientado a usuarios expertos)
  • Visual Studio Code (editor gráfico con sintaxis resaltada)
  • gedit o kate (editores gráficos simples)

Para crear un script:





nano mi_script.sh

Se recomienda usar la extensión .sh para identificar que es un script de shell, aunque no es obligatoria.


2. Añadir el Shebang

La primera línea del script debe indicar el intérprete que lo ejecutará. Esto se conoce como shebang.

Ejemplo:





#!/bin/bash

Esto garantiza que el script se ejecutará con Bash aunque el sistema use otro shell por defecto.

Otros ejemplos:

  • #!/bin/sh para un shell más compatible POSIX.
  • #!/usr/bin/env bash para localizar Bash dinámicamente en distintas máquinas.

3. Permisos de Ejecución

Un script recién creado no suele tener permisos de ejecución. Para poder ejecutarlo es necesario asignarlos.

Comando:





chmod +x mi_script.sh

Esto indica que el archivo puede ser ejecutado (x) por el usuario.

Para comprobar los permisos:





ls -l mi_script.sh

Ejemplo de salida:





-rwxr-xr-x 1 alumno alumno 57 ene 10 18:22 mi_script.sh

4. Ejecutar Scripts

Hay varias formas de ejecutar un script. Las más comunes son:

4.1. Ejecutarlo por ruta relativa

Si estamos en la misma carpeta del script:





./mi_script.sh

El ./ indica “ejecuta este archivo desde el directorio actual”.

4.2. Ejecutarlo por ruta absoluta

Ejemplo:





/home/alumno/scripts/mi_script.sh

Esto es útil en automatizaciones y servicios del sistema.

4.3. Ejecutarlo a través del intérprete

También podemos invocar directamente Bash:





bash mi_script.sh

Esto ignora permisos, pero exige que el script sea legible.


5. Organización del Entorno de Trabajo

Para no mezclar scripts con otros tipos de archivos, se recomienda crear una carpeta propia:





mkdir ~/scripts
cd ~/scripts

Aquí podemos almacenar scripts y añadir esta carpeta al PATH más adelante para ejecutarlos desde cualquier ubicación.


6. Variables de Entorno y el PATH

El PATH es una variable que indica dónde busca el sistema los programas ejecutables.

Para ver el PATH actual:





echo $PATH

Si añadimos nuestros scripts a una carpeta incluida en el PATH, podremos ejecutarlos sin escribir ./ ni rutas completas.

Más adelante veremos cómo añadir una ruta personalizada al PATH en el archivo .bashrc.


7. Comentarios y Documentación Interna

Es recomendable comentar el código para recordar qué hace cada parte. En Bash los comentarios se escriben con #.

Ejemplo:





#!/bin/bash
# Este script muestra un mensaje por pantalla

echo "Ejecutando mi script..."

Es buena práctica incluir una cabecera con información útil:





#!/bin/bash
# Nombre: backup_home.sh
# Autor: Nombre del alumno
# Descripción: Realiza una copia de seguridad del directorio /home
# Fecha: 10/01/2026

8. Problemas Comunes al Ejecutar Scripts

Durante este módulo suelen aparecer errores típicos:

  • bash: ./script.sh: Permission denied
    → Falta ejecutar chmod +x script.sh
  • command not found
    → El script no se encuentra o no es ejecutable
  • No such file or directory
    → Error en la ruta o en el nombre del archivo
  • bad interpreter: No such file or directory
    → El shebang apunta a una ruta incorrecta o se usa un archivo generado en Windows con saltos de línea incompatibles

Este último error aparece mucho cuando se editan scripts en Windows. Se resuelve con:





dos2unix script.sh

9. Ejemplo Completo de Script

Vamos a crear un script que pida un nombre y salude al usuario.

  1. Crear el archivo:




nano saludo.sh
  1. Contenido:




#!/bin/bash

echo "Introduce tu nombre:"
read nombre
echo "Hola $nombre, encantado de saludarte."
  1. Dar permisos:




chmod +x saludo.sh
  1. Ejecutarlo:




./saludo.sh

Ejercicios propuestos

Ejercicio 1:
Crear un script llamado info.sh que muestre:

  • El usuario actual
  • El directorio donde se encuentra
  • La fecha actual

Salida orientativa:





Usuario: alumno
Directorio: /home/alumno/scripts
Fecha: 2026-01-10

Ejercicio 2:
Crear un script llamado crear_respaldo.sh que:

  • Cree una carpeta respaldo (si no existe)
  • Copie dentro todos los .txt del directorio actual

Ejercicio 3:
Mover todos los scripts a ~/scripts/ y probar:

  • Ejecución con ./
  • Ejecución con ruta absoluta

Ejercicio 4 (opcional):
Buscar qué es la variable PATH y para qué sirve.

Soluciones ejercicios

✅ Ejercicio 1

Enunciado:
Crear un script llamado info.sh que muestre:

  • El usuario actual
  • El directorio donde se encuentra
  • La fecha actual

💡 Solución propuesta (info.sh)





#!/bin/bash
# Script: info.sh
# Muestra información básica del sistema y del usuario

echo "Usuario: $USER"
echo "Directorio actual: $(pwd)"
echo "Fecha actual: $(date +"%Y-%m-%d %H:%M:%S")"

Notas para clase:

  • $USER viene del entorno.
  • pwd muestra el directorio actual.
  • date formateado con +"%Y-%m-%d %H:%M:%S" muestra fecha y hora legibles.

✅ Ejercicio 2

Enunciado:
Crear un script llamado crear_respaldo.sh que:

  • Cree una carpeta respaldo (si no existe)
  • Copie dentro todos los .txt del directorio actual

💡 Solución propuesta básica (crear_respaldo.sh)





#!/bin/bash
# Script: crear_respaldo.sh
# Crea una carpeta respaldo y copia todos los .txt dentro

# Crear carpeta si no existe
if [ ! -d "respaldo" ]; then
    echo "Creando carpeta 'respaldo'..."
    mkdir respaldo
else
    echo "La carpeta 'respaldo' ya existe."
fi

# Copiar archivos .txt si existen
if ls *.txt >/dev/null 2>&1; then
    echo "Copiando archivos .txt a 'respaldo'..."
    cp *.txt respaldo/
    echo "Copia completada."
else
    echo "No se encontraron archivos .txt en el directorio actual."
fi

Ideas para comentar en clase:

  • [ ! -d "respaldo" ] → comprueba que NO exista el directorio.
  • ls *.txt >/dev/null 2>&1 → truco para comprobar si hay .txt sin mostrar errores.
  • cp *.txt respaldo/ → copia múltiple.

✅ Ejercicio 3

Enunciado:
Mover todos los scripts a ~/scripts/ y probar:

  • Ejecución con ./
  • Ejecución con ruta absoluta

Aquí no hay “script solución”, sino comandos que los alumnos deben usar.

💡 Pasos y comandos

  1. Crear la carpeta scripts en el home (si no existe):




mkdir -p ~/scripts
  1. Mover los scripts (por ejemplo, info.sh y crear_respaldo.sh) desde el directorio actual:




mv info.sh crear_respaldo.sh ~/scripts/
  1. Ir a la carpeta:




cd ~/scripts
  1. Comprobar permisos (por si acaso):




chmod +x info.sh crear_respaldo.sh
  1. Ejecutar con ruta relativa (estando dentro de ~/scripts):




./info.sh
./crear_respaldo.sh
  1. Ejecutar con ruta absoluta (desde cualquier sitio):




/ home /usuario/scripts/info.sh

Sustituyendo usuario por el usuario real, por ejemplo:





/home/alumno/scripts/info.sh

✅ Ejercicio 4

Enunciado:
Buscar qué es la variable PATH y para qué sirve.

Aquí puedes darles una explicación de solución tipo “teoría corregida”.

💡 Explicación-solución

La variable PATH:

  • Es una variable de entorno que contiene una lista de rutas separadas por :
  • Indica a la shell en qué directorios buscar ejecutables cuando escribimos un comando sin ruta.

Por ejemplo, si escribes:





ls

La shell busca un archivo ejecutable llamado ls en cada ruta del PATH, en orden.

Para ver el contenido del PATH:





echo $PATH

Ejemplo de salida:





/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Cada ruta separada por : es un directorio donde el sistema busca programas.

Si añades ~/scripts al PATH, podrías ejecutar info.sh simplemente escribiendo:





info.sh

sin ./ ni ruta completa.