educación, informática y demás

25.03 - Automatizacion Scripts I

Repaso de scripts: problemas típicos

  • Obtener datos de entrada
  • Control de errores
  • If COMANDO != if [ COMANDO ];
  • Bucles
  • Comandos
  • Parámetros a funciones 🙂

Obtener datos de entrada

Es muy habitual que los scripts requieran obtener información de entrada en el momento de ejecutarlos. Porque de esta forma podemos ajustar la funcionalidad, es decir lo que hace el script realmente, a nuestras necesidades en ese momento.

Por ejemplo,. un script que cree varias cuentas de usuario simplemente pasándole por parámetro distintos nombres de usuario, creará unas cuentas u otras.

Las formas más habituales de pasar datos de entrada a un script son:

  • Parámetros.
  • Por teclado
  • Por ficheros

Datos discretos por parámetro

Dónde los parámetros posicionales tienen un sentido concreto y además se pasa un número de parámetros predeterminado previamente. «¿Cómo?» Pues que se pasan, por ejemplo, dos parámetro el primero es el nombre de un usuario y el segundo de un grupo.

En estos casos lo primero que hacemos es asignar cada parámetro a una variable.

En el parámetro uno nos pasan el nombre de un usuario y en segundo parámetro el nombre de un directorio.

En el primer parámetro nos pasan la ruta de un directorio y en el segundo parámetro nos pasan el nombre de un usuario.

Nos pasan una lista variable de valores por parámetro

Tenemos que usar un bucle for cuya variable tendrá como nombre el nombre de los datos que vamos a recorrer.

Si no recordamos como funciona for, usamos help

El script recibe una lista variable de nombres de usuario

Está bien poder comprobar que realmente estamos recorriendo los datos que nos pasan por parámetro, de ahí el comando echo en el cuerpo del bucle.

El script recibe por parámetro una lista de nombres de directorios.

Vamos a probarlo

Resulta que, queremos mostrar la ruta absoluta de cada uno de los directorios pasados por parámetro suponiendo que cada parámetro es el nombre de un directorio que se encuentra en /educatica/2025/cursos/sistemas.

Vamos a probarlo

Insertar datos por teclado: comando read

Ahora el script pedirá por teclado el nombre del directorio dentro de /educatica/2025/cursos/sistemas

Vamos a probarlo

Repetir la tupla pedir + acción con un bucle while

Habrá veces en las que no sepamos cuantos datos va a insertar el usuario. Necesitamos un mecanismo que repita el proceso mientras el usuario inserte datos por teclado.

Mientras el valor del dato no sea vacío, realizamos la acción y volvemos a pedir un dato.

Vamos a probar

¿Se pueden utilizar las dos opciones?

Si, es raro, pero se puede.

Cuando elegimos una técnica de obtener datos de entrada u otra

Cuando queramos proporcionar cierta reutilización de scripts o un uso no interactivo del mismo, lo ideal es utilizar la herramienta de parámetros para proporcionar información. Si queremos que el script sea interactivo, leeremos datos por teclado.

Control de errores

El control de errores sirve para filtrar las condiciones necesarias para que podamos ejecutar el script. Cuando estamos creando el script podemos comprobar las condiciones del sistema, estamos nosotros delante. Este momento en el tiempo se llama en programación tiempo de compilación o de edición.

Sin embargo, cuando un operador o usuario ejecute el script, no sabemos cómo estará el sistema, por ejemplo si existe un directorio o un fichero necesario, si se han pasado parámetros necesarios o no, etc. Este momento en el tiempo se conoce como tiempo de ejecución.

El control de errores nos permite comprobar si se cumplen las condiciones necesarias para que se ejecute el script. Si no se cumple alguna de estas condiciones necesarias, terminamos la ejecución del script mostrando un mensaje de error con información para que el usuario pueda cumplir con la condición y resolver el problema y retornando un código de salida de error, es decir un valor distintos de 0.

Algunas comprobaciones

Comprueba que se pasa el nombre de un usuario por parámetro.

Comprueba que se pasa el nombre de un usuario y que ese usuario exista en el sistema.

Algunas mejoras: elif

Si vamos a encadenar varias comprobaciones tenemos que usar if

Uso de función error

Creamos una función error que reciba el mensaje a mostrar y luego termine la ejecución del script con valor de retorno distinto de 0

Seguimos con ejemplos…

Además me piden que el script sea ejecutado por root.

Además, me piden que si no hay conexión con Internet tampoco podemos continuar con el script

Además, me piden que tiene que estar en ejecución el programa firefox :_(

Ahora lo ponemos como parte del script

Si no existe el directorio /etc/educatica/examenes, créalo.

Necesitamos que exista el grupo educatica para poder realizar la función del script, así que hemos decidido que si no existe el grupo, lo creamos.

Ahora insertamos la condición

Comando if : Condición = COMANDO

Cuando utilizamos un comando if tenemos que tener muy claro que la condición que se pone detrás del if es un comando. Si ese comando se ejecuta correctamente entonces se cumple la condición.

Al usar [ expresion ] estamos ejecutando un comando, el comando test al que se le pasa como parámetro la expresión que está entre corchetes.

Cosas que si, cosas que no

Mal

Solución

Bien, pero…

Solución:

Como está?

Eso está mal! no estamos ejecutando ningún comando. El problema es que encima estamos redireccionando por lo que puede que no veamos el fallo.

Comandos

Tenemos que saber administrar con comandos nuestro sistema operativo favorito 🙂 Vamos a ver cuales son las principales tareas de administración para tratar de recordar los comandos más interesantes.

  • Usuarios y grupos.
    • Crear, modificar y borrar cuentas de usuarios
    • Crear, modificar y borrar cuentas de grupo y miembros de grupos.
    • Establecer contraseña
    • Ficheros del sistema
  • Directorios y ficheros.
    • Crear, copiar, modificar, mover y eliminar ficheros
    • Crear, copiar, modificar, mover y eliminar directorios
    • Mostrar información de ficheros y directorios, tanto extendida como simple.
  • Sistemas de ficheros. dispositivos de almacenamiento, particiones y sistemas de ficheros.
    • du
  • Procesos.
    • ps
    • kill
  • Conexión de red.
    • ping
  • Propietario, grupo y permisos (seguridad).
    • chown
    • chmod
    • chgrp
  • Servicios. Lanzar, parar, reiniciar y comprobar el estado de servicios.
  • Monitorizar el sistema: recursos, aplicaciones, procesos, servicios, usuarios.
  • Automatizar. Scripts.
    • Hacer scripts 🙂
    • secuencia
    • condicionales
    • bucles
    • funciones
  • Programación de tareas. Automatización de procesos.

Algún ejemplo extra

¿Qué hace este código?

Vamos a corregir

Veamos como se ejecuta

Podrías modificarlo para añadir un enlace simbólico en el directorio personal del usuario con el nombre examenes que lleve al directorio del usuario dentro de /etc/educatica/examenes

Por último, ¿podrías modificar el script para que la funcionalidad del script esté en una función que se ejecute tras el control de errores?

Dejar una respuesta