educación, informática y demás

25.03 - Automatizacion Scripts I

Repasando y comprendiendo Scripts

Primera línea del fichero

Un script se guarda, se implementa, se crea en un fichero de texto plano. No es un fichero ejecutable con un código máquina, sino que contiene una serie de comandos que serán ejecutados por un interprete de comandos.

El punto está en que en la primera línea del script indicamos a bash, el interprete de comandos con el que estamos trabajando en nuestro sistema GNU/Linux, que programa debe utilizar para ejecutar el script que se encuentra en este fichero.

Vamos a hacer una pequeña prueba O:)

Ya tenemos php en nuestro sistema 🙂

Vamos a probar con un script en php

La primera línea, por tanto, cuando comienza con #! seguida de una ruta, indica el interprete que se tiene que utilizar para ejecutar el script almacenado en este fichero. Da igual que sea php, python o bash shell script.

Script para cambiar el directorio personal de usuarios

Este script responde a la pregunta hecha en la entrada Let’s Rock, al final del todo. Vamos a crear un script que nos facilite cambiar el directorio personal de un usuario del sistema de localización.

En esa entrada comprobamos el comando usermod con la opción -m y -d.

Vamos a tratar de agilizar este proceso obteniendo por parámetro el nombre del usuario a cambiar.

Preparamos el script para que se pueda ejecutar y creamos el directorio /educatica/staff

Vamos a cambiar la ruta del directorio personal del usuario marinapg

Sentencias condicionales: Comando IF

Vamos a empezar a utilizar el comando para realizar control de errores. Podemos utilizar este comando en otro tipo de funciones dentro de nuestro script, pero ahora mismo lo vamos a utilizar para controlar errores.

Vamos a recordar la ayuda del comando if. El comando if no tiene página de manual, es un comando interno y tenemos que consultar su ayuda a través del comando help.

Veamos y analicemos la ayuda de if

Super importante!!! El comando if utiliza como condición para saber si ejecuta la rama del then o la rama del else, si esta existe, un comando (o conjunto de comandos):

  • Si el comando se ejecuta correctamente sin errores, se cumple la condición
  • Si el comando se ejecuta con error no se cumple la condición

¿Cómo sabe el comando if si el comando que se utiliza como condición se ha ejecutado correctamente?. Cuando un comando o aplicación se ejecuta, al terminar devuelve un valor entero de salida. En bash si el valor de retorno es 0 significa que todo ha ido bien, no hay error. Si es otro valor, significa que ha habido algún problema.

Vamos a enredar un poco.

El código de retorno sirve para saber si un comando o aplicación ha funcionado bien o no

El comando if funciona así:

CMD es un comando o una aplicación o una serie de comandos con tuberías… Si ese CMD se ejecuta correctamente, devuelve un 0, entonces se ejecutarán los comandos que estén en el then, es decir la linea 7 en nuestro caso.

Ejemplos de if

Vamos a probar

Vamos a refinarlo para que no se tire hasta el infinito o que nos cansemos, que pasará antes…

Ahora solo mando dos paquetes ICMP_ECHO 🙂

Vamos a meterle un else 😉

Quitamos el cable

Vamos a probar

Comprobar si un usuario existe.

Ahora lo metemos en el código

Ejecutamos

Refinamos… redireccionamos la salida estándar y la de error al fichero /dev/null, a.k.a. blackhole.

Vamos a probar

Refinamos para que lo obtenga por parámetro

Probamos

Solo muestra mensaje si no existe el usuario pasado por parámetro

Probamos

Comprueba si un grupo pasado por parámetro existe en el sistema.

Probamos 🙂

Comprueba si un usuario pertenece a un grupo dado. Para ello recibimos el nombre del grupo en el primer parámetro y el nombre del usuario en el segundo parámetro. Vamos a facilitar el script, buscando solo al usuario dentro de los miembros del grupo, no como grupo primario del usuario.

Como administrador, desde la shell, comprueba si marinapg pertenece al grupo educatica.

Como humano, lo tenemos. Vamos a refinar para que lo pueda utilizar una máquina O:)

Ahora vamos a utilizar este código en nuestro script. Si no es miembro el usuario del grupo que muestre un mensaje advirtiéndolo.

Probamos

A ver que te parece?

Vamos a probar

¡Otro script más!

Crea un scripts llamado visitEducatica.sh.

Si tenemos conexión con internet abrimos el navegador firefox en segudo plano y consultamos la página www.educatica.es. Es decir, abrir firefox con la página web https://www.educatica.es

Sino, mostramos un mensaje de error advirtiendo que no hay conexión con Internet, además almacenaremos este mensaje de error en un fichero de log llamado errores.log. Si el fichero de log existe, no lo sobrescribimos, añadimos el mensaje al final.Condic

En cuanto guardamos se crea el fichero

Vamos a darle permiso de ejecución

Vamnos a ver cómo podemos lanzar firefox desde la terminal

El proceso de bash se queda a la espera de que termine firefox. Nosotros queremos que se lance en segundo plano

Si sabemos hacerlo en terminal, sabemos hacerlo en el script.

Todo lo que podamos ejecutar desde terminal, se puede ejecutar desde un script.

Análisis de código para localizar errores

Algunos errores típicos

Los espacio!! Esto no es un lenguaje de programación de alto nivel al uso, es un lenguaje de scripting que utiliza un interprete de comandos que espera comandos

Algunos errores más

Notas.sh

Crea un script que reciba por parámetro una calificación, una nota. Si la nota es inferior a cinco mostrará un mensaje indicando que has suspendido :_(. En caso contrario, mostrará un mensaje indicando que has aprobado!

Consulta al entrada sobre el comando test

Consultamos la ayuda

Por tanto usaríamos la opción -lt

Además de escribir el comando test y pasarle como parámetro la expresión que queramos comprobar tenemos la opción de escribir la expresión a comprobar entre dos corchetes. Esto hace que el comando dónde utilicemos el test se parezca un poco más a una sentencia de un lenguaje de programación.

OJO!!! recuerda, al poner entre corchetes una expresión estamos ejecutando el comando test y le pasamos lo que hayamos escrito entre corchetes como parámetro.

Oye… ya que conocemos el comando test, vamos a empezar a realizar control de errores.

Comprueba que se pase un valor por parámetro al script notas.sh. Si no se pasa ningún valor por parámetro, muestra un mensaje de error y termina la ejecución del script devolviendo un valor de retorno de error.

  • Para terminar la ejecución del script podemos utilizar el comando exit. Para que el código de retorno del script sea de error debemos devolver un valor distinto de cero al utilizar exit.

Si está vacía la variable $nota, significa que $1 está vacío. Si está vacío $1 significa que no me han pasado parámetro, pero….

Claro… leamos la página de manual de nuevo

Vamos a corregirlo

Lo probamos

Pero…..

Quedaría así

Funciona..

Pero….

Resuelve esto para mañana…

Más formas de hacerlo

Hay que poner entre comillas la variable porque si está vacío dará un error en tiempo de ejecución. –> [ = «» ]

Comprobaciones

Función error

Probamos

Dejar una respuesta