L'ensemble des scripts et bibliothèques bash utilisés pour maintenir l'infrastructure du Tetalab. Ce socle Bash est une version légère et adaptée du socle Bash essentiellement développé par Emmanuel Confrère, éminent DBA Calédonien.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

169 lines
7.0 KiB

##----------------------------------------------------------------------------
## Script : affiche_ligne.lib
## Module Puppet : gnc-script_core_dtsi
## Auteur : Emmanuel Confrere
## Date : 13-04-2017
## Version : 1.1.0
## Objet : Permet d'afficher sur la sortie standard un texte sous forme de tableau
##
## Fonction : fct_affiche_ligne
##
## Detail : Definition de l'entete du tableau :
## fct_affiche_ligne entete "{Titre}" "{Colonne_1},{Taille_1}" "{Colonne_2},{Taille_2}" "{Colonne_3},{Taille_3}" "{Colonne_4},{Taille_4}" ...
## fct_affiche_ligne entete "{Titre}" "Groupe1({Colonne_1},{Taille_1}:{Colonne_2},{Taille_2})" "{Colonne_3},{Taille_3}" "Groupe2({Colonne_4},{Taille_4}:...)" ...
##
## Affichage des lignes du tableau :
## fct_affiche_ligne "${Variable_1}" "${Variable_2}" "${Variable_3}" "${Variable_4}" ...
##
## Affichage du pied
## fct_affiche_ligne pied
##
## Affichage d une ligne de separation
## fct_affiche_ligne sep
##
## Les trois forme de declaration doivent apparaitre dans l ordre :
## fct_affiche_ligne entete -> Initialise le tableau
## fct_affiche_ligne -> Affiche une ligne
## fct_affiche_ligne pied -> Libere la configuration du tableau
##
# ----------------------------------------------------------------------------
# Mise a jour :
# 1.0.0 10-02-2016 - Emmanuel Confrere - Cre : Reprise du script du socle Oracle
# 1.1.0 13-04-2017 - Emmanuel Confrere - Evo : Ajout de l option "sep"
##----------------------------------------------------------------------------
function fct_affiche_ligne
{
local L_NB_PARAM=$#
local L_PARAM=""
local L_IDX_PARAM=1
local L_IDX_COL=1
local L_MESSAGE=""
local L_ENTETE="non"
local L_PIED="non"
local L_SEP="non"
local L_GROUPE="non"
local L_GRP_NOM=""
local L_TAILLE_GRP=0
local L_COL_LISTE=""
local L_COL=""
local L_GRP_MESS_L1=""
local L_GRP_MESS_L2=""
local L_GRP_MESS_L3=""
local L_OLD_IFS=""
# - recuperation des parametres en entree
[ -n "${IFS}" ] && L_OLD_IFS=${IFS}
IFS="@"
while [ ${L_IDX_PARAM} -le ${L_NB_PARAM} ]
do
L_PARAM[${L_IDX_PARAM}]=`echo $1|cut -d, -f1`
[ "${L_PARAM[1]}" = "entete" ] && L_ENTETE="oui"
[ "${L_PARAM[1]}" = "pied" ] && L_PIED="oui"
[ "${L_PARAM[1]}" = "sep" ] && L_SEP="oui"
if [ "${L_ENTETE}" = "oui" -a ${L_IDX_PARAM} -gt 2 ]
then
if [ `echo $1|grep -c "("` -eq 1 ]
then
L_GROUPE="oui"
L_TAILLE_GRP=0
L_GRP_NOM=`echo $1|cut -d "(" -f1`
L_COL_LISTE=`echo $1|sed 's/:/@/g;s/^.*(//;s/)//'`
for L_COL in ${L_COL_LISTE}
do
L_PARAM[${L_IDX_PARAM}]=`echo ${L_COL}|cut -d, -f1`
SH_TAILLE_COL[${L_IDX_COL}]=`echo ${L_COL}|cut -d, -f2`
[ -z "${SH_TAILLE_COL[${L_IDX_COL}]}" ] && SH_TAILLE_COL[${L_IDX_COL}]=${#L_PARAM[${L_IDX_PARAM}]}
[ ${SH_TAILLE_COL[${L_IDX_COL}]} -eq 0 ] && SH_TAILLE_COL[${L_IDX_COL}]=${#L_PARAM[${L_IDX_PARAM}]}
SH_TAILLE_COL[${L_IDX_COL}]=$(( ${SH_TAILLE_COL[${L_IDX_COL}]} + 2 ))
SH_TAILLE_TABLEAU=$(( ${SH_TAILLE_TABLEAU} + ${SH_TAILLE_COL[${L_IDX_COL}]} ))
L_TAILLE_GRP=$(( ${L_TAILLE_GRP} + ${SH_TAILLE_COL[${L_IDX_COL}]} + 1 ))
[ ${L_IDX_PARAM} -eq ${L_NB_PARAM} ] && L_GRP_MESS_L3="${L_GRP_MESS_L3}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} c`"
[ ${L_IDX_PARAM} -ne ${L_NB_PARAM} ] && L_GRP_MESS_L3="${L_GRP_MESS_L3}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} c`|"
((L_IDX_COL++))
((L_IDX_PARAM++))
((L_NB_PARAM++))
done
((L_TAILLE_GRP--))
((L_IDX_PARAM--))
((L_NB_PARAM--))
L_GRP_MESS_L1="${L_GRP_MESS_L1}`fct_format "${L_GRP_NOM}" ${L_TAILLE_GRP} c`|"
L_GRP_MESS_L2="${L_GRP_MESS_L2}`fct_format "-" ${L_TAILLE_GRP} r`|"
else
SH_TAILLE_COL[${L_IDX_COL}]=`echo $1|cut -d, -f2`
[ -z "${SH_TAILLE_COL[${L_IDX_COL}]}" ] && SH_TAILLE_COL[${L_IDX_COL}]=${#L_PARAM[${L_IDX_PARAM}]}
[ ${SH_TAILLE_COL[${L_IDX_COL}]} -eq 0 ] && SH_TAILLE_COL[${L_IDX_COL}]=${#L_PARAM[${L_IDX_PARAM}]}
SH_TAILLE_COL[${L_IDX_COL}]=$(( ${SH_TAILLE_COL[${L_IDX_COL}]} + 2 ))
SH_TAILLE_TABLEAU=$(( ${SH_TAILLE_TABLEAU} + ${SH_TAILLE_COL[${L_IDX_COL}]} ))
if [ ${L_IDX_PARAM} -eq ${L_NB_PARAM} ]
then
L_GRP_MESS_L1="${L_GRP_MESS_L1}`fct_format " " ${SH_TAILLE_COL[${L_IDX_COL}]} c`"
L_GRP_MESS_L2="${L_GRP_MESS_L2}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} c`"
L_GRP_MESS_L3="${L_GRP_MESS_L3}`fct_format " " ${SH_TAILLE_COL[${L_IDX_COL}]} c`"
else
L_GRP_MESS_L1="${L_GRP_MESS_L1}`fct_format " " ${SH_TAILLE_COL[${L_IDX_COL}]} c`|"
L_GRP_MESS_L2="${L_GRP_MESS_L2}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} c`|"
L_GRP_MESS_L3="${L_GRP_MESS_L3}`fct_format " " ${SH_TAILLE_COL[${L_IDX_COL}]} c`|"
fi
((L_IDX_COL++))
fi
fi
shift
((L_IDX_PARAM++))
done
[ "${L_ENTETE}" = "oui" ] && SH_TAILLE_TABLEAU=$(( ${SH_TAILLE_TABLEAU} + ${L_NB_PARAM} - 3 ))
# -- Affichage de la ligne
# -- ---------------------
L_IDX_PARAM=1
L_IDX_COL=1
L_MESSAGE=""
# -- Affichage de l entete du tableau
if [ "${L_ENTETE}" = "oui" ]
then
fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
fct_message -cpt -color jaune "`fct_format "${L_PARAM[2]}" ${SH_TAILLE_TABLEAU} c`"
fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
if [ "${L_GROUPE}" = "oui" ]
then
fct_message -cpt "${L_GRP_MESS_L1}"
fct_message -cpt "${L_GRP_MESS_L2}"
fct_message -cpt "${L_GRP_MESS_L3}"
else
fct_message -cpt "${L_GRP_MESS_L2}"
fi
fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
export SH_TAILLE_TABLEAU SH_TAILLE_COL
L_IDX_PARAM=3
fi
# -- Affichage du corp du tableau
while [ ${L_IDX_PARAM} -le ${L_NB_PARAM} -a "${L_PIED}" = "non" -a "${L_ENTETE}" = "non" ]
do
if [ ${L_IDX_PARAM} -eq ${L_NB_PARAM} ]
then
L_MESSAGE="${L_MESSAGE}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} d`"
else
L_MESSAGE="${L_MESSAGE}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} d`|"
fi
((L_IDX_PARAM++))
((L_IDX_COL++))
done
[ "${L_PIED}" = "non" -a "${L_ENTETE}" = "non" ] && fct_message -cpt "${L_MESSAGE}"
# -- Affichage du pied et liberation des variables de gestion
if [ "${L_PIED}" = "oui" ]
then
fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
unset SH_TAILLE_TABLEAU SH_TAILLE_COL
fi
# -- Affichage d une ligne de separation
[ "${L_SEP}" = "oui" ] && fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
[ -n "${L_OLD_IFS}" ] && IFS=${L_OLD_IFS} || unset IFS
return 0
}
typeset -Ffx fct_affiche_ligne