Funciones útiles

Hola compañeros de la shell,

En esta entrada vamos a dejar escritas algunas funciones genéricas que pueden ayudarnos a acelerar la escritura de diversos scripts. Se recomienda usar todas en conjunto por si hubiera alguna referencia a variables definidas en estas funciones.

#!/bin/bash 
 
################################################################################### 
# Script: nameScript.ksh 
# Version: 1.00 
# 
# Descripcion: Lorem ipsum
# 
# (Descripcion de los codigos de salida del script) 
# Salida: 0 = Con exito 
#         !=0 Finalizacion incorrecta (error de parametros o anulado por usuario) 
# 
# Control de versiones: 
#   v.1.00 (Fecha):  Creacion del script 
# 
#################################################################################### 
 

# 
### -------------------- Gestion de senyales -------------------------- #### 
# 
 
trap 'f_signal 1; exit' 1 
trap 'f_signal 2; exit' 2 
trap 'f_signal 3; exit' 3 
trap 'f_signal 9; exit' 9 # 9 no es atrapable 
trap 'f_signal 10; exit' 10 
trap 'f_signal 11; exit' 11 
trap 'f_signal 14; exit' 14 
trap 'f_signal 15; exit' 15 
trap 'f_signal 19; exit' 19 
trap 'f_signal 23; exit' 23 
trap 'f_signal 30; exit' 30 
trap 'f_signal 31; exit' 31 
 
# 
### -------------------- Variables -------------------------- #### 
# 
 
# Globales 
 
PARAMETROS=$@ 
MIN_PARAM=2 
MAX_PARAM=2 
CERO=0 
YES="Y" 
NO="N" 
 
# Directorios 
 
INIDIR=`basename $0 | sed '1,$s#\..*##g'` 
CFGDIR=${INIDIR}/cfg 
LOGDIR=${INIDIR}/logs 
TMPDIR=${INIDIR}/tmp 
SQLDIR=${INIDIR}/sql 
 
# Ficheros 
 
LOGFILE=${LOGDIR}/`basename $0 | sed '1,$s#\..*##g'`_$$_`date +'%Y%m%d_%H%M%S'`.log 
CFGFILE=${CFGDIR}/`basename $0 | awk -F"." '{print $1}'`.cfg 

 
# Global 
 
# Errores criticos contemplados 
 
ERR_PARAM=1 # Parametros pasados al script erroneos 
 
# 
### -------------------- Funciones -------------------------- #### 
# 
 
f_fecha_hora() 
{ 
 # Escribe la fecha y la hora en un mismo formato para todo el script 
 # Llamar a esta funcion cada vez que se quiera escribir la hora 
 # Hacer llamadas frecuentes para controlar los tiempos de cada fase del proceso 
 
 FECHA=`date +'%d-%m-%Y'` 
 HORA=`date +'%H:%M:%S'` 
 echo "[${FECHA} ${HORA}]" 

# Ejemplo de uso:
# echo "`f_fecha_hora` - [`basename $0`] : Que me estas contando" | tee -a ${LOGFILE}
 
} 
 
f_signal () 
{ 
 
# Funcion que gestiona las senyales atrapadas mediante trap 
 
 SALIDA=300 
 SIGNAL=$1 
 echo | tee -a ${LOGFILE} 
 echo | tee -a ${LOGFILE} 
 echo " f_fecha_hora **** INTERRUPCION -> RECIBIDA SIGNAL ${SIGNAL} !!!" | tee -a ${LOGFILE} 
 echo | tee -a ${LOGFILE} 
 echo " DETENIDO POR EL USUARIO !!!" | tee -a ${LOGFILE} 
 echo " DETENIDO POR EL USUARIO !!!" | tee -a ${LOGFILE} 
 echo " DETENIDO POR EL USUARIO !!!" | tee -a ${LOGFILE} 
 echo | tee -a ${LOGFILE} 
 echo " f_fecha_hora **** INTERRUPCION -> RECIBIDA SIGNAL ${SIGNAL} !!!" | tee -a ${LOGFILE} 
 echo | tee -a ${LOGFILE} 
 echo "`f_fecha_hora` - Ejecucion interrumpida" | tee -a ${LOGFILE} 
 mv $LOGFILE echo $LOGFILE | sed 's#\.log#.KO.log#g' 
 
} 
 
f_checkExec ()  
{ 
 
# Si el primer parametro que recibe es distinto de 0 sale con ese codigo 
 
 C_EXIT=${1} 
 C_MESSAGE=${2} 
 
 if [ "X${C_EXIT}" != "X0" ] 
 then 
   echo -e "\n\t${C_MESSAGE} : ERROR ${C_EXIT}" | tee -a ${LOGFILE} 
   mv $LOGFILE `echo $LOGFILE | sed 's#\.log#.KO.log#g'` 
   exit ${C_EXIT} 
 fi 
 
} 
 
f_help () 
{ 
 
# Funcion de ayuda 
 
 echo 
 echo " + Script: `basename $0`" 
 echo 
 echo " + Descripcion: Lorem ipsum" 
 echo "" 
 echo " + Pre-requisitos:" 
 echo "" 
 echo "   1. Lorem ipsum" 
 echo 
 echo " + Ejecucion:" 
 echo 
 echo " basename $0 -a:Lorem ipsum -b:Lorem ipsum" 
 echo 
 echo " + Ejemplo de ejecucion:" 
 echo 
 echo " basename $0 -a:Lorem ipsum -b:Lorem ipsum" 
 
} 
 
f_getParams () 
{ 
 
 # Funcion encargada del trato de parametros. 
 
 if [ $# -lt $MIN_PARAM ] || [ $# -gt $MAX_PARAM ] 
 then 
   f_help 
   f_checkExec $ERR_PARAM "- ERROR $ERR_PARAM: Parametros incorrectos" 
 fi 
 
 for i in "$@" 
 do 
   ARG=$i 
   PARAM=`echo $ARG | cut -d":" -f1` 
   VALOR=`echo $ARG | cut -d":" -f2` 
 
   case $PARAM in 
   -a) 
        LO_QUE_SEA=0 
   ;; 
   -b) 
        LO_QUE_SEA2=0 
   ;; 
    *) 
        f_help 
        f_checkExec $ERR_PARAM "- ERROR $ERR_PARAM: Parametros incorrectos" 
   esac 
 
 done 
 
 # Comprobamos parametros 
 
 if ! echo ${LO_QUE_SEA2} | egrep "^[+-]?[0-9]*$" 2>/dev/null 1>&2 
 then 
   f_help 
   f_checkExec $ERR_N_NO_NUM "- ERROR $ERR_N_NO_NUM: El parametro -n: debe ser numero entero." 
 fi 
 
} 
 
f_createFilesDirs () 
{ 
# Funcion que crea los ficheros y directorios necesarios para la ejecucion del script 
 
  mkdir -p $INIDIR 
  mkdir -p $CFGDIR 
  mkdir -p $LOGDIR 
  mkdir -p $TMPDIR 
  mkdir -p $SQLDIR 
 
  touch $LOGFILE 
 
  # Si no existe creamos el fichero de configuracion por defecto 
 
  if ! [ -r ${CFGFILE} ] 
  then 
    echo "# Fichero de configuracion `basename $0`" > ${CFGFILE} 
    echo "# Fecha de modificacion en dias a partir de la cual se eliminan logs" >> ${CFGFILE} 
    echo "MANTLOGTIME:365" >> ${CFGFILE} 
  fi 
   
} 
 
f_logHead () 
{ 
 
# Funcion que imprime la cabecera del log 
 
 HOSTNAME=`hostname` 
 
 echo "\n------------------------------------------------------------------------------------------------------------ " > ${LOGFILE} 
 echo "\n`basename $0`  \n" >> ${LOGFILE} 
 echo "\tHost: ${HOSTNAME}" >> ${LOGFILE} 
 echo "\tFecha: date " >> ${LOGFILE} 
 echo "\tEjecucion: basename $0 ${PARAMETROS}" >> ${LOGFILE} 
 echo "\n------------------------------------------------------------------------------------------------------------ \n" >> ${LOGFILE} 
 echo >> ${LOGFILE} 
 
} 
 
f_maintenance () 
{ 
 
# Funcion para el mantenimiento de logs etc 
 
 LOGFILESTR="*.log" 
 MANTLOGTIME=`cat $CFGFILE | grep -v "#" | grep MANTLOGTIME | awk -F":" '{print $2}'` 
 
 cd $LOGDIR 
 
 find $PRUNE -mtime +${MANTLOGTIME} -name "$LOGFILESTR" -exec rm -f {} \; 
 
 cd $OLDPWD 
 
} 
 
f_exit () 
{ 
 
# Funcion fin script 
 
 if [ $SALIDA -eq $CERO ] 
 then 
   mv $LOGFILE `echo $LOGFILE | sed 's#\.log#.OK.log#g'` 
 else 
   mv $LOGFILE `echo $LOGFILE | sed 's#\.log#.KO.log#g'` 
 fi 
 
 exit $SALIDA 
 
}

# 
### -------------------- Main - Principal ------------------------- #### 
# 

f_getParams "$@"
Esta entrada fue publicada en Sin categoría. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *