Scripts básicos

La creación de scripts básicos representa el salto cualitativo entre el uso manual de la terminal y la auténtica automatización avanzada. Un script es un archivo de texto secuencial que agrupa una serie de comandos del sistema operativo para que se ejecuten de manera ordenada y desatendida.

Para un administrador de sistemas, dominar el diseño de scripts tanto en entornos Windows (Batch) como en Linux (Bash), junto con el manejo de variables, estructuras de control condicionales y bucles, es indispensable para eliminar tareas repetitivas y estandarizar procedimientos operativos.

Fundamentos de Scripting y Estructuras de Control

El desarrollo de scripts se apoya en constructos lógicos universales adaptados a la sintaxis nativa de cada intérprete de comandos:

    Introducción a los Scripts: Archivos de texto plano dotados de permisos de ejecución que permiten automatizar flujos de trabajo complejos, reduciendo drásticamente el tiempo de operación y el margen de error humano frente a la ejecución manual comando por comando.
    Scripts Batch en Windows (.bat / .cmd): El lenguaje de scripting tradicional de la línea de comandos de Windows (cmd.exe), empleado habitualmente para tareas sencillas de mantenimiento, copias locales y despliegues en infraestructuras Microsoft.
    Scripts Bash en Linux (.sh): El estándar de programación en shell para sistemas GNU/Linux. Todo script de Bash se inicia obligatoriamente con una línea de declaración de intérprete o shebang (#!/bin/bash) que indica al sistema operativo qué binario debe procesar el código.
    Variables: Elementos lógicos para almacenar dinámicamente valores temporales, rutas de directorios, contadores o cadenas de texto. En Bash se asignan sin espacios (ej. CARPETA="/tmp/backup") y se invocan anteponiendo el signo de dólar ($CARPETA).
    Estructuras de Control: Herramientas lógicas para dirigir el flujo de ejecución del script:
    • Condicionales (if / else): Permiten tomar decisiones lógicas evaluando si se cumple un criterio determinado (ej. comprobar si un archivo existe antes de borrarlo).
    • Bucles (for / while): Automatizan la repetición de bloques de código para iterar sobre listas de elementos, directorios o secuencias numéricas.
    Automatización de Tareas Repetitivas: Aplicación práctica del scripting para resolver tareas masivas (como renombrado de cientos de ficheros, limpieza de logs o respaldos sincronizados) de forma rápida y eficiente.

Analogía: Imagina la partitura musical y la pianola automática de un salón clásico. Los scripts Batch y Bash equivalen a la tira perforada de papel que contiene la secuencia exacta de notas musicales; las variables son los registros que indican la intensidad o velocidad que debe aplicarse en cada compás; las estructuras de control (condicionales y bucles) representan las órdenes lógicas de la máquina para repetir un estribillo tres veces o cambiar de melodía solo si se pulsa un determinado pedal; y la automatización de tareas repetitivas es la capacidad de interpretar toda la sinfonía a la perfección sin que el pianista tenga que mover un solo dedo de forma manual.

Actividad práctica

Objetivo:

Crear un script básico en Bash, declarar variables, implementar una estructura condicional y otorgar permisos de ejecución para automatizar una tarea sencilla.

Tareas:

  1. Crea un nuevo archivo de texto utilizando un editor en consola (ej. nano automatizar.sh) y añade la línea de cabecera shebang: #!/bin/bash.
  2. Declara una variable con tu nombre y añade una estructura condicional simple que verifique si existe un directorio de trabajo temporal (ej. if [ -d "/tmp/proyecto" ]; then echo "Existe"; else mkdir /tmp/proyecto; fi).
  3. Guarda el fichero, asígnale permisos de ejecución mediante el comando chmod +x automatizar.sh y ejecútalo en la terminal escribiendo ./automatizar.sh.
  4. Reflexiona sobre cómo las estructuras condicionales dentro de un script evitan que un comando falle de forma crítica al intentar operar sobre recursos inexistentes en el sistema.

Preguntas de reflexión:

    ¿Qué función cumple exactamente la línea inicial de declaración o shebang (#!/bin/bash) al comienzo de un script en Linux?
    ¿Qué diferencias operativas y de sintaxis principales existen entre los scripts Batch de Windows y los scripts Bash de GNU/Linux?
    ¿Por qué es una buena práctica de programación incluir comillas dobles alrededor de las variables al evaluarlas dentro de una sentencia condicional (ej. [ "$VALOR" = "1" ])?
    ¿Cómo se combinan los bucles (como for) con herramientas de filtrado para procesar de manera masiva una lista de archivos en un directorio?
    ¿Qué precauciones de seguridad se deben adoptar al escribir scripts que utilicen variables no validadas introducidas por usuarios externos?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué función cumple el shebang (#!/bin/bash)?

El shebang indica al núcleo del sistema operativo qué intérprete de comandos específico debe utilizarse para leer y ejecutar el código contenido en el archivo de texto. Sin esta línea, el sistema no sabría si debe procesar el script con Bash, Python, Perl u otro lenguaje compatible.


2. ¿Qué diferencias hay entre Batch y Bash?

Batch (.bat / .cmd) es el intérprete clásico y limitado de la línea de comandos de Windows, con una sintaxis rudimentaria y orientada a entornos Microsoft. Bash (Bourne Again SHell) es un lenguaje de scripting potente, rico y estandarizado en entornos Unix/Linux, con un soporte avanzado para expresiones regulares, estructuras de control complejas y una integración nativa con miles de utilidades del sistema.


3. ¿Por qué usar comillas dobles al evaluar variables en condicionales?

Para prevenir errores de sintaxis provocados por la expansión de variables vacías o cadenas que contienen espacios en blanco. Si una variable está vacía y no se protege con comillas, el intérprete eliminará el token de la sentencia condicional, alterando la lógica de la comparación y generando errores de ejecución en el script.


4. ¿Cómo se combinan bucles y filtros para procesar archivos?

Mediante la iteración controlada de elementos. Por ejemplo, un bucle for archivo in /ruta/*.log; do ... done recorre uno a uno todos los ficheros que coincidan con el patrón de extensión, permitiendo aplicar dentro del bloque de código operaciones automatizadas como análisis de texto, copias de seguridad o borrados selectivos.


5. ¿Qué precauciones tener con variables introducidas por usuarios?

Nunca se debe confiar en las entradas directas de los usuarios sin una validación previa (sanitización). Un usuario malintencionado podría introducir caracteres especiales de control (como punto y coma, tuberías o redirecciones) para lograr la inyección de comandos en el sistema operativo y ejecutar código arbitrario con los privilegios del script.