Script con ejemplos de uso de Funciones
Esta semana vamos a centrarnos en revisar un Script Shell Bash en el que se muestran los beneficios del empleo de Funciones internas. Para que lo entendamos, las Funciones de un Script serían algo similar a los métodos de una clase Java. Básicamente, nos sirven para encapsular código que luego puede ser invocado y reutilizado desde múltiples partes del proceso. En líneas generales, nos permitirán ahorrar código y nos ayudarán a simplificar la lógica de nuestro script.
Script con ejemplos de uso de Funciones
Como punto de partida, os voy a mostrar la lógica de un ejemplo de Script en el que se está haciendo uso de varias funciones internas. En concreto, en este proceso encontraremos dos funciones:
- solicitar_usuario()
- validar_usuario()
El código completo sería el siguiente:
# --------------------------------------------------
#!/bin/bash
# Funcion que solicita introducir usuario y contraseña
# --------------------------------------------------
solicitar_usuario() {
# Recogemos el parametro $1 enviado a la funcion
# Si no se recibe nada, asignamos valor por defecto
message=${1:-"Introduzca los datos de la cuenta"}
echo "$message"
# Solicitamos y recogemos el usuario introducido
read -p "Introduzca usuario: " usuario
# Solicitamos y recogemos password
# -s --> El contenido introducido por el usuario no se muestra por pantalla
read -sp "Introduzca contraseña: " password
echo ""
# Solicitamos al usuario que verifique la password
read -sp "Repita contraseña: " password_validar
echo ""
}
# Funcion que valida la existencia de una cuenta de usuario
# Retorno 0 --> usuario ya existente
# Retorno 1 --> usuario valido
# --------------------------------------------------
validar_usuario() {
validacion=1
# Verificamos si ya existe la cuenta recibida por la funcion
# Para ello, validamos si existe la cuenta en el fichero "cuentas" del directorio "accesos"
cuenta=$(grep ${1} accesos/cuentas)
# Si encuentra la cuenta, devuelve un retorno cero
if [ "$cuenta" == ${1} ] ; then
validacion=0
fi
echo "validacion: $validacion"
return $validacion
}
# --------------------------------------------------
# Validamos que se hayan introducido los parametros requeridos
# Si no se han introducido parametros, se los solicitamos la usuario
if [ $# -eq 0 ] ; then
solicitar_usuario
# Validamos que la password ha sido correctamente introducida
while [ "$password" != "$password_validar" ] ; do
solicitar_usuario "Las passwords no coinciden, reintroduzca los datos"
done
else
# Si se han introducido parametros, los recogemos
# Si no hay password, introducimos un valor por defecto
usuario="$1"
password="${2:-Password1}"
fi
# Validamos si el usuario introducido ya existe en el registro de cuentas
while validar_usuario "$usuario" ; do
solicitar_usuario "El usuario elegido ya existe, por favor seleccione otro usuario"
done
# Imprimimos usuario y password
echo -e "\n$usuario $password"
# --------------------------------------------------
Detalle del Script y sus Funciones internas
Teniendo en cuenta el script completo anterior, vamos a ir echando un vistazo en detalle a cada uno de los componentes del mismo.
1º) Primera Función. En primer lugar, vemos que se está implementando la definición de una de las funciones del script, en concreto la función denominada solicitar_usuario(). En esta función lo único que se hace es solicitar la introducción por consola de dos parámetros: usuario y contraseña.
# Funcion que solicita introducir usuario y contraseña
# --------------------------------------------------
solicitar_usuario() {
# Recogemos el parametro $1 enviado a la funcion
# Si no se recibe nada, asignamos valor por defecto
message=${1:-"Introduzca los datos de la cuenta"}
echo "$message"
# Solicitamos y recogemos el usuario introducido
read -p "Introduzca usuario: " usuario
# Solicitamos y recogemos password
# -s --> El contenido introducido por el usuario no se muestra por pantalla
read -sp "Introduzca contraseña: " password
echo ""
# Solicitamos al usuario que verifique la password
read -sp "Repita contraseña: " password_validar
echo ""
}
2º) Segunda Función: En segundo lugar, en el script se procede a implementar la función validar_usuario(). Lo que se hace en esta función es verificar si el usuario recibido ya se encuentra dado de alta en un fichero denominado "cuentas" (se supone que en dicho fichero se van dando de alta los usuarios que tengan acceso a una determinada plataforma).
Si la función detecta que el usuario ya existe, devolverá un código cero (0). Si, por contra, determina que el usuario proporcionado es nuevo, entonces devolverá un código uno (1).
# Funcion que valida la existencia de una cuenta de usuario
# Retorno 0 --> usuario ya existente
# Retorno 1 --> usuario valido
# --------------------------------------------------
validar_usuario() {
validacion=1
# Verificamos si ya existe la cuenta recibida por la funcion
# Para ello, validamos si existe la cuenta en el fichero "cuentas" del directorio "accesos"
cuenta=$(grep ${1} accesos/cuentas)
# Si encuentra la cuenta, devuelve un retorno cero
if [ "$cuenta" == ${1} ] ; then
validacion=0
fi
echo "validacion: $validacion"
return $validacion
}
3º) Rama principal del Script: A continuación, comienza la rama principal del código. En primer lugar, se verifica si el script está recibiendo parámetros:
# --------------------------------------------------
# Validamos que se hayan introducido los parametros requeridos
# Si no se han introducido parametros, se los solicitamos la usuario
if [ $# -eq 0 ] ; then
4º) Solicitamos al usuario que introduzca datos desde la línea de comandos. Esto se hace simplemente invocando a la función solicitar_usuario().
solicitar_usuario
5º)
Verificamos si la password introducida por el usuario es válida (esto es,
si ha introducido las dos veces la misma contraseña). En caso de que
sean distintas, no ha superado la doble confirmación y volveremos a solicitarle al usuario la introducción de los datos. Esto se hará volviendo a lanzar la función solicitar_usuario().
# Validamos que la password ha sido correctamente introducida
while [ "$password" != "$password_validar" ] ; do
solicitar_usuario "Las passwords no coinciden, reintroduzca los datos"
done
Como vemos, la validación de la contraseña se haya dentro de un bucle "while". De esta forma, el proceso de solicitud de datos se repetirá todas las veces que sea necesario hasta que la password introducida por consola supere el proceso de doble confirmación.
6º)
Si el usuario ha proporcionado los parámetros a la hora de lanzar el
script, procedemos a recogerlos en dos variables. Como se aprecia, si no
ha enviado password, nuestro script establece un valor por defecto para
la contraseña del usuario ("Password1").
# Si se han introducido parametros, los recogemos
# Si no hay password, introducimos un valor por defecto
usuario="$1"
password="${2:-Password1}"
7º) Validamos si el usuario introducido por consola ya existe en el registro de cuentas de la plataforma. Para ello, se invoca a la función validar_usuario() con el nombre del usuario introducido. En el caso de que dicha función nos indique que el nombre del usuario está repetido, procederemos a solicitar por consola nuevos datos para la cuenta. Esto último se hará invocando a la función solicitar_usuario().
# Validamos si el usuario introducido ya existe en el registro de cuentas
while validar_usuario "$usuario" ; do
solicitar_usuario "El usuario elegido ya existe, por favor seleccione otro usuario"
done
Como vemos, la validación de usuario duplicado se haya dentro de un bucle "while". De esta forma, el proceso de solicitud de datos se repetirá todas las veces que sea necesario hasta que por consola se introduzca un nombre de usuario que todavía no exista en el registro de cuentas de la plataforma.
Ejecutando el script completo
A continuación, podemos ver cuál sería el resultado si procedemos a ejecutar el script anterior desde nuestra línea de comandos.
Partimos de la base de que el contenido del fichero "cuentas" (el fichero en el que se encuentran los usuarios datos de alta para la plataforma) es el siguiente:
# Cuentas existentes en la entidad
ibis
agaporni
alcaudon
Dicho esto, en el código hemos podido apreciar que el script se puede ejecutar de dos formas:
- Lanzando el script con los parámetros de entrada: usuario y contraseña.
- Lanzando el script sin indicar ningún parámetro de entrada.
👉 Si lanzamos el script sin ningún parámetro de entrada, se nos pedirá por consola que introduzcamos dicha información. Si la contraseña introducida no supera la doble confirmación, se nos volverá a pedir la introducción de los datos de la cuenta.
👉 Si lanzamos el script indicando un usuario y contraseña, el proceso recogerá los valores introducidos y los imprimirá por pantalla.
En el caso de que no se indique ninguna contraseña, el script le asignará la contraseña por defecto especificada en el código ("Password1").
Adicionalmente, hay que tener en cuenta que si introducimos un usuario ya existente en el registro de cuentas de la plataforma, entonces el script nos volverá a solicitar los datos del nuevo usuario. Nos mostrará algo así.
Pues nada, yo creo que con el detalle anterior ya tendríais bastante para soltar amarras y ser capaces de implementar vuestras propias funciones en los scripts de vuestro proyecto. Con el tiempo os iréis dando cuenta de lo útiles que son y de cómo nos ayudan a simplificar la lógica de los procesos. Dicho esto, os dejo hasta el siguiente post. Por cierto, cualquier duda que tengáis ya sabéis que podéis dejármela aquí debajo.
Saludos.
Comentarios
Publicar un comentario