educación, informática y demás

2405 - Scripts GNU/Linux

Ejemplos de repaso de scripts

Lectura de datos

showParams.sh

Crea un scripts que reciba una lista variable de parámetros. El script tan solo tendrá que mostrar cada uno de los parámetros que se pasan, precedido por el número de parámetro. Al final mostrará cuantos parámetros se han pasado.

Solución propuesta

Lanzamos el editor de texto en segundo plano para poder aprovechar la terminal.

Vamos desarrollando

El código propuesto sería el siguiente

Vamos a ejecutarlo

Este script tiene solo fines académicos o didácticos, para repasar cómo podemos recorrer una lista de parámetros variable o cuya longitud no conocemos a priori, hasta que se ejecute el script.

No obstante, con este script estamos practicando obtener información de parámetro para poder realizar cualquier acción con dicha información. Por ejemplo…

Recorre usuarios

Supongamos que ahora me piden que compruebe si existe o no cada uno de los usuarios que me pasan por parámetro. Podemos recibir una cantidad indefinida de parámetros (una lista variable de parámetros). checkUsers.sh

¿Cómo lo hacemos? Podemos utilizar una función para llevar a cabo la funcionalidad que queremos realizar con cada uno de los parámetros. Esta función la llamamos desde el cuerpo del bucle.

Solución propuesta

Si nos fijamos tenemos un script bastante sencillo, hemos dividido la funcionalidad entre el cuerpo del script, que es un bucle que recorre los parámetros que se pasan en el momento de ejcutarlo, y una función que se llama para que haga lo que tenga que hacer con el parámetro.

Si quiéramos hacer algo más complejo con el parámetro tan solo tenemos que centrarnos en la función checkUsuario y si la complejidad es muy grande o queremos reutilizar podemos crear más funciones.

ATENCIÓN: En este caso hemos usado una variable local para almacenar el nombre del usuario. Esta variable, usuario, estará solo disponible dentro del cuerpo de la función checkUsuario. Si queremos usarla fuera tenemos que pasarla por parámetro a la función destino o bien hacerla global (esto no se recomienda en programación estructurada).

Vamos a complicarlo un poco…

checkUsers.sh (2)

…. (continuamos con el enunciado inicial) si el usuario existe en el sistema, crea un directorio llamado web dentro de su directorio personal. Configura el directorio para que el único usuario que pueda realizar operaciones de escritura y lectura en el sistema sobre ese directorio sea el usuario en concreto.

Aproximación inicial: divide y venceras

Ahora solo tenemos que meter la funcionalidad que se encargue de crear y preparar el directorio.

Ahora quedaría así el script completo

checkUsers.sh (3)

…. si el usuario no existe, vamos a dar la posibilidad de que se pueda crear en el sistema. Para ello, preguntamos al operador informático si desea crear la cuenta de usuario. Si la respuesta es negativa, no hacemos nada y continuamos con el siguiente usuario. Si la respuesta es afirmativa, crearemos una nueva cuenta de usuario en el sistema con el nombre del usuario pasdo por parámetro y con la contraseña ClaveRoot#20. Además, crearemos el directorio web cómo hacemos con las cuentas de usuario que si existen en el sistema.

Podríamos utilizar una función si queremos hacer el código más sencillo.

¿Cómo sería sin funciones?

checkUsers.sh (4)

Nos hemos cansado de escribir por parámetro, ahora vamos a leer los datos de un fichero en el que en cada línea hay el nombre de un usuario. Me tienen pasar por parámetro la ruta del fichero con el que vamos a trabajar.

Ahora el único cambio…

Probemos…

Vamos a ver si funciona

Ahora vamos a crear el nuevo usuario

Conclusión

Hemos visto distintas técnicas para obtener información del usuario (operador) para ajustar la funcionalidad del script. También hemos repasado cómo podemos simplificar un script complejo utilizando funciones. Por último, hemos visto como podemos afrontar la creación de un script complejo, comenzando por versiones más simples que vayan realizando tareas. Al final, tanto con el uso de funciones como con la técnica de refinamientos sucesivos, lo que estamos haciendo es limitar la complejidad con la que trabajamos.

Dejar una respuesta