Script para validar parámetros de entrada

Vamos a echarle un vistazo hoy a un script básico que nos mostrará cómo se pueden validar los parámetros de entrada y cómo se debe verificar la existencia de un fichero de trabajo. Se trata de un procedimiento relativamente simple pero, como todo en esta vida, la primera vez que nos enfrentamos con ello realmente esta tarea no nos parecerá tan sencilla. Para eso es el ejemplo que vamos a ver a continuación, para tener clara la estructura y en un futuro poder replicarla siempre que lo necesitemos.

 


 

Script para validar parámetros de entrada


Bien, ya sabéis que no me gusta darle demasiadas vueltas a las cosas, así que vamos con el ejemplo. En primer lugar, os anexo el contenido completo de lo que sería el script en Shell Bash.


# --------------------------------------------------

#!/bin/bash -x

 

# Script de Creacion de directorio de informes

# Parametros script: 1 - cadena buscada, 2 - directorio salida, 3 - fichero entrada

 

# Verificamos que se haya introducido el parametro cadena

if [[ ! $1 ]]; then

  echo "Error: parametro inexistente: cadena"

  exit 1

fi

# Recogemos el valor del parametro cadena

cadena="$1"

 

# Verificamos que se haya introducido el parametro directorio

# Si existe, lo recogemos y si no existe, le asignamos valor por defecto

if [[ $2 ]]; then

  directorio="$2"

else

  directorio="informes"

fi

 

# Verificamos que se haya introducido el parametro fichero

# Recogemos su valor

if [[ ! $3 ]]; then

  fichero="alimentos.csv"

else

  fichero="$3"

fi

 

# Comprobamos que el fichero introducido exista realmente

if [[ ! -e $fichero ]]; then

  echo "Error: el fichero introducido no existe: $fichero"

  exit 1

fi

 

# Creamos el directorio

mkdir -p -- "$directorio"

 

# Buscamos la cadena introducida en el fichero de entrada

# Los resultados encontrados se almacenan en el directorio y el fichero de salida creados

if grep -- "$cadena" "$fichero" > "$directorio/${cadena}_informe.csv"

then

  echo "Informe creado $directorio/${cadena}_informe.csv"

else

  echo "Cadena $cadena no encontrada en alimentos.csv"

fi

 

# --------------------------------------------------


Detalle de la lógica interna del Script


A continuación, vamos a revisar con un poco de detalle cada uno de los pasos seguidos en la lógica implementada en el script anterior.


1º) En primer lugar, validamos si se ha lanzado el script con el parámetro "cadena" (esto es, con la cadena que debe ser buscada en el fichero). En caso afirmativo, se recoge su valor. En caso negativo, se devuelve un error a la línea de comandos.


# Verificamos que se haya introducido el parametro cadena

if [[ ! $1 ]]; then

  echo "Error: parametro inexistente: cadena"

  exit 1

fi

# Recogemos el valor del parametro cadena

cadena="$1"


2º) Verificamos si se ha introducido el parámetro "directorio" (parámetro que se corresponderá con la ubicación en la que se va a generar el fichero de salida del script). En caso afirmativo, recogemos su valor. En caso negativo, le asignamos un valor por defecto.


# Verificamos que se haya introducido el parametro directorio

# Si existe, lo recogemos y si no existe, le asignamos valor por defecto

if [[ $2 ]]; then

  directorio="$2"

else

  directorio="informes"

fi

 

3º) Verificamos si se ha introducido el parámetro "fichero" (parámetro en el que se indicará el nombre del fichero de entrada en el que se va a buscar el parámetro "cadena"). En caso afirmativo, se recoge su valor. En caso negativo, se le asigna un valor por defecto (fichero "alimentos.csv").

 

# Verificamos que se haya introducido el parametro fichero

# Recogemos su valor

if [[ ! $3 ]]; then

  fichero="alimentos.csv"

else

  fichero="$3"

fi

 

4º) Procedemos a verificar que el fichero de entrada indicado por el usuario existe realmente. En caso de no existir, devolvemos un error.

 

# Comprobamos que el fichero introducido exista realmente

if [[ ! -e $fichero ]]; then

  echo "Error: el fichero introducido no existe: $fichero"

  exit 1

fi

 

5º) A continuación, procedemos a crear el directorio con el nombre indicado por el usuario en el parámetro de entrada correspondiente.

 

# Creamos el directorio

mkdir -p -- "$directorio"

 

6º) En este paso procedemos a buscar en el fichero de entrada la cadena indicada por el usuario. Si se encuentra algo, los resultados obtenidos se almacenarán en el directorio de salida (cuyo nombre también fue introducido por el usuario). Si no se encuentra nada, se devolverá un mensaje informativo.

 

# Buscamos la cadena introducida en el fichero de entrada

# Los resultados encontrados se almacenan en el directorio y el fichero de salida creados

if grep -- "$cadena" "$fichero" > "$directorio/${cadena}_informe.csv"

then

  echo "Informe creado $directorio/${cadena}_informe.csv"

else

  echo "Cadena $cadena no encontrada en alimentos.csv"

fi

 

Funcionamiento de la lógica del Script


A continuación vamos a echar un vistazo al funcionamiento de las diferentes validaciones y operativas del script. Partimos de la base de que disponemos de un fichero "alimentos.csv" en el que tenemos almacenados varios nombres de alimentos.

 

👉 En primer lugar, vemos que si lanzamos el script sin indicar los parámetros requeridos, el proceso nos devuelve un mensaje de error.

 


 

👉 A continuación, lanzamos el script indicando la cadena a buscar. Si resulta que dicha cadena no existe en el fichero "alimentos.csv", entonces se devolverá un mensaje informativo indicando dicha situación.


 

👉 Finalmente, lanzamos el script indicando los 3 parámetros requeridos (cadena buscada, directorio de salida y fichero de entrada). El proceso buscará la cadena en el fichero de entrada y almacenará los resultados encontrados en el directorio de salida.

 


En este ejemplo, se ha creado el fichero "aceitunas_informe.csv" en el directorio de salida "/pruebas". El contenido de dicho fichero se corresponderá con la cantidad de registros en los que se ha encontrado la cadena buscada.


Y básicamente, este sería el funcionamiento de las principales líneas lógicas del script. Nos ha quedado por ahí alguna variante adicional, pero la verdad es que ya no merece la pena seguir realizando pruebas. Creo que las ejecuciones anteriores ya dejan claro su funcionamiento.


Pues nada, con lo que acabamos de explicar no deberíamos tener problemas en el futuro a la hora de crear scripts que reciban y validen parámetros de entrada. Ahora lo único que tenéis que hacer es reutilizar este funcionamiento en vuestros propios scripts. En cualquier caso, si os surge alguna limitación ya sabéis que podéis dejarme cualquier duda 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