##---------------------------------------------------------------------------- ## Script : message.lib ## Module Puppet : gnc-script_core_dtsi ## Auteur : Emmanuel Confrere ## Date : 29-06-2017 ## Version : 1.2.1 ## Objet : Gestion des message sur la console et dans les divers fichiers de trace ## ## Fonction : fct_message ## ## Detail : Cette fonction remplace l utilisation de "echo". ## Elle permet de gerer les messages a destination des fichiers de traces ## , des fichiers de compte rendu ou de la console. ## ## Sans parametre le message est ecrit sur la console et dans le fichier ## journal du script ${SH_FICLOG}. Le comportement est modifie selon les options ## utilisees. ## ## -cpt : Le message est aussi ecrit dans le fichier de compte-rendu ${SH_FICCPT} ## -hist : Le message est aussi ecrit dans le fichier d historique ${SH_FICTRC} ## Cette option ajoute des information d execution dans le fichier d historique ## notamant le compte qui execute le script sous la forme user/sudo_user ## -debug N : Le message est ecrit uniquement dans le fichier journal ${SH_FICLOG} ## si N est inferrieure ou egal au niveau de debug du Shell. Par defaut ## le niveau debug du shell est 0. ## -nolog : inhibe l ecritutre dans le fichier journal ## -color : Ecrit le message en couleur sur la console. ## Les couleurs disponible sont noir,, rouge, vert, jaune, bleu, rose, cyan, ## gris, orange et blanc ## ## Les variables SH_FIC* sont definies dans le fichiers ${NC_EXPL_CONF}/init.conf ## # ---------------------------------------------------------------------------- # Mise a jour : # 1.0.0 10-02-2016 - Emmanuel Confrere - Cre : Reprise du script du socle Oracle # 1.1.0 10-03-2017 - Emmanuel Confrere - Evo : Optimisation du traitement de l option -debug # 1.2.0 13-04-2017 - Emmanuel Confrere - Evo : Journalisation du compte d execution dans l historique # 1.2.1 29-06-2017 - Emmanuel Confrere - Ano : Fonctionnement inattendu sous Bash 3.2.25 # la fonction logname ne renvoi rien ? ##---------------------------------------------------------------------------- function fct_message { local L_TEXT="" # Texte a afficher local L_TIME_STAMP=`date "+%Y%m%d %X"` # Horrodatage a ajouter au texte local L_EXISTE_REP local L_NB_PARAM=0 # Nb de parametre de la ligne de commande local L_TMP local L_TMP2 local L_OPT # Nom des option local L_OPTION_DBG="non" # Message de debug local L_OPTION_SID="" # Affichage du SH_SESSION_IDP a l ecran local L_NIV_DEBUG=0 # Niveau de trace par defaut 0=aucune local L_OPTION_CPT="non" # Message de compte rendu local L_OPTION_HIST="non" # Message pour l historique local L_COULEUR="" # Couleur du texte avec l option -color local L_OPTION_COULEUR="non" local L_LIST_COULEUR="noir:0;30 rouge:0;31 vert:0;32 jaune:1;33 bleu:1;34 rose:0;35 cyan:0;36 gris:0;37 orange:0;33 blanc:1;37 " # - recuperation des parametres en entree L_TMP=1 L_NB_PARAM=$# while [ ${L_TMP} -le ${L_NB_PARAM} ] do L_OPT="$1" case "${L_OPT}" in "-cpt") L_OPTION_CPT="oui" ;; "-nolog") L_OPTION_NOLOG="oui" ;; "-hist") L_OPTION_HIST="oui" ;; "-color") L_OPTION_COULEUR="oui" L_ARG=`echo $2|tr A-Z a-z` L_TMP2=${L_ARG:0:1} if [ "${L_TMP2}" != "-" ] then # on recherche la correspondance numerique de la couleur L_COULEUR=`echo ${L_LIST_COULEUR}|sed "s/.*${L_ARG}:\([0-1];3[0-7]\) .*/\1/"` # Si on ne la trouve pas on annule la colorisation [ ${#L_COULEUR} -ne 4 ] && L_OPTION_COULEUR="non" L_TMP=$(( ${L_TMP} + 1 )) shift fi ;; "-debug") L_OPTION_DBG="oui" L_ARG="$2" L_TMP2=${L_ARG:0:1} if [ "${L_TMP2}" != "-" ] then L_ARG=`echo $2|sed 's/[0-9]//g'` if [ -n "${L_ARG}" ] then L_TEXT="$2" L_NIV_DEBUG=1 else L_NIV_DEBUG=$2 fi L_TMP=$(( ${L_TMP} + 1 )) shift else L_NIV_DEBUG=1 fi [ ${L_NIV_DEBUG} -gt ${SH_NIV_DEBUG} ] && return 0 ;; *) L_TEXT="${L_OPT}" ;; esac L_TMP=$(( ${L_TMP} + 1 )) shift done # - controle que la fonction est lance depuis un shell if [ -z "${SH_SESSION_ID}" ] then # -- La fonction est executer en mode inetractif (Pas dans un shell) # -- on autorise alors que l affichage sur la sortie standard SH_AFF_SID="non" SH_SILENCE="non" SH_NIV_DEBUG=0 L_EXISTE_REP=1 else # - Mode shell... # - On control l'existance des repertoires [ -d ${NC_EXPL_HST} -a -d ${NC_EXPL_LOG} -a -d ${NC_EXPL_CPT} ] && L_EXISTE_REP=0 || L_EXISTE_REP=1 fi # - initialisation des variables [ "${SH_AFF_SID}" = "oui" ] && L_OPTION_SID="[${SH_SESSION_IDP}] " L_OPTION_NOLOG=${L_OPTION_NOLOG:="non"} # - Ecriture des messages # - Ajout d une indentation si elle est definie [ -n "${SH_INDENT_MSG}" ] && L_TEXT="${SH_INDENT_MSG} ${L_TEXT}" if [ "${L_OPTION_DBG}" = "oui" ] then [ ${L_EXISTE_REP} -eq 0 ] && echo "${L_TIME_STAMP} [${SH_SESSION_IDP}] : ${L_TEXT}" >> ${SH_FICLOG} else [ ${L_EXISTE_REP} -eq 0 -a "${L_OPTION_CPT}" = "oui" -a "${L_OPTION_HIST}" = "non" ] && echo "${L_TIME_STAMP} : ${L_TEXT}" >> ${SH_FICCPT} [ ${L_EXISTE_REP} -eq 0 -a "${L_OPTION_CPT}" = "non" -a "${L_OPTION_HIST}" = "oui" ] && echo "${L_TIME_STAMP} : ${SH_LOGUSER} : ${SH_EXECUSER} : ${L_TEXT}" >> ${SH_FICTRC} if [ "${L_OPTION_NOLOG}" = "non" ] then [ ${L_EXISTE_REP} -eq 0 -a "${L_OPTION_CPT}" = "non" -a "${L_OPTION_HIST}" = "non" ] && echo "${L_TIME_STAMP} [${SH_SESSION_IDP}] : ${L_TEXT}" >> ${SH_FICLOG} [ ${L_EXISTE_REP} -eq 0 -a "${L_OPTION_CPT}" = "oui" -a "${L_OPTION_HIST}" = "oui" ] && echo "${L_TIME_STAMP} : ${L_TEXT}" >> ${SH_FICLOG} fi if [ "${SH_SILENCE}" = "non" -a "${L_OPTION_HIST}" = "non" ] then if [ "${L_OPTION_COULEUR}" = "oui" ] then echo -e "${L_OPTION_SID}\033[${L_COULEUR}m${L_TEXT}\033[0m" else echo -e "${L_OPTION_SID}${L_TEXT}" fi fi fi return 0 } typeset -Ffx fct_message