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

Entradas populares de este blog

Componentes y Ventanas de Java Swing

Creación de Webservice SOAP básico

Fichero standalone del Servidor JBoss EAP