initial commit
This commit is contained in:
commit
103f54f895
159
conf/init.conf
Executable file
159
conf/init.conf
Executable file
@ -0,0 +1,159 @@
|
|||||||
|
##------------------------------------------------------------------------------
|
||||||
|
## Script : init.conf
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 29-06-2017
|
||||||
|
## Version : 2.1.2
|
||||||
|
## Objet : Fichier de configuration commun a tout les scripts
|
||||||
|
##
|
||||||
|
## Detail : Ce fichier contient les varaibles de fonctionement commune au script du socle
|
||||||
|
## Il est charge systematiquement au debut de chaque script
|
||||||
|
## Toute les variables initialisees ici sont nomme SH_*
|
||||||
|
##
|
||||||
|
## -----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 23-04-2014 - Emmanuel Confrere - Cre : Creation a partir de commun.conf
|
||||||
|
# qu'il doit remplacer a terme
|
||||||
|
# 1.1.0 13-05-2014 - Emmanuel Confrere - Evo : Factorisation du code
|
||||||
|
# Amelioration de la lisibilite et ajout de commentaire
|
||||||
|
# Passage de certaine variable en heritage
|
||||||
|
# 1.2.0 13-05-2014 - Emmanuel Confrere - Evo : Ajout de message de debug
|
||||||
|
# 1.3.0 16-04-2015 - Daniel Frochtmann - Evo : Ajout semaphore pour controler les executions
|
||||||
|
# multiples (SH_CPT_SEMAPHORE)
|
||||||
|
# 1.4.0 22-09-2015 - Emmanuel Confrere - Evo : Possibilite de defferencier les retentions entre les fichier cpt et log
|
||||||
|
# 2.0.0 10-02-2016 - Emmanuel Confrere - Evo : Integration au socle DTSI via Puppet
|
||||||
|
# 2.0.1 16-03-2016 - Emmanuel Confrere - Ano : Perte de la variable SH_RETENTION (Cf. DBA-2088)
|
||||||
|
# 2.1.0 24-03-2017 - Emmanuel Confrere - Evo : Changement du nom du serveur de batch
|
||||||
|
# 2.1.1 27-06-2017 - Emmanuel Confrere - Ano : Fonctionnement inattendu sous Bash 3.2.25
|
||||||
|
# la fonction logname ne renvoi rien ?
|
||||||
|
# 2.1.2 29-06-2017 - Emmanuel Confrere - Ano : Erreur : logname() renvoi null si connexion via sshd
|
||||||
|
# Remplacement de logname() par /etc/proc/self/loginuid
|
||||||
|
## -----------------------------------------------------------------------------
|
||||||
|
## Ce fichier contient les varaibles de fonctionement commune au script du socle
|
||||||
|
## Il est charge systematiquement au debut de chaque script
|
||||||
|
## Toute les variables initialisees ici sont nomme SH_*
|
||||||
|
## -----------------------------------------------------------------------------
|
||||||
|
# - Init variables
|
||||||
|
# - --------------
|
||||||
|
# - Elements d infrastructure et systeme
|
||||||
|
[ "`hostname`" = "sousetsuken" ] && SH_SRVDEP="oui" || SH_SRVDEP="non"
|
||||||
|
SH_OS_TYPE=`uname -s`
|
||||||
|
SH_IDLOGUSER=`cat /proc/self/loginuid`
|
||||||
|
SH_LOGUSER=`grep -E "[^:]*:[^:]:${SH_IDLOGUSER}" /etc/passwd|cut -d":" -f1`
|
||||||
|
SH_EXECUSER=${LOGNAME}
|
||||||
|
SH_PATH=${PATH}
|
||||||
|
|
||||||
|
# - Identification de la session de travail
|
||||||
|
# - ---------------------------------------
|
||||||
|
# La variable SH_SESSION_ID permet d identifier une session de travail.
|
||||||
|
# Il s agit d un identifiant unique permentant de reunir dans une unite commune
|
||||||
|
# les objets trace, journaux , historique ... Cette variable est partage par tout
|
||||||
|
# les shell appele en aval d un shell pere. La variable SH_SESSION_ID est initialise
|
||||||
|
# qu au premier chargement de init.conf
|
||||||
|
# L initialisation de certainne variable sont dependante de cette premiere initialisation
|
||||||
|
# pour permetre l heritage des parametres au sous-shell appele.
|
||||||
|
SH_TIME_STAMP=`date "+%x %X"` # Horrodatage pour l historique
|
||||||
|
SH_TIMES=`date +"%s"` # Horrodatage pour identification
|
||||||
|
SH_OSPID=$$ # Numero de processus
|
||||||
|
SH_SESSION_IDP="${SH_TIMES}_${SH_OSPID}"
|
||||||
|
# La variable SH_SESSION_ID est initialise que la premiere fois
|
||||||
|
[ -z "${SH_SESSION_ID}" ] && SH_SESSION_ID="${SH_SESSION_IDP}"
|
||||||
|
# La variable SH_FIRSTTIME permet de savoir si l execution courante de init.conf
|
||||||
|
# est issu d un appel depuis un script ou d un lancement manuel depuis le shell.
|
||||||
|
[ "${SH_SESSION_IDP}" = "${SH_SESSION_ID}" ] && SH_FIRSTTIME="oui" || SH_FIRSTTIME="non"
|
||||||
|
|
||||||
|
|
||||||
|
# - Localistaion du script, pour afficher l'aide si
|
||||||
|
# necessaire.Localisation defini par $SH_DIR/$SH_PROG
|
||||||
|
SH_PROG=`which $0 2>&1`
|
||||||
|
SH_DIR=`dirname ${SH_PROG}`
|
||||||
|
[ "${SH_DIR}" = "." ] && SH_DIR=`pwd`
|
||||||
|
SH_PROG=`basename ${SH_PROG}`
|
||||||
|
SH_PROG_VERSION=`grep "^## Version *:" ${SH_DIR}/${SH_PROG}|cut -d: -f2|sed 's/ *//g'`
|
||||||
|
SH_PARAM="$*"
|
||||||
|
|
||||||
|
# - Initialisationdes fichiers de trace, compte-rendu, message,
|
||||||
|
# historique, configuration specifique, fichier de semaphore
|
||||||
|
SH_FICTRC="${NC_EXPL_HST}/`echo ${SH_PROG}|cut -d"." -f1`.hist"
|
||||||
|
SH_FICMSG="${NC_EXPL_MSG}/`echo ${SH_PROG}|cut -d"." -f1`.msg"
|
||||||
|
SH_FICCFG="${NC_EXPL_CFG}/`echo ${SH_PROG}|cut -d"." -f1`.conf"
|
||||||
|
SH_FICSEM="/dev/shm/`echo ${SH_PROG}|cut -d"." -f1`.sem"
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" ] && SH_FICLOG="${NC_EXPL_LOG}/`echo ${SH_PROG}|cut -d"." -f1`_${SH_SESSION_IDP}.log"
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" ] && SH_FICCPT="${NC_EXPL_CPT}/`echo ${SH_PROG}|cut -d"." -f1`_${SH_SESSION_IDP}.cpt"
|
||||||
|
|
||||||
|
# - initialisation des variables commune aux scripts
|
||||||
|
# Ces variable peuvent etre surcharge ou modifier dans le fichier de configuration specifique du script
|
||||||
|
# SH_FICCFG mais dans ce cas il n y auras plus d heritage.
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" ] && SH_RETENTION_CPT=8 # Retention des fichiers cpt en jours par defaut
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" ] && SH_RETENTION_LOG=8 # Retention des fichiers trc en jours par defaut
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" ] && SH_SILENCE="non" # Mode d affichage silencieu (Valeur par default)
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" ] && SH_NIV_DEBUG=0 # Debug inactif par defaut
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" ] && SH_AFF_SID="non" # Affichage du numero de session dans fct_message et fct_erreur
|
||||||
|
# Les variable prefixe avec F sont utilise pour proteger l initialisation des variables principales (sans le F)
|
||||||
|
# Lorsque qu un script initialise une des ce variables dans le fichier de configuration specifique au script
|
||||||
|
# alors il faut ignorer les initialisation specifique qui pourrais etre effectuer par les scripts appeles par ce dernier.
|
||||||
|
SH_RETENTION_FLOG=${SH_RETENTION_LOG}
|
||||||
|
SH_RETENTION_FCPT=${SH_RETENTION_CPT}
|
||||||
|
SH_FSILENCE=${SH_SILENCE}
|
||||||
|
|
||||||
|
# - Parallelisation d execution des scripts.
|
||||||
|
# - Par defaut seul une occurance active d un meme script
|
||||||
|
# - Le controle d execution concurrente est realiase par la lib semaphore.lib
|
||||||
|
SH_CPT_SEMAPHORE=1 # Valeur d execution du semaphore par defaut
|
||||||
|
|
||||||
|
# - Indentation des messages affiche par fct_message
|
||||||
|
# pour ameliore la lisibilite des traces
|
||||||
|
# La valeur de la variable SH_INDENT_MSG est diminuer par fct_erreur(stop)
|
||||||
|
[ "${SH_FIRSTTIME}" = "non" ] && SH_INDENT_MSG="${SH_INDENT_MSG} " || SH_INDENT_MSG=""
|
||||||
|
|
||||||
|
# - Connection a la base de referencement
|
||||||
|
[ -z "${SH_CNX_REF}" ] && SH_CNX_REF=${SH_CNX_REF:="cmdb/IRji_5#1O@refpro"}
|
||||||
|
|
||||||
|
# Globalisation des variables
|
||||||
|
export SH_FICLOG SH_FICCPT SH_CNX_REF SH_INDENT_MSG SH_SESSION_ID SH_NIV_DEBUG SH_SILENCE
|
||||||
|
export SH_RETENTION_CPT SH_RETENTION_LOG SH_LOGUSER SH_EXECUSER
|
||||||
|
|
||||||
|
# - Chargement de l'environement specifique au script
|
||||||
|
if [ -f ${SH_FICCFG} ]
|
||||||
|
then
|
||||||
|
fct_message -debug 0 "Chargement de fichier de configuration : ${SH_FICCFG}"
|
||||||
|
. ${SH_FICCFG}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# - Remise en etat des variables protegees
|
||||||
|
if [ "${SH_FIRSTTIME}" = "oui" ]
|
||||||
|
then
|
||||||
|
# - Les variables peuvent etre changees dans le fichier specifique lors de la premiere inittialisation
|
||||||
|
# - Cependant pour conserve la compatibilte acsendante la variable SH_RETENTION doit etre controlee
|
||||||
|
# - Si cette derniere est non vide alors c est qu elle a ete utilise dans le fichier de configuration specifique
|
||||||
|
# - on doit alors initialiser les nouvelles variables avec cette valeur ...
|
||||||
|
# - Note : SH_RETENTION est obsolete et ne doit plus etre utilise dans les scripts
|
||||||
|
# Cette variable a ete remplace par SH_RETENTION_CPT et SH_RETENTION_LOG
|
||||||
|
if [ -n "${SH_RETENTION}" ]
|
||||||
|
then
|
||||||
|
SH_RETENTION_LOG=${SH_RETENTION}
|
||||||
|
SH_RETENTION_CPT=${SH_RETENTION}
|
||||||
|
else
|
||||||
|
SH_RETENTION=8 # Valeur par defaut, conserve pour compatibilite ascendante
|
||||||
|
fi
|
||||||
|
export SH_RETENTION
|
||||||
|
else
|
||||||
|
SH_RETENTION_LOG=${SH_RETENTION_FLOG}
|
||||||
|
SH_RETENTION_CPT=${SH_RETENTION_FCPT}
|
||||||
|
SH_SILENCE=${SH_FSILENCE}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# - Rotation des fichiers de compte-rendu et de trace
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" ] && fct_rotation ${SH_FICCPT} ${SH_RETENTION_CPT}
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" ] && fct_rotation ${SH_FICLOG} ${SH_RETENTION_LOG}
|
||||||
|
|
||||||
|
# - Marque le debut de l execution du programme
|
||||||
|
fct_message -hist "(${SH_SESSION_ID}) : Debut du script"
|
||||||
|
fct_message -hist "(${SH_SESSION_ID}) : Parametre : ${SH_PARAM}"
|
||||||
|
[ "${SH_FIRSTTIME}" = "oui" -a ${SH_NIV_DEBUG} -gt 0 ] && fct_message -color rouge "ATTENTION - Mode debug activer : Niveau de trace ${SH_NIV_DEBUG}"
|
||||||
|
|
||||||
|
# - Liberation des variables locale
|
||||||
|
unset SH_TIMES SH_OSPID SH_TIME_STAMP SH_FIRSTTIME SH_RETENTION_FLOG SH_RETENTION_FCPT SH_FSILENCE SH_IDLOGUSER
|
||||||
|
|
||||||
|
# - Gestion des options et argument
|
||||||
|
fct_params ${*}
|
22
conf/shell-env/lisezmoi.txt
Executable file
22
conf/shell-env/lisezmoi.txt
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
Ce dossier contient les fichiers d initialisation d'environement.
|
||||||
|
Il sont charger par le script /etc/profile.d/socle_bash_dtsi.sh.
|
||||||
|
|
||||||
|
Le nom des fichiers sont de la forme profile_<type>_<sous-type>.env.
|
||||||
|
|
||||||
|
<type> prend une des valeurs suivante :
|
||||||
|
- "socle" : profile dependant du socle
|
||||||
|
- "grp" : Profile lie au groupe Linux <sous-type>
|
||||||
|
- "app" : profile indepandant du socle
|
||||||
|
|
||||||
|
<sous-type> est libre sauf pour le type "grp". Dans ce cas
|
||||||
|
la valeurs doit etre le nom d un groupe Linux existant. Le fichiers
|
||||||
|
d'environement seras alors source uniquemement si le compte de connexion
|
||||||
|
est membre du groupe.
|
||||||
|
|
||||||
|
Les fichiers de ce dossiers sont sources dans l ordre suivant :
|
||||||
|
1 - le fichier profile_init.env
|
||||||
|
2 - les fichiers profile_socle_*.env
|
||||||
|
3 - les fichiers profile_grp_*.env (En fontion des groupe dont est membre le compte de connexion)
|
||||||
|
4 - les fichiers profile_app_*.env
|
||||||
|
|
||||||
|
Attention : Les fichiers present ici, doivent etre gere par Puppet.
|
74
conf/shell-env/profile_init.env
Executable file
74
conf/shell-env/profile_init.env
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : profile_init.env
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 11-07-2017
|
||||||
|
## Version : 1.2.3
|
||||||
|
## Objet : Initialisation des variables d environements du socle
|
||||||
|
## Chargement des librairie bash
|
||||||
|
## Initialisation du PATH
|
||||||
|
##
|
||||||
|
## Fonctionnement : Ce script est depose dans le repertoire ${NC_EXPL_ROOT}/conf/shell-env
|
||||||
|
## avec les droits suivant : 0644 asr:asr
|
||||||
|
##
|
||||||
|
## Il initialise l environement globale du socles, charge les librairie et
|
||||||
|
## initialise les PATH et les alias commun.
|
||||||
|
##
|
||||||
|
## Il est appele par le script /etc/profile.d/dtsi.sh
|
||||||
|
##
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 10-02-2016 - Emmanuel Confrere - Cre : A partir de l ancien fichier .dbenv
|
||||||
|
# 1.0.1 21-07-2016 - Stephane Tourneyre - Ano : Ajout ancien path pour man ADMLINUX-1176
|
||||||
|
# 1.1.0 28-07-2016 - Emmanuel Confrere - Evo : Normalisation : Versionnage Sementique
|
||||||
|
# 1.2.0 05-04-2017 - Emmanuel Confrere - Evo : Ajout de la variable NC_EXPL_NFS
|
||||||
|
# 1.2.1 07-04-2017 - Emmanuel Confrere - Ano : Definition du prompt
|
||||||
|
# 1.2.2 11-04-2017 - Emmanuel Confrere - Ano : Suppression de la definition du Prompt
|
||||||
|
# 1.2.3 11-07-2017 - Emmanuel Confrere - Ano : Description du fonctionnement erronee.
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# -- Initialisation des variable globale NC_*
|
||||||
|
#
|
||||||
|
NC_EXPL_LIB=${NC_EXPL_ROOT}/lib
|
||||||
|
NC_EXPL_BIN=${NC_EXPL_ROOT}/bin
|
||||||
|
NC_EXPL_LOG=${NC_EXPL_ROOT}/log
|
||||||
|
NC_EXPL_HST=${NC_EXPL_ROOT}/hist
|
||||||
|
NC_EXPL_CPT=${NC_EXPL_ROOT}/cpt
|
||||||
|
NC_EXPL_TMP=${NC_EXPL_ROOT}/tmp
|
||||||
|
NC_EXPL_DAT=${NC_EXPL_ROOT}/dat
|
||||||
|
NC_EXPL_MOD=${NC_EXPL_ROOT}/mod
|
||||||
|
NC_EXPL_CFG=${NC_EXPL_ROOT}/conf
|
||||||
|
NC_EXPL_MSG=${NC_EXPL_ROOT}/msg
|
||||||
|
NC_EXPL_MAN=${NC_EXPL_ROOT}/man
|
||||||
|
|
||||||
|
|
||||||
|
#[ `df|grep -c "srv-nfs"` -eq 1 ] && NC_EXPL_NFS="oui" || NC_EXPL_NFS="non"
|
||||||
|
NC_EXPL_NFS="non"
|
||||||
|
|
||||||
|
# -- Export des variables
|
||||||
|
#
|
||||||
|
export NC_EXPL_LOG NC_EXPL_HST NC_EXPL_TMP NC_EXPL_LIB NC_EXPL_DAT NC_EXPL_MAN
|
||||||
|
export NC_EXPL_CPT NC_EXPL_BIN NC_EXPL_CFG NC_EXPL_MSG NC_EXPL_MOD NC_EXPL_NFS
|
||||||
|
|
||||||
|
# -- Chargement des librairies
|
||||||
|
#
|
||||||
|
for lib in `find ${NC_EXPL_LIB} -name \*.lib`
|
||||||
|
do
|
||||||
|
. ${lib}
|
||||||
|
done
|
||||||
|
|
||||||
|
# Ajout du repertoire des scripts au Path
|
||||||
|
# bin -> Repertoire des script dba
|
||||||
|
fctpath "${NC_EXPL_BIN}" PATH :
|
||||||
|
fctpath '/usr/local/share/man' MANPATH :
|
||||||
|
fctpath '/usr/share/man/fr' MANPATH :
|
||||||
|
fctpath '/usr/share/man/overrides' MANPATH :
|
||||||
|
fctpath '/usr/share/man/' MANPATH :
|
||||||
|
fctpath "${NC_EXPL_MAN}" MANPATH :
|
||||||
|
|
||||||
|
# -- Definition des alias
|
||||||
|
#
|
||||||
|
alias bbin='cd ${NC_EXPL_ROOT}/bin'
|
||||||
|
alias type='whence -v'
|
||||||
|
alias log='cd ${NC_EXPL_LOG}'
|
||||||
|
alias hist='cd ${NC_EXPL_HST}'
|
793
how_to_use_bash_socle.txt
Executable file
793
how_to_use_bash_socle.txt
Executable file
@ -0,0 +1,793 @@
|
|||||||
|
-- ----------------------------------------------------------------- --
|
||||||
|
-- Aide memoire pour l ecriture de script Bash sous le socle DTSI --
|
||||||
|
-- ----------------------------------------------------------------- --
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
-- Sommaire
|
||||||
|
--
|
||||||
|
-- I - Arborescence du socle
|
||||||
|
-- II - Variables d environement
|
||||||
|
-- 1 - Variables globales
|
||||||
|
-- 2 - Variables globales specifiques
|
||||||
|
-- 2.1 Pour les serveurs BDD
|
||||||
|
-- 3 - Variables de session
|
||||||
|
-- III - Utilisation du socle bash
|
||||||
|
-- 1 - Cartouche
|
||||||
|
-- 1.1 Elements du cartouche
|
||||||
|
-- 1.2 Versionnement semantique
|
||||||
|
-- 1.2.1 Usage
|
||||||
|
-- 1.2.2 Format
|
||||||
|
-- 1.2.3 Semantique
|
||||||
|
-- 2 - Initialisation du socle
|
||||||
|
-- 3 - Structure d un script
|
||||||
|
-- 4 - Actions realisees au lancement d un script
|
||||||
|
-- IV - Nomenclature
|
||||||
|
-- 1 - Fichiers temporaires
|
||||||
|
-- 2 - Nom des executables
|
||||||
|
-- V - Description et usage des Librairies
|
||||||
|
-- 1 - fct_message
|
||||||
|
-- 2 - fct_affiche_ligne
|
||||||
|
-- 3 - fct_erreur
|
||||||
|
-- 4 - fct_unique_exec
|
||||||
|
-- 5 - fct_libere_exec
|
||||||
|
-- 6 - fct_usage
|
||||||
|
-- 7 - fct_rotation
|
||||||
|
-- 8 - fctpath
|
||||||
|
-- 9 - fct_params
|
||||||
|
-- VI - Deploiement via puppet
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
I - Arborescence du socle
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
La racine des dossiers utilisee par le Socle DTSI est definie par la variable d'environement NC_EXPL_ROOT.
|
||||||
|
Cette derniere est initialisee a la connexion par l appel au script /etc/profile.d/dtsi.sh
|
||||||
|
Cette arborescence est utilisee pour tous scripts Bash ou Ruby, ainsi que les variables d'environement qui
|
||||||
|
en decoulent.
|
||||||
|
|
||||||
|
Sous l arborescence ${NC_EXPL_ROOT} on trouve les dossiers suivants :
|
||||||
|
|
||||||
|
+-----------------+-----------------------------------------------------------------------------------------------+
|
||||||
|
| Dossier | Description |
|
||||||
|
+-----------------+-----------------------------------------------------------------------------------------------+
|
||||||
|
| {Racine}/bin | Contient les binaires (scripts Bash et Ruby, eventuellement C) |
|
||||||
|
| {Racine}/conf | Contient les fichiers de configuration des scripts, ainsi que du socle |
|
||||||
|
| {Racine}/cpt | Contient les fichiers de comtpe rendu generes par les script (purge auto , 8 jours par defaut)|
|
||||||
|
| {Racine}/dat | Contient les fichiers de donnees geres par les scripts |
|
||||||
|
| {Racine}/hist | Contient l historique d execution des scripts (pas de purge) |
|
||||||
|
| {Racine}/lib | Contient les librairies charge a la connexion par le socle |
|
||||||
|
| {Racine}/log | Contient les fichiers de logs d execution des scripts (purge auto , 8 jours par defaut ) |
|
||||||
|
| {Racine}/man | Contient les fichiers d aide des scripts pour l utilitaire "man" |
|
||||||
|
| {Racine}/mod | Contient les fichiers modeles a usage des scripts |
|
||||||
|
| {Racine}/msg | Contient les fichiers de message pour les scripts pour la librairie "fct_erreur" |
|
||||||
|
| {Racine}/tmp | Continet les fichiers temporaires des scripts du socle |
|
||||||
|
+-----------------+-----------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
Note : Sous chaque dossier vous trouverez un fichier texte lisezmoi.txt decrivant l usage du repertoire.
|
||||||
|
|
||||||
|
|
||||||
|
II - Variables d environement
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Le socle utilise deux groupes de variables. Le premier dit "global" le second "de session".
|
||||||
|
Sauf si explicite, les variables globales sont definies et exportees a la connexion. Elles sont donc utilisables
|
||||||
|
par tous les scripts, mais elles ne sont pas modifiables.
|
||||||
|
|
||||||
|
Les variables de session sont definies a l'execution d un script et lui sont propre.
|
||||||
|
Cependent certaines d entre elles sont transmises au script enfant
|
||||||
|
- SH_SESSION_ID, SH_FICLOG, SH_FICCPT, SH_RETENTION_CPT, SH_RETENTION_LOG, SH_NIV_DEBUG, SH_SILENCE, SH_AFF_SID
|
||||||
|
|
||||||
|
Les variables de session sont modifiable a 2 niveaux. De facon global dans le fichier "init.conf" ou pour un script
|
||||||
|
particulier dans le fichier ${NC_EXPL_CFG}/<Nom_du_script>.conf. La valeur definit dans "init.conf" seras utlisee sauf
|
||||||
|
si elle as ete surchargee dans le fichier de configuration du script.
|
||||||
|
Il y a cependant une specificite pour SH_RETENTION_CPT et SH_RETENTION_LOG, ces variables sont defini une et une seul fois
|
||||||
|
lors de la premiere initialisation. Ce qui signinfie qu'un script qui aurait surcharge ces variables, ignorera l initialisation
|
||||||
|
de ces variable si il est appeler par un autre script.
|
||||||
|
|
||||||
|
|
||||||
|
1 - Variables globales generals
|
||||||
|
+-------------------+----------------------------+
|
||||||
|
| Nom | Usage |
|
||||||
|
+-------------------+----------------------------+
|
||||||
|
| NC_EXPL_ROOT | Racine /opt/expl |
|
||||||
|
| EXPL_ROOT | Alias pour NC_EXPL_ROOT |
|
||||||
|
| NC_EXPL_BIN | Pointe vers {Racine}/bin |
|
||||||
|
| NC_EXPL_CFG | Pointe vers {Racine}/conf |
|
||||||
|
| NC_EXPL_CPT | Pointe vers {Racine}/cpt |
|
||||||
|
| NC_EXPL_DAT | Pointe vers {Racine}/dat |
|
||||||
|
| NC_EXPL_HST | Pointe vers {Racine}/hist |
|
||||||
|
| NC_EXPL_LIB | Pointe vers {Racine}/lib |
|
||||||
|
| NC_EXPL_LOG | Pointe vers {Racine}/log |
|
||||||
|
| NC_EXPL_MAN | Pointe vers {Racine}/man |
|
||||||
|
| NC_EXPL_MOD | Pointe vers {Racine}/mod |
|
||||||
|
| NC_EXPL_MSG | Pointe vers {Racine}/msg |
|
||||||
|
| NC_EXPL_TMP | Pointe vers {Racine}/tmp |
|
||||||
|
| RUBYLIB | vaut ${NC_EXPL_LIB} |
|
||||||
|
| NC_EXPL_SRVBATCH | Nom du serveur Batch |
|
||||||
|
+-------------------+----------------------------+
|
||||||
|
|
||||||
|
Les variables NC_EXPL_ROOT, EXPL_ROOT et NC_EXPL_SRVBATCH sont definie dans le fichier "dtsi.sh"
|
||||||
|
Les autres variables NC_~ sont definie dans le fichier "profile_init.env"
|
||||||
|
|
||||||
|
2 - Variables globales specifiques
|
||||||
|
2.1 Pour les serveurs BDD
|
||||||
|
+--------------------+------------------------------------------+
|
||||||
|
| Nom | Usage |
|
||||||
|
+--------------------+------------------------------------------+
|
||||||
|
| NC_EXPL_SQL | Pointe vers {Racine}/sql |
|
||||||
|
| NC_EXPL_DBTAB | Pointe vers le fichier .dbtab |
|
||||||
|
| NC_EXPL_DBEDITEUR | Vaut : "oracle" ou "postgres" ou "mysql" |
|
||||||
|
+--------------------+------------------------------------------+
|
||||||
|
|
||||||
|
Ces variables sont definie dans le fichier "profile_socle_database.env"
|
||||||
|
|
||||||
|
3 - Variables de session
|
||||||
|
Cette liste n est pas exhaustive, seules les principales variables sont citees.
|
||||||
|
+--------------------+-------------------------------------------------------------------------------+
|
||||||
|
| Nom | Usage |
|
||||||
|
+--------------------+-------------------------------------------------------------------------------+
|
||||||
|
| SH_SESSION_ID | Numero unique d execution : <TimeStamp>_<PId> |
|
||||||
|
| SH_SILENCE | Acitve ou non l affichage des messages via fct_message. Par defaut vaut "non" |
|
||||||
|
| SH_PROG | Nom du script |
|
||||||
|
| SH_LOGUSER | Compte initial de connexion au serveur |
|
||||||
|
| SH_EXECUSER | Compte courant executant le script |
|
||||||
|
| SH_DIR | Dossier hebergeant le script |
|
||||||
|
| SH_PROG_VERSION | Version du script |
|
||||||
|
| SH_FICTRC | Pointe vers le fichier ${NC_EXPL_HST}/<Nom_du_script>.hist |
|
||||||
|
| SH_FICMSG | Pointe vers le fichier ${NC_EXPL_MSG}/<Nom_du_script>.msg |
|
||||||
|
| SH_FICCFG | Pointe vers le fichier ${NC_EXPL_CFG}/<Nom_du_script>.conf |
|
||||||
|
| SH_FICSEM | Pointe vers le fichier /dev/shm/<Nom_du_script>.sem |
|
||||||
|
| SH_FICLOG | Pointe vers le fichier ${NC_EXPL_LOG}/<Nom_du_script>.log |
|
||||||
|
| SH_FICCPT | Pointe vers le fichier ${NC_EXPL_CPT}/<Nom_du_script>.cpt |
|
||||||
|
| SH_NIV_DEBUG | Vaut 0 par defaut. Niveau d affichage dans les fichiers de trace |
|
||||||
|
| SH_RETENTION_CPT | Vaut 8 par defaut. Duree de retention en jours des fichiers de compte-rendu |
|
||||||
|
| SH_RETENTION_LOG | Vaut 8 par defaut. Duree de retention en jours des fichiers de trace |
|
||||||
|
+--------------------+-------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
Remarque : Les variables SH_SILENCE et SH_NIV_DEBUG sont controlees par les options "-s" et "-dbg"
|
||||||
|
si la gestion des options a ete activee.
|
||||||
|
|
||||||
|
|
||||||
|
III - Utilisation du socle bash
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Cette partie decrit sommairmement les quelques regles d usage pour ecrire un script Bash sous le socle DTSI
|
||||||
|
Ceci ne concerne pas les script Ruby qui ne sont pas pris en charge par le socle decrit ici.
|
||||||
|
|
||||||
|
1 - Cartouche
|
||||||
|
Les scripts doivent commencer par le cartouche ci-dessous :
|
||||||
|
+----------------------------------------------------------------------------------------------------+
|
||||||
|
| |
|
||||||
|
| #!/bin/bash |
|
||||||
|
| ##---------------------------------------------------------------------------- |
|
||||||
|
| ## Script : <Nom_du_script> |
|
||||||
|
| ## Module Puppet : <Nom_du_module_hebergeant_le_script> |
|
||||||
|
| ## Auteur : <Auteur ayant cree le script> |
|
||||||
|
| ## Date : <Derniere_date_d_actualisation_au_format_JJ-MM-AAAA> |
|
||||||
|
| ## Version : <Version> |
|
||||||
|
| ## Objet : <Resume de la fonction> |
|
||||||
|
| ## |
|
||||||
|
| # ---------------------------------------------------------------------------- |
|
||||||
|
| # Mise a jour : |
|
||||||
|
| # <Version> <Date> - <Auteur> - <Action> : <Description> |
|
||||||
|
| # 0.0.1 08-06-2016 - Toto Laricot - Cre : Creation |
|
||||||
|
| # 0.0.2 08-09-2016 - Titi Alapeti - Ano : Ce truc est faux |
|
||||||
|
| # ---------------------------------------------------------------------------- |
|
||||||
|
| # Dependance : |
|
||||||
|
| # @DEP: <Nom_du_script>:<Version[-|+]> |
|
||||||
|
| # ---------------------------------------------------------------------------- |
|
||||||
|
| # Liste des options et arguments |
|
||||||
|
| # @OPT: <type>:<nom>:<var>:<nb_arg>:<def_val>:<OptE>:<OptI>:<ctl_val> # <Commentaire> |
|
||||||
|
| # @OPT: <type>:... # <Commentaire> |
|
||||||
|
| # @ARG: <type>:<var>:<nb_arg>:<def_val>:<ctl_val> # <Commentaire> |
|
||||||
|
| ##---------------------------------------------------------------------------- |
|
||||||
|
| ## |
|
||||||
|
| ## Syntaxes : |
|
||||||
|
| ## -------- |
|
||||||
|
| ## |
|
||||||
|
| ## prompt> <Nom_du_script> <Liste_des_arguments_et_options> |
|
||||||
|
| ## |
|
||||||
|
| ## <Opt1> : <Description> |
|
||||||
|
| ## |
|
||||||
|
| ## Fonctionnement : |
|
||||||
|
| ## -------------- |
|
||||||
|
| ## |
|
||||||
|
| ## <Que fait le script dans les details et comment ca marche......> |
|
||||||
|
| ## |
|
||||||
|
| ##---------------------------------------------------------------------------- |
|
||||||
|
| . |
|
||||||
|
| . |
|
||||||
|
| . |
|
||||||
|
| |
|
||||||
|
+----------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
Note : Les lignes commencant par 2 "#" sont utilisees pour generer l aide, leur maintient est donc necessaire
|
||||||
|
pour garantir la fiabilite de l information. Ce sont ces lignes, qui sont lues lors de l utilisation de
|
||||||
|
l'option par defaut "-h".
|
||||||
|
|
||||||
|
1.1 Elements du cartouche
|
||||||
|
1.1.1 Meta-donnees
|
||||||
|
- <Action> : peut prendre les valeurs suivantes -> cre, ano, evo, typo
|
||||||
|
cre : Creation du script.
|
||||||
|
evo : Evolution du script -> Ajout de nouvelles fonctionnalites, Amelioration du code.
|
||||||
|
ano : Correction du code suite a un comportement inattendu.
|
||||||
|
typo : Ajout de commentaires, de texte ou correction gramatical sans influence sur le code.
|
||||||
|
|
||||||
|
- <Auteur> : <Prenom> <Nom>
|
||||||
|
|
||||||
|
- <Version> : Format x.y.z
|
||||||
|
Pour le suivie des versions on utilisera le versionnement semantique (voir paragraphe III-1.2).
|
||||||
|
|
||||||
|
1.1.2 Paragraphe
|
||||||
|
- Mise a jour : Ce paragraphe est utilise pour suivre l evolution des versions. La derniere version en
|
||||||
|
vigueur doit etre reportee dans le premier paragraphe.
|
||||||
|
|
||||||
|
- Dependance : Permet de definir la liste ainsi que la version des scripts qui sont appeles.
|
||||||
|
Dans le cas d un changement cela permet de connaitre les scripts qui sont impactes.
|
||||||
|
Pour le moment aucun script n exploite cette meta-donnee.
|
||||||
|
Present pour un future usage.
|
||||||
|
|
||||||
|
- Liste des options : La declaration des options n est pas obligatoire.
|
||||||
|
|
||||||
|
Si aucune declaration n est presente alors la librairie params.lib ne fait aucune action.
|
||||||
|
Dans ce cas les options par defaut -h, -log, -hist, -cpt, -s et -dbg ne seront pas disponible.
|
||||||
|
|
||||||
|
Si le script ne necessite pas d option mais que l on souhaite disposer des options par defaut, il
|
||||||
|
faudras declarer une option bidon. ex: "# @OPT: f:bidon::::::"
|
||||||
|
|
||||||
|
Si la declaration existe alors le socle gerera les parametres en entree du script, ainsi que
|
||||||
|
les options par defaut -h, -log, -hist, -cpt, -s et -dbg. Ces mots cle sont reserve et ne
|
||||||
|
peuvent pas etre utilise par le script.
|
||||||
|
|
||||||
|
La declaration est realise dans le paragraphe "Liste des options et arguments". Chaque
|
||||||
|
option est identifiee par l entete de ligne "# @OPT:" suivi de la description.
|
||||||
|
La description consiste en une liste de parametres separes par ":"
|
||||||
|
<type>:<nom>:<var>:<nb_arg>:<def_val>:<OptE>:<OptI>:<ctl_val>
|
||||||
|
|
||||||
|
L ordre des parametre est fige et tous doivent etre presents.
|
||||||
|
8 champs sont obligatoires, soit 7 caracteres ":" (on ne compte pas le caracatere ":" suivant @OPT).
|
||||||
|
Exemple de declaration valide :
|
||||||
|
# @OPT: fb:h::0:::
|
||||||
|
# @OPT: fb:s::0:::
|
||||||
|
# @OPT: f:dbg:SH_NIV_DEBUG:0/1:::
|
||||||
|
# @OPT: fb:log::0:::
|
||||||
|
# @OPT: f:hist:SH_ARG_HIST:0/1:10::
|
||||||
|
# @OPT: oM:i:G_INSTANCE:1/1:ALL:dbid:
|
||||||
|
# @OPT: oM:pr:G_PR_NOM:1/1:sq,t,l:
|
||||||
|
|
||||||
|
<type> : Propriete de l attribu defini par l agregation des lettres suivantes
|
||||||
|
f -> Option falcultative
|
||||||
|
b -> Booleen
|
||||||
|
o -> Option obligatoire
|
||||||
|
M -> Argument transforme en majuscule
|
||||||
|
|
||||||
|
<nom> : nom de l option (sans le tiret) Attention le nom de l option est senssible a la casse.
|
||||||
|
|
||||||
|
<var> : nom de la variable dans laquelle sera stockee le(s) argument(s)
|
||||||
|
si plusieurs arguments alors un tableau sera initialise <var[n]>
|
||||||
|
L index [n] commence a zero.
|
||||||
|
Le nombre d arguments effectivement passes a la commande est "${#<var>[*]}".
|
||||||
|
L valeur max de l index [n] est "${#<var>[*]} - 1".
|
||||||
|
|
||||||
|
<nb_arg> : nombre d arguments attendus de la forme "min/max", "min/", "max" ou ""
|
||||||
|
si vide ou "0" alors l option est booleene.
|
||||||
|
la forme "min/" considere le nombre max non determine (infini)
|
||||||
|
|
||||||
|
<def_val>: Valeur par defaut assignee a <var>
|
||||||
|
Fonctionne si <nb_arg> vaut 0/1 1/1
|
||||||
|
|
||||||
|
<OptE> : Liste des options mutellement exclusives separees par une virgule.
|
||||||
|
|
||||||
|
<OptI> : Liste des options inclusives separees par une virgule.
|
||||||
|
|
||||||
|
Lors de l initialisation les marqueurs "@OPT" sont lues et analysees.
|
||||||
|
Le resultat est compare aux arguments et options sousmis au script
|
||||||
|
et les variables suivantes son initialisees ...
|
||||||
|
|
||||||
|
- SH_OPTION_<nom> : Initialisee a "1" (Vrai) ou "0" (Faux) selon que l option est respectivement utilise ou non.
|
||||||
|
Il existe toujours une variable par option declaree. Ceci concerne aussi les options par defaut
|
||||||
|
gere par la librairie params.lib
|
||||||
|
- SH_ARG_<nom> : Cette variable existe uniquement si le champ <var> est null et si le type n est pas booleen.
|
||||||
|
Par defaut elle est initialisee a null ou avec la valeur <def_val>
|
||||||
|
Si le champ <var> est renseigne, alors SH_ARG_<nom> est remplacee pas <var>.
|
||||||
|
Si l option associee peut prendre plusieurs arguments, alors les variables
|
||||||
|
SH_ARG_<nom> ou <var> sont des tableaux dont l index commence a zero.
|
||||||
|
La taille du tableau peut etre recuperee via ${#SH_ARG_<nom>[*]} ou ${#<var>[*]}.
|
||||||
|
|
||||||
|
Les option -h, -s, -log [id], -hist [N] et -dbg N
|
||||||
|
sont prises en charge automatiquement. Ces noms sont donc reserves.
|
||||||
|
|
||||||
|
Les options par defaut realisent les actions suivantes :
|
||||||
|
|
||||||
|
-h : Affiche l aide du script (Ligne du cartouche qui commence par "##")
|
||||||
|
-s : Mode silence. Plus d'affichage sur le terminal.
|
||||||
|
Initialise la variable SH_SILENCE a "oui"
|
||||||
|
-log [id] : Affiche le dernier journal ou le journal "id" (identifiant de session d'execution).
|
||||||
|
-cpt [id] : Affiche le dernier compte-rendu ou le Compte-rendu "id" (identifiant de session d'execution).
|
||||||
|
-hist [N] : Affiche l historique des "N" dernieres executions (N=10 par dafaut)
|
||||||
|
-dbg N : Activation du mode debug au niveau "N". Active les messages geres par la librairie fct_message
|
||||||
|
dont l'option -debug est utilisee.
|
||||||
|
|
||||||
|
- Arguments : La declaration des argument du script n est pas obligatoire
|
||||||
|
|
||||||
|
Attention : Si aucune option "@OPT:" n est declaree alors il n y auras pas de prise en charge des arguments.
|
||||||
|
Si votre script ne necessite pas d option, mais qu il presente des arguments, alors il faudras declarer
|
||||||
|
une option bidon :"# @OPT: f:bidon::::::"
|
||||||
|
|
||||||
|
La declaration est realise dans le paragraphe "Liste des options et arguments".
|
||||||
|
Elle est identifiee par l entete de ligne "# @ARG:" suivi de la description.
|
||||||
|
Il ne peut y avoir qu une ligne de description pour les arguments.
|
||||||
|
(Si plusieurs lignes avec le marqueur @ARG existe, alors seul la premiere et prise en compte)
|
||||||
|
|
||||||
|
La description consiste en une liste de parametres separes par ":"
|
||||||
|
<type>:<var>:<nb_arg>:<def_val>:<ctl_val>
|
||||||
|
|
||||||
|
L ordre des parametres est fige et tous doivent etre presents.
|
||||||
|
|
||||||
|
<type> : Propriete de l attribu defini par l agregation des lettres suivantes
|
||||||
|
f -> Argument falcultative
|
||||||
|
o -> Argument obligatoire
|
||||||
|
M -> Argument transforme en majuscule
|
||||||
|
|
||||||
|
<var> : nom de la variable dans laquelle sera stockee le(s) argument(s)
|
||||||
|
si plusieurs arguments alors un tableau sera initialise <var[n]>
|
||||||
|
L index [n] commence a zero.
|
||||||
|
Le nombre d arguments effectivement passes a la commande est "${#<var>[*]}".
|
||||||
|
L valeur max de l index [n] est "${#<var>[*]} - 1".
|
||||||
|
|
||||||
|
Si <var> n est pas renseigne alors la variable SH_ARGS[] est initialisee
|
||||||
|
|
||||||
|
<nb_arg> : nombre d arguments attendus de la forme "min/max", "min/", "max" ou "".
|
||||||
|
si vide alors on considere que le nombre d arguments est a minima de 1.
|
||||||
|
la forme "min/" considere le nombre est a minima de "min".
|
||||||
|
|
||||||
|
<def_val>: Valeur par defaut assignee a <var>
|
||||||
|
Fonctionne si <nb_arg> vaut 0/1 1/1
|
||||||
|
|
||||||
|
ATTENTION
|
||||||
|
Si le caractere "&" est present dans la valeur d un argument, alors cette valeur doit etre encadree
|
||||||
|
par une simple cote et le caractere "&" doit etre proteger par un anti-slash "\".
|
||||||
|
|
||||||
|
Le cas echeans le shell generera un fils qui tentera l execution d'un script portant le nom de la valeur de l argument.
|
||||||
|
|
||||||
|
1.2 Versionnement semantique
|
||||||
|
1.2.1 Usage
|
||||||
|
L idee de l utilisation du versionnement semantique est de definir clairement les intentions
|
||||||
|
d un changement dans un code pour les clients de ce dernier. Ceci permet de fiabiliser la mise en
|
||||||
|
place de dependances et de determiner les impacts d un changement.
|
||||||
|
|
||||||
|
1.2.2 Format
|
||||||
|
Le format utilise est le suivant x.y.z
|
||||||
|
x est l identifiant de version majeure.
|
||||||
|
y est l identifiant de version mineure.
|
||||||
|
z est l identifiant de version de correction.
|
||||||
|
|
||||||
|
1.2.3 Semantique
|
||||||
|
- Version majeure X : Il vaut "0" lors du developpement, le script est considere non valide et ne
|
||||||
|
devrait pas etre appele par d autre script. Une fois le script valide la version
|
||||||
|
doit etre 1.0.0 (premiere version stable).
|
||||||
|
Il doit etre incremente si des changements dans le code n assure plus la compatibilite
|
||||||
|
ascendante. Les identifiants de version mineure et de correction doivent etre remis
|
||||||
|
a zero quand l identifiant de version majeure est incremente.
|
||||||
|
|
||||||
|
- Version mineur y : Doit etre incremente lors de l ajout de nouvelle fonctionnalite ou d amelioration
|
||||||
|
du code qui n on t pas d impact sur la compatibilite ascendante. L identifiant de
|
||||||
|
version de correction doit être remis a zero lorsque l identifiant de version mineure
|
||||||
|
est incremente.
|
||||||
|
|
||||||
|
- Version de correction z : Doit être incremente si seules des corrections retro-compatibles sont introduites.
|
||||||
|
Une correction est definie comme un changement interne qui corrige un comportement incorrect.
|
||||||
|
Il peut etre incremente lors de correction typographique ou grammaticale.
|
||||||
|
|
||||||
|
|
||||||
|
2 - Initialisation du socle.
|
||||||
|
Par defaut les librairies du socle sont chargees a la connexion. Mais pour qu elles puissent etre operationnelles
|
||||||
|
il faut initialiser les variables de session.
|
||||||
|
Ceci est realise en sourcant le fichier "${NC_EXPL_CFG}/init.conf" au debut du script :
|
||||||
|
|
||||||
|
Rem : L analyse des options et arguments est aussi realise par "${NC_EXPL_CFG}/init.conf".
|
||||||
|
|
||||||
|
+----------------------------------------------------------------------------------------------------+
|
||||||
|
| |
|
||||||
|
| #!/bin/bash |
|
||||||
|
| ##---------------------------------------------------------------------------- |
|
||||||
|
| . |
|
||||||
|
| <CARTOUCHE> |
|
||||||
|
| . |
|
||||||
|
| ##---------------------------------------------------------------------------- |
|
||||||
|
| #----------------------------------------------------------------------------- |
|
||||||
|
| # Initialisation de l environement |
|
||||||
|
| #----------------------------------------------------------------------------- |
|
||||||
|
| if [ ! -f ${NC_EXPL_CFG}/init.conf ] |
|
||||||
|
| then |
|
||||||
|
| echo "Fichier d initialisation du socle \${NC_EXPL_CFG}/init.conf n existe pas !" |
|
||||||
|
| echo "Arret du script par securite" |
|
||||||
|
| exit 250 |
|
||||||
|
| else |
|
||||||
|
| . ${NC_EXPL_CFG}/init.conf |
|
||||||
|
| fi |
|
||||||
|
| . |
|
||||||
|
| . |
|
||||||
|
| |
|
||||||
|
+----------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
3 - Structure d un script
|
||||||
|
Voici les elements qui devraient etre present a minima dans les script Bash. Ceci est recommande pour
|
||||||
|
assurer une homogeneite dans l ensemble du socle.
|
||||||
|
|
||||||
|
+----------------------------------------------------------------------------------------------------+
|
||||||
|
| |
|
||||||
|
| #!/bin/bash |
|
||||||
|
| ##---------------------------------------------------------------------------- |
|
||||||
|
| . |
|
||||||
|
| <CARTOUCHE> |
|
||||||
|
| . |
|
||||||
|
| ##---------------------------------------------------------------------------- |
|
||||||
|
| #----------------------------------------------------------------------------- |
|
||||||
|
| # Initialisation de l environement |
|
||||||
|
| #----------------------------------------------------------------------------- |
|
||||||
|
| if [ ! -f ${NC_EXPL_CFG}/init.conf ] |
|
||||||
|
| then |
|
||||||
|
| echo "Fichier d initialisation du socle \${NC_EXPL_CFG}/init.conf n existe pas !" |
|
||||||
|
| echo "Arret du script par securite" |
|
||||||
|
| exit 250 |
|
||||||
|
| else |
|
||||||
|
| . ${NC_EXPL_CFG}/init.conf |
|
||||||
|
| fi |
|
||||||
|
| |
|
||||||
|
| #----------------------------------------------------------------------------- |
|
||||||
|
| # Definition des fonctions |
|
||||||
|
| #----------------------------------------------------------------------------- |
|
||||||
|
| # |
|
||||||
|
| function fct_un |
|
||||||
|
| { ... <Code fonction> |
|
||||||
|
| } |
|
||||||
|
| |
|
||||||
|
| #----------------------------------------------------------------------------- |
|
||||||
|
| function fct_deux |
|
||||||
|
| { ... |
|
||||||
|
| } |
|
||||||
|
| |
|
||||||
|
| #----------------------------------------------------------------------------- |
|
||||||
|
| # Programme principal MAIN |
|
||||||
|
| #----------------------------------------------------------------------------- |
|
||||||
|
| # |
|
||||||
|
| fct_message "${SH_PROG}" |
|
||||||
|
| fct_message "version ${SH_PROG_VERSION}" |
|
||||||
|
| |
|
||||||
|
| # -- Initialisation des variables par defaut |
|
||||||
|
| # -- --------------------------------------- |
|
||||||
|
| G_VAR1=${G_AVR1:="Valeur par defaut"} # <Comentaire> |
|
||||||
|
| ... |
|
||||||
|
| |
|
||||||
|
| # -- Control de coherence des options |
|
||||||
|
| # -- -------------------------------- |
|
||||||
|
| |
|
||||||
|
| # -- Traitement |
|
||||||
|
| # -- ---------- |
|
||||||
|
| |
|
||||||
|
| < ... Code du script ...> |
|
||||||
|
| |
|
||||||
|
| fct_erreur 0 |
|
||||||
|
| |
|
||||||
|
+----------------------------------------------------------------------------------------------------+
|
||||||
|
|
||||||
|
Note : La construction /G_VAR1=${G_AVR1:="Valeur par defaut"}/ permet de definir une variable avec une
|
||||||
|
valeur par defaut, qui peut etre surchargee dans le fichier de configuration {NC_EXPL_CFG}/<Nom_du_script>.conf
|
||||||
|
|
||||||
|
Concernant les fonctions /fct_message/ et /fct_erreur/ voir le chapitre V.
|
||||||
|
|
||||||
|
4 - Actions realisees au lancement d un script
|
||||||
|
Le script commence par le chargement de la configuration ". ${NC_EXPL_CFG}/init.conf"
|
||||||
|
un certain nombre d action sont effectuees par defaut en plus de l initialisation des variables de session.
|
||||||
|
|
||||||
|
- Initialisation des variables de session (Cf. II.3)
|
||||||
|
|
||||||
|
- Generation d'un numero de session unique sous la varable ${SH_SESSION_ID}
|
||||||
|
|
||||||
|
- Chargement du fichier ${SH_FICCFG}
|
||||||
|
|
||||||
|
- Rotation des fichiers ${SH_FICLOG} et ${SH_FICCPT} selon les retentions respective ${SH_RETENTION_LOG} et ${SH_RETENTION_CPT}
|
||||||
|
|
||||||
|
- Purge des fichiers temporaires (${NC_EXP_ROOT}/tmp) anterieurs selon la retentions ${SH_RETENTION_LOG}
|
||||||
|
et suppression des fichiers generes par le script utilsant le socle dans ${NC_EXP_ROOT}/log et ${NC_EXP_ROOT}/cpt
|
||||||
|
|
||||||
|
- Ecriture dans le fichier ${SH_FICTRC} de la date de debut execution, ainsi que des arguments passes au script
|
||||||
|
|
||||||
|
- Initialisation du fichier ${SH_FICLOG} a vide
|
||||||
|
|
||||||
|
- Analyse des parametres passes au script
|
||||||
|
Cette analyse ne fonctionne que si les options ont ete declarees dans l entete du script (Cf. III.1.1.2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IV - Nomenclature
|
||||||
|
------------
|
||||||
|
1 - Fichier temporaire
|
||||||
|
Les fichiers temporaires doivent etre ecrits dans le repertoire ${NC_EXPL_TMP}.
|
||||||
|
Les noms des fichiers temporaires sont de le forme : <Libre>_${SH_SESSION_ID}.tmp
|
||||||
|
De cette facon il seront geres par le socle (Suppresion automatique)
|
||||||
|
|
||||||
|
2 - Nom des executables ( fichiers du dossier {racine}/bin )
|
||||||
|
Les noms des fichiers doit etre de la forme :
|
||||||
|
<pre>_<descr>
|
||||||
|
<pre>_<descr>.<language>
|
||||||
|
<pre>_<app_source>_<app_dest>[_<libre>].<language>
|
||||||
|
<app>_<descr>.<language>
|
||||||
|
|
||||||
|
<pre> est une des valeurs suivantes : "sys", "dba", "exp", "ctl", "aud", "int"
|
||||||
|
|
||||||
|
- "sys" : Scrit d administration systeme.
|
||||||
|
- "dba" : Script d administration base de donnees
|
||||||
|
Ces scripts peuvent presenter des risques et doivent faire
|
||||||
|
l objet d une attention particuliere lors de leurs execution.
|
||||||
|
|
||||||
|
- "exp" : Script d exploitation devolue principalement au traitement reccurent
|
||||||
|
Ces scripts sont reserves a l'exploitation courante. Il peuvent
|
||||||
|
modifier le systeme dans le cadres de traitements reccurents.
|
||||||
|
Leurs execution est de risque modere, comme respecter une date d execution.
|
||||||
|
Il sont reserves a l exploitation systeme uniquement. Dans le cas d un traitement
|
||||||
|
reccurrent pour le compte d une application le nom doit etre de la forme <app>_<descr>.<language>
|
||||||
|
|
||||||
|
- "int" : Script dedier aux interfaces entre applications
|
||||||
|
Ces script doivent fair l objet d une attention particuliere car il peuvent modifier
|
||||||
|
les donnees applicative et peuvent etre contraint par des conditions d execution.
|
||||||
|
|
||||||
|
- "ctl" : Script de controle (devolu principalement a icinga)
|
||||||
|
- "aud" : Script d audit ne modifiant pas le systeme.
|
||||||
|
Ces scripts peuvent etre executes sans aucun risque.
|
||||||
|
|
||||||
|
<descr> est libre, doit refleter si possible la fonction du script.
|
||||||
|
|
||||||
|
<language> est une des valeurs suivantes :
|
||||||
|
- "rb" : Script Ruby.
|
||||||
|
- "sh" : Script Bash.
|
||||||
|
- Pas d extention : Script C
|
||||||
|
|
||||||
|
<app> est le nom de application a laquelle le script est dedie.
|
||||||
|
Ces scripts sont reserves a une application particuliere,
|
||||||
|
dans le cadres de l exploitation reccurente de l'application.
|
||||||
|
|
||||||
|
|
||||||
|
V - Description et usage des Librairies
|
||||||
|
-----------------------------------
|
||||||
|
1 - fct_message
|
||||||
|
--- -----------
|
||||||
|
|
||||||
|
Syntaxe : fct_message [-cpt] [-hist] [-nolog] [-debug N] [-color Couleur] "<Message a ecrire>"
|
||||||
|
Usage : Cette fonction est a utiliser en remplacement de la commande "echo".
|
||||||
|
Elle ajoute l horadatage au message et gere la ventilation des ecritures dans les differents fichiers de traces.
|
||||||
|
|
||||||
|
Fonction : Par defaut le message est affiche sur le terminal et est ecrit dans le fichier journal ${NC_EXPL_LOG}/<nom_du_script>.log
|
||||||
|
Les options modifient la destination de l ecriture :
|
||||||
|
- cpt : Ecrit en plus du journal dans le fichier de compte-rendu ${NC_EXPL_CPT}/<nom_du_script>.cpt
|
||||||
|
- hist : Ecrit uniquement dans le fichier d historique des executions ${NC_EXPL_TRC}/<nom_du_script>.hist
|
||||||
|
- nolog : inhibe l ecritutre dans le fichier journal
|
||||||
|
- debug N : N'affiche pas le message sur le terminal mais uniquement dans le fichier journal, a condition
|
||||||
|
que le script soit execute en mode debug de niveau equivalent a "N" via l'option "-dbg N".
|
||||||
|
Par defaut le niveau de debug est 0, ainsi si "N" vaut zero alors le message est ecrit
|
||||||
|
uniquement dans le fichier journal.
|
||||||
|
- color : Affiche le message en couleur. Les couleurs reconues sont : vert,rouge,bleu,cyan,jaune,orange,blanc et noir
|
||||||
|
|
||||||
|
|
||||||
|
2 - fct_affiche_ligne
|
||||||
|
--- -----------------
|
||||||
|
|
||||||
|
Syntaxe : fct_affiche_ligne [entete|pied] <elements>
|
||||||
|
Usage : Affiche un tableau sur la sortie standard et dans le fichier compte-rendu ${NC_EXPL_ROOT}/<script>.cpt
|
||||||
|
|
||||||
|
Fonction : 3 etapes sont necessaires pour creer un tableau :
|
||||||
|
- Definition du tableau
|
||||||
|
- Affichage des elements
|
||||||
|
- Fermeture du tableau
|
||||||
|
|
||||||
|
Ces etapes doivent imperativement etre suivies et dans cet ordre.
|
||||||
|
Il n est pas possible d imbriquer des tableaux.
|
||||||
|
|
||||||
|
- Definition
|
||||||
|
Elle realise par l appel de la fonction fct_affiche_ligne avec l argument entete la forme est alors la suivante :
|
||||||
|
|
||||||
|
fct_affiche_ligne entete "{Titre}" "{Colonne_1},{Taille_1}" "{Colonne_2},{Taille_2}" "{Colonne_3},{Taille_3}" "{Colonne_4},{Taille_4}" ...
|
||||||
|
|
||||||
|
ou bien
|
||||||
|
fct_affiche_ligne entete "{Titre}" "Groupe1({Colonne_1},{Taille_1}:{Colonne_2},{Taille_2})" "{Colonne_3},{Taille_3}" "{Colonne_4},{Taille_4}" "Groupe2({Colonne_4},{Taille_4}:...)"
|
||||||
|
|
||||||
|
- Affichage des elements
|
||||||
|
|
||||||
|
fct_affiche_ligne "<Element1>" "<Element2>" ...
|
||||||
|
|
||||||
|
- Fermeture du tableau
|
||||||
|
Cette action permet de liberer les variables de session qui ont ete crees
|
||||||
|
|
||||||
|
fct_affiche_ligne pied
|
||||||
|
|
||||||
|
Exemple ...
|
||||||
|
|
||||||
|
+
|
||||||
|
| fct_affiche_ligne entete "Un tableau" "C1,10" "C2,10" "c3,10"
|
||||||
|
| fct_affiche_ligne A B C
|
||||||
|
| fct_affiche_ligne 1 "" 3
|
||||||
|
| fct_affiche_ligne pied
|
||||||
|
|
|
||||||
|
+
|
||||||
|
| --------------------------------------
|
||||||
|
| Un tableau
|
||||||
|
| --------------------------------------
|
||||||
|
| C1 | C2 | c3
|
||||||
|
| --------------------------------------
|
||||||
|
| A |B |C
|
||||||
|
| 1 | |3
|
||||||
|
| --------------------------------------
|
||||||
|
+
|
||||||
|
|
||||||
|
+
|
||||||
|
| fct_affiche_ligne entete "Un Autre tableau" "C1,10" "G1(C2,20:C3,10:C4,3)" "C5,15"
|
||||||
|
| fct_affiche_ligne A B C D E
|
||||||
|
| fct_affiche_ligne 1 "" 3 3 4
|
||||||
|
| fct_affiche_ligne pied
|
||||||
|
|
|
||||||
|
+
|
||||||
|
| ------------------------------------------------------------------------
|
||||||
|
| Un Autre tableau
|
||||||
|
| ------------------------------------------------------------------------
|
||||||
|
| | G1 |
|
||||||
|
| C1 |-----------------------------------------| C5
|
||||||
|
| | C2 | C3 | C4 |
|
||||||
|
| ------------------------------------------------------------------------
|
||||||
|
| A |B |C |D |E
|
||||||
|
| 1 | |3 |3 |4
|
||||||
|
| ------------------------------------------------------------------------
|
||||||
|
+
|
||||||
|
|
||||||
|
3 - fct_erreur
|
||||||
|
--- ----------
|
||||||
|
|
||||||
|
Syntaxe : fct_erreur <N>
|
||||||
|
Usage : Gestion des erreurs d un script
|
||||||
|
|
||||||
|
Fonction : Cette fonction doit etre appelee pour sortir d un script du socle.
|
||||||
|
Elle affiche le message d erreur associe au code qui est lu dans le fichier ${NC_EXPL_MSG}/<script>.msg
|
||||||
|
Elle execute eventuellement une fonction rattachee, specifiee dans ce meme fichier.
|
||||||
|
Elle ferme les fichiers de traces, supprime les fichiers temporaires, libere les semaphores et
|
||||||
|
renvoi un code retour au script appelant.
|
||||||
|
|
||||||
|
N est un entier positif dont les valeurs suivantes sont reservees :
|
||||||
|
|
||||||
|
0 : Fin normale du script
|
||||||
|
250 : <lib:fct_erreur> Appel de la librairie sans le numero d erreur (<N> non renseigne !)
|
||||||
|
251 : <lib:fct_erreur> La description de l erreur <N> n existe pas dans le fichier <script>.msg
|
||||||
|
252 : <lib:fct_erreur> Le fichier <script>.msg n existe pas
|
||||||
|
253 : <lib:fct_erreur> La description de l erreur dans le fichier <script>.msg est incorrecte
|
||||||
|
254 : <lib:fct_params> Erreur a ete remontee par la librairie
|
||||||
|
255 : <lib:fct_erreur> Appel de la librairie avec un numero d erreur >= 250
|
||||||
|
256 : reserve pur un futur usage
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Le fichier <script>.msg contient les descriptions des codes erreur.
|
||||||
|
Un code par ligne de la forme :
|
||||||
|
<NumErreur> | <type> | <action> | <message> ou <fonction>
|
||||||
|
|
||||||
|
<NumErreur> : Entier positif identifiant l erreur
|
||||||
|
|
||||||
|
<type> : prend les valeurs erreur, alert ou info
|
||||||
|
colorise le message en fonction du type respectivement
|
||||||
|
rouge, orange et bleu
|
||||||
|
|
||||||
|
<action> : Action a realiser (continu,stop,exec)
|
||||||
|
- continu : Affiche le message puis rend la main au script
|
||||||
|
- stop : Affiche le message puis sort en erreur
|
||||||
|
- exec : execute la fonction puis rend la main au script
|
||||||
|
|
||||||
|
<fonction> : Fonction a executer
|
||||||
|
Ce champs peut contenir des variables qui seront valorisees.
|
||||||
|
|
||||||
|
<message> : Message a afficher (dans les traces et sur la sortie standard)
|
||||||
|
Ce champs peut contenir des variables qui seront valorisees.
|
||||||
|
|
||||||
|
4 - fct_unique_exec
|
||||||
|
--- ---------------
|
||||||
|
|
||||||
|
Syntaxe : fct_unique_exec [<nom>] [<Occurences>]
|
||||||
|
Usage : Empeche l execution multiple d un code par la l'acquisition de semaphore
|
||||||
|
|
||||||
|
Fonction :
|
||||||
|
|
||||||
|
|
||||||
|
5 - fct_libere_exec
|
||||||
|
--- ---------------
|
||||||
|
|
||||||
|
Syntaxe : fct_libere_exec [<nom>]
|
||||||
|
Usage : Libere les semaphores
|
||||||
|
|
||||||
|
Fonction :
|
||||||
|
|
||||||
|
|
||||||
|
6 - fct_usage
|
||||||
|
--- ---------
|
||||||
|
|
||||||
|
Syntaxe : fct_usage
|
||||||
|
Usage : Affiche l aide du script.
|
||||||
|
Ce sont les lignes du cartouche commencant par "##"
|
||||||
|
|
||||||
|
Fonction : Cette fonction est uniquement a usage interne du socle.
|
||||||
|
Elle est integree a la fonction fct_params.
|
||||||
|
|
||||||
|
7 - fct_rotation
|
||||||
|
--- ------------
|
||||||
|
|
||||||
|
Syntaxe :
|
||||||
|
Usage :
|
||||||
|
|
||||||
|
Fonction :
|
||||||
|
|
||||||
|
|
||||||
|
8 - fctpath
|
||||||
|
--- -------
|
||||||
|
|
||||||
|
Syntaxe :
|
||||||
|
Usage :
|
||||||
|
|
||||||
|
Fonction :
|
||||||
|
|
||||||
|
9 - fct_params
|
||||||
|
--- ----------
|
||||||
|
|
||||||
|
Syntaxe : fct_params
|
||||||
|
Usage : Gestion des options et arguments du script
|
||||||
|
|
||||||
|
Fonction : Cette fonction est uniquement a usage interne du socle.
|
||||||
|
Elle est appelee a l initialisation des variables de session lors du chargement du fichier ${NC_EXPL_CFG}/init.conf
|
||||||
|
Cette fonction extrait les lignes de declaration "# OPT:" et les compare au arguments sousmis au script
|
||||||
|
Pour plus d information voir le paragraphe III-1.1.2
|
||||||
|
|
||||||
|
V - Deploiement via puppet
|
||||||
|
-----------------------------------
|
||||||
|
1 - Script avec Hiera
|
||||||
|
--- -----------------
|
||||||
|
Exemple :
|
||||||
|
|
||||||
|
script_core_dtsi::file_bin_bash:
|
||||||
|
'aud_process_swap.sh':
|
||||||
|
source: 'puppet:///modules/script_core_dtsi/bin/aud_process_swap.sh'
|
||||||
|
|
||||||
|
2 - Fichier de conf avec Hiera
|
||||||
|
--- --------------------------
|
||||||
|
Exemple :
|
||||||
|
|
||||||
|
script_core_dtsi::file_conf_bash:
|
||||||
|
aud_process_swap.conf:
|
||||||
|
source: 'puppet:///modules/script_core_dtsi/conf/aud_process_swap.conf'
|
||||||
|
|
||||||
|
3 - Fichier de conf construit depuis un script avec Hiera
|
||||||
|
--- -----------------------------------------------------
|
||||||
|
Exemple :
|
||||||
|
|
||||||
|
script_core_dtsi::file_conf_hiera::aud_process_swap:
|
||||||
|
directives1: "conf1"
|
||||||
|
|
||||||
|
4 - fichier de message avec Hiera
|
||||||
|
--- ------------------------------
|
||||||
|
Exemple :
|
||||||
|
|
||||||
|
script_core_dtsi::msg_errors_hiera::aud_process_swap:
|
||||||
|
1: 'erreur | stop | message N 1'
|
||||||
|
2: 'alert | continu | message N 2'
|
||||||
|
|
||||||
|
5 - Fichier modele avec Hiera
|
||||||
|
--- --------------------------
|
||||||
|
Exemple :
|
||||||
|
|
||||||
|
script_core_dtsi::file_mod:
|
||||||
|
aud_process_swap.mod:
|
||||||
|
source: 'puppet:///modules/script_core_dtsi/mod/aud_process_swap.mod'
|
||||||
|
|
||||||
|
6 - Fichier SQL avec Hiera
|
||||||
|
--- ----------------------
|
||||||
|
Exemple :
|
||||||
|
|
||||||
|
script_core_dtsi::is_bdd: true
|
||||||
|
|
||||||
|
script_core_dtsi::file_sql:
|
||||||
|
aud_process_swap.sql:
|
||||||
|
source: 'puppet:///modules/script_core_dtsi/sql/aud_process_swap.sql'
|
79
install.sh
Executable file
79
install.sh
Executable file
@ -0,0 +1,79 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Script d'installation du socle bash Tetalab
|
||||||
|
#
|
||||||
|
# 21/07/2017 - Doug Le Tough
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PROFILE_DIR=/etc/profile.d
|
||||||
|
PROFILE_FILE=tetalab.sh
|
||||||
|
INSTALL_DIR=$(dirname $0)
|
||||||
|
NC_EXPL_ROOT=/opt/tetalab
|
||||||
|
export NC_EXPL_ROOT
|
||||||
|
|
||||||
|
NC_EXPL_LIB=${NC_EXPL_ROOT}/lib
|
||||||
|
NC_EXPL_BIN=${NC_EXPL_ROOT}/bin
|
||||||
|
NC_EXPL_LOG=${NC_EXPL_ROOT}/log
|
||||||
|
NC_EXPL_HST=${NC_EXPL_ROOT}/hist
|
||||||
|
NC_EXPL_CPT=${NC_EXPL_ROOT}/cpt
|
||||||
|
NC_EXPL_TMP=${NC_EXPL_ROOT}/tmp
|
||||||
|
NC_EXPL_DAT=${NC_EXPL_ROOT}/dat
|
||||||
|
NC_EXPL_MOD=${NC_EXPL_ROOT}/mod
|
||||||
|
NC_EXPL_CFG=${NC_EXPL_ROOT}/conf
|
||||||
|
NC_EXPL_MSG=${NC_EXPL_ROOT}/msg
|
||||||
|
NC_EXPL_MAN=${NC_EXPL_ROOT}/man
|
||||||
|
|
||||||
|
function exit_on_error
|
||||||
|
{
|
||||||
|
ERROR="$@"
|
||||||
|
echo -e "\033[91m*** ${ERROR} ***\033[0m"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ ! $(id -u) -eq 0 ]; then
|
||||||
|
exit_on_error "Ce script doit être exécuté par l'utilisateur root"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\033[93mInstallation du socle bash Tetalab:\033[0m"
|
||||||
|
echo -e "\033[93m * Création du répertoire racine: ${NC_EXPL_ROOT}\033[0m"
|
||||||
|
echo -e "\033[93m * Création des répertoires:\033[0m"
|
||||||
|
|
||||||
|
for DIR in $NC_EXPL_LIB $NC_EXPL_BIN $NC_EXPL_LOG $NC_EXPL_HST $NC_EXPL_CPT $NC_EXPL_TMP $NC_EXPL_DAT $NC_EXPL_MOD $NC_EXPL_CFG $NC_EXPL_MSG $NC_EXPL_MAN;
|
||||||
|
do
|
||||||
|
echo -e " * ${DIR}"
|
||||||
|
sudo mkdir -p ${DIR};
|
||||||
|
RET_VAL=$?
|
||||||
|
if [ ! ${RET_VAL} -eq 0 ]; then
|
||||||
|
exit_on_error "Erreur lors de la création des répertoires"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -e "\033[93m * Copie des fichiers de profile dans ${PROFILE_DIR}\033[0m"
|
||||||
|
cp ${INSTALL_DIR}/${PROFILE_FILE} ${PROFILE_DIR}
|
||||||
|
RET_VAL=$?
|
||||||
|
if [ ! ${RET_VAL} -eq 0 ]; then
|
||||||
|
exit_on_error "Erreur lors de la copie des fichiers de profile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\033[93m * Copie des fichiers de configuration dans ${NC_EXPL_CFG}\033[0m"
|
||||||
|
cp -R ${INSTALL_DIR}/conf/* ${NC_EXPL_CFG}
|
||||||
|
RET_VAL=$?
|
||||||
|
if [ ! ${RET_VAL} -eq 0 ]; then
|
||||||
|
exit_on_error "Erreur lors de la copie des fichiers de configuration"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\033[93m * Copie des bibliothèques dans ${NC_EXPL_LIB}\033[0m"
|
||||||
|
cp -R ${INSTALL_DIR}/lib/* ${NC_EXPL_LIB}
|
||||||
|
RET_VAL=$?
|
||||||
|
if [ ! ${RET_VAL} -eq 0 ]; then
|
||||||
|
exit_on_error "Erreur lors de la copie des bibliothèques"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\033[93m * Copie des scripts dans ${NC_EXPL_BIN}\033[0m"
|
||||||
|
cp -R ${INSTALL_DIR}/bin/* ${NC_EXPL_BIN}
|
||||||
|
RET_VAL=$?
|
||||||
|
if [ ! ${RET_VAL} -eq 0 ]; then
|
||||||
|
exit_on_error "Erreur lors de la copie des scripts"
|
||||||
|
fi
|
169
lib/affiche-ligne.lib
Executable file
169
lib/affiche-ligne.lib
Executable file
@ -0,0 +1,169 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## 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
|
121
lib/erreur.lib
Executable file
121
lib/erreur.lib
Executable file
@ -0,0 +1,121 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : erreur.lib
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 06-04-2017
|
||||||
|
## Version : 1.2.2
|
||||||
|
## Objet : Affiche le message d erreur associe au code et execute
|
||||||
|
## eventuellement une fonction rattachee.
|
||||||
|
##
|
||||||
|
## Fonction : fct_erreur Nombre
|
||||||
|
##
|
||||||
|
## Detail : Le message, et eventuellement la fonction sont recherche dans
|
||||||
|
## le fichier "${NC_EXPL_MSG}/nom_du_script.msg". Chaque ligne de ce fichier
|
||||||
|
## correspond a la definition d une erreur : Numero_err,Type,Fonction,Message
|
||||||
|
## Les parametre sont separe par le caractere "|".
|
||||||
|
## Type peut prendre les valeurs "info" ou "erreur"
|
||||||
|
## La fonction peut etre "stop","continu" ou defini dans le shell appelant.
|
||||||
|
## Numero_err est le code de retour du script (les numero de 250 a 256 sont reseves).
|
||||||
|
##
|
||||||
|
## Si numero_err vaut zero CodeRet=0 Fonction="stop"
|
||||||
|
## Si numero_err non renseigne CodeRet=250 Fonction="stop"
|
||||||
|
## Si numero_err n est pas trouver dans le fichier ".msg" CodeRet=251 Fonction="stop"
|
||||||
|
## Si le fichier ".msg" n existe pas CodeRet=252 Fonction="stop"
|
||||||
|
## Si la ligne de definition n est pas correcte CodeRet=253 Fonction="stop"
|
||||||
|
## Une erreur ete remontee par la fonction fct_params CodeRet=254 Fonction="stop"
|
||||||
|
## Si numero_err > 250 CodeRet=255
|
||||||
|
##
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 10-02-2016 - Emmanuel Confrere - Evo : Integration au socle DTSI
|
||||||
|
# 1.0.1 17-03-2016 - Emmanuel Confrere - Ano : Les fichier temporaire ne sont pas supprimer dans les sous arborescence
|
||||||
|
# 1.1.0 24-08-2016 - Emmanuel Confrere - Evo : Prise en charge de la librairie fct_params
|
||||||
|
# 1.2.0 05-10-2016 - Emmanuel Confrere - Evo : Interpretation des variables dans la zone de texte de fichier de configuration .msg
|
||||||
|
# 1.2.1 10-03-2017 - Emmanuel Confrere - Ano : Suppression des variables NC_EXPL_*
|
||||||
|
# 1.2.2 06-04-2017 - Emmanuel Confrere - Ano : Degradation de performance serveur (Cf. DBA-2458)
|
||||||
|
# Suppression de la commande "find"
|
||||||
|
##----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function fct_erreur
|
||||||
|
{
|
||||||
|
# - Declaration des variables
|
||||||
|
local L_NumErr=$1 # Numero d erreur a rechercher
|
||||||
|
local L_CodRet=0 # Code de sortie
|
||||||
|
local L_Cmd="stop" # Fonction execute par defaut, apres recheche
|
||||||
|
local L_RefErr="" # Extraction de la ligne du fichier .msg
|
||||||
|
local L_NbChamp="" # Controle le Nb Champ des ligne .msg
|
||||||
|
local L_Msg="" # Message a afficher
|
||||||
|
local L_Type="" # Type de message
|
||||||
|
|
||||||
|
[ -z "${SH_FICMSG}" ] && return 0
|
||||||
|
|
||||||
|
if [ $# -ne 1 ]
|
||||||
|
then
|
||||||
|
L_Cmd="stop"; L_CodRet=250; L_NumErr=250; L_Type="ERREUR"; L_Msg="NoErr non renseigne"
|
||||||
|
else
|
||||||
|
case ${L_NumErr} in
|
||||||
|
0 ) L_Cmd="stop"; L_CodRet=0; L_Type="FIN-OK" ;;
|
||||||
|
254 ) L_Cmd="stop"; L_CodRet=254; L_Type="ERREUR"; L_Msg="Une erreur ete remontee par la librairie fct_params" ;;
|
||||||
|
* ) if [ -f ${SH_FICMSG} ]
|
||||||
|
then
|
||||||
|
L_RefErr=`grep -e "^${L_NumErr} *|" ${SH_FICMSG}`
|
||||||
|
if [ -n "${L_RefErr}" ]
|
||||||
|
then
|
||||||
|
L_NbChamp=`echo ${L_RefErr}|sed "s/[^|]//g"`
|
||||||
|
if [ ${#L_NbChamp} -ne 3 ]
|
||||||
|
then
|
||||||
|
L_Cmd="stop"; L_CodRet=253; L_Type="ERREUR"; L_Msg="Definition de l erreur incorrecte"
|
||||||
|
else
|
||||||
|
[ ${L_NumErr} -ge 250 ] && L_CodRet=255 || L_CodRet=${L_NumErr}
|
||||||
|
L_Type=`echo ${L_RefErr}|cut -d"|" -f 2|tr a-z A-Z|sed 's/^ *//;s/ *$//'`
|
||||||
|
L_Cmd=`echo ${L_RefErr}|cut -d"|" -f 3|sed 's/^ *//;s/ *$//'`
|
||||||
|
eval L_Msg=\"${L_RefErr##*|}\"
|
||||||
|
[ -z "${L_Cmd}" ] && L_Cmd="stop"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
L_Cmd="stop"; L_CodRet=251; L_Type="ERREUR"; L_Msg="Definition de l erreur non trouvee"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
L_Cmd="stop"; L_CodRet=252; L_Type="ERREUR"; L_Msg="Le fichier msg n existe pas"
|
||||||
|
fi ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
case ${L_Type} in
|
||||||
|
"ERREUR" ) fct_message -color rouge "${L_Type} : ${L_Msg}" ;;
|
||||||
|
"ALERTE" ) fct_message -color orange "${L_Type} : ${L_Msg}" ;;
|
||||||
|
"INFO" ) fct_message -color bleu "${L_Type} : ${L_Msg}" ;;
|
||||||
|
"FIN-OK" ) ;;
|
||||||
|
* ) fct_message "${L_Type} : ${L_Msg}" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${L_Cmd}" in
|
||||||
|
"stop" ) fct_message -hist "(${SH_SESSION_ID}) : fin - ${L_NumErr}"
|
||||||
|
# Suppression des fichiers temporaire a la sortie du shell principal si mode debug pas activer
|
||||||
|
if [ ${#SH_INDENT_MSG} -eq 0 -a ${SH_NIV_DEBUG} -eq 0 ]
|
||||||
|
then
|
||||||
|
fct_message -debug 0 "<lib:fct_erreur> Nettoyage des fichiers temporaire de la session ${SH_SESSION_ID}"
|
||||||
|
if [ -n "${NC_EXPL_TMP}" -a -n "${SH_SESSION_ID}" -a "${NC_EXPL_TMP}" != "/" -a "${NC_EXPL_TMP}" != "." ]
|
||||||
|
then
|
||||||
|
rm -f "${NC_EXPL_TMP}/*${SH_SESSION_ID}*"
|
||||||
|
else
|
||||||
|
fct_message -debug 0 "<lib:fct_erreur> Variable de session incoherente : NC_EXPL_TMP = ${NC_EXPL_TMP} & SH_SESSION_ID = ${SH_SESSION_ID}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
case ${L_Type} in
|
||||||
|
"ERREUR" ) fct_message -color rouge "fin (${L_NumErr})" ;;
|
||||||
|
"ALERTE" ) fct_message -color orange "fin (${L_NumErr})" ;;
|
||||||
|
"INFO" ) fct_message -color bleu "fin (${L_NumErr})" ;;
|
||||||
|
"FIN-OK" ) fct_message -color vert "fin (${L_NumErr})" ;;
|
||||||
|
* ) fct_message "${L_Type} : ${L_Msg}" ;;
|
||||||
|
esac
|
||||||
|
# Signaler la fin d execution au semaphore eventuel
|
||||||
|
fct_libere_exec
|
||||||
|
# Reduction de l indentation
|
||||||
|
[ ${#SH_INDENT_MSG} -gt 0 ] && SH_INDENT_MSG=${SH_INDENT_MSG:0:$((${#SH_INDENT_MSG}-2))}
|
||||||
|
exit ${L_CodRet} ;;
|
||||||
|
"continu" ) return 0 ;;
|
||||||
|
"*" ) eval ${L_Cmd} ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
typeset -Ffx fct_erreur
|
266
lib/esql.lib
Executable file
266
lib/esql.lib
Executable file
@ -0,0 +1,266 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : esql.lib
|
||||||
|
## Module Puppet : gnc-script_database_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 10-02-2016
|
||||||
|
## Version : 8.0.7-0
|
||||||
|
## Objet : Cette fonction permet l execution d une requete sur un serveur de base de donnees
|
||||||
|
##
|
||||||
|
## Fonction : esql [NomVariable] [Connexion]
|
||||||
|
##
|
||||||
|
## Detail : Cette fonction permet l execution d une requete sur un serveur de base de donnees
|
||||||
|
## La requete est passe a travers la variable d environement ESQL_SQLSTMT.
|
||||||
|
## Cette fonction s appuis sur les executables psql et sqlplus. Les client de ces
|
||||||
|
## editeurs doivent donc a minima etre installer.
|
||||||
|
## La fonction est appelle depuis le shell ou depuis un script de la facon suivante
|
||||||
|
## esql <VAR> <CNX>
|
||||||
|
##
|
||||||
|
## Note : l ordre des parametres n a pas d importance et sont tout deux optionnel.
|
||||||
|
##
|
||||||
|
## Le type de base est determine soit par la variable d environement NC_EXPL_DBEDITEUR
|
||||||
|
## soit par la forme du parametre <CNX>. Ce parametre reconnais le format suivant
|
||||||
|
## <editeur>:<compte>/<mdp>@<Alias>|@<host:port>//<base>
|
||||||
|
##
|
||||||
|
## Ex. cpt/mdp@host:port//base
|
||||||
|
## cpt/mdp
|
||||||
|
## cpt/mdp@Alias ( @ est equivalent a //base pour Postgres )
|
||||||
|
## cpt/mdp//base ( // est equivalent a @Alias pour Oracle)
|
||||||
|
## /sys ( connexion "/ as sysdba" pour Oracle et "postgres" pour Postgres )
|
||||||
|
## /sys//base ( pour Postgres se connecte a la base "base" sous le compte "postgres". Ignore par oracle)
|
||||||
|
##
|
||||||
|
## Chacune de ces formes peut etre precede par l editeur de la base...
|
||||||
|
## Ex. oracle:cpt/mdp@Alias
|
||||||
|
## postgres:/sys
|
||||||
|
##
|
||||||
|
## Note : Prefixer par l editeur est necessaire pour interoger une base distante.
|
||||||
|
## Si l editeur n est pas specifier alors la variable NC_EXPL_DBEDITEUR seras utilisee
|
||||||
|
## pour determiner l executable a utiliser. La variable NC_EXPL_DBEDITEUR est initialise
|
||||||
|
## par /opt/expl/conf/shell-env/profile_socle_database.env
|
||||||
|
##
|
||||||
|
## Le resultat de la requete est envoye sur la sortie standard ou dans la variable <VAR>
|
||||||
|
## si cette derniere est renseignee. Si plusieur enragistrement sont
|
||||||
|
## retourne par la requete la variable <VAR> seras un tableau.
|
||||||
|
##
|
||||||
|
## Si aucun parametre de connexion n est fourni (<CNX> est null) alors
|
||||||
|
## une connxion par defaut sur la base local est utilise
|
||||||
|
##
|
||||||
|
## Par defaut la connexion a un serveur Postgres se fait avec le compte postgres
|
||||||
|
## et si la base n est pas specifier on se connectre a la base postgres.
|
||||||
|
## Sur un serveur Oracle la connexion se fait par defaut via un compte externe "/"
|
||||||
|
## sur la base courante defini par la librairie "base".
|
||||||
|
##
|
||||||
|
## Si aucune erreur n est releve cette fontion retourne le code de sortie 0.
|
||||||
|
##
|
||||||
|
## IMPORTANT : Cette fonction utilise le disque virtuel /dev/shm pour construire les tableaux
|
||||||
|
##
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 8.0.7-0 - 10-02-2016 - Emmanuel Confrere - Integration au socle DTSI via Puppet
|
||||||
|
##----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function esql
|
||||||
|
{
|
||||||
|
local VAR_DB=""
|
||||||
|
local VAR_RES=$1
|
||||||
|
local VAR_CPT=$2
|
||||||
|
local VAR_TMP=""
|
||||||
|
local VAR_CNX=""
|
||||||
|
local VAR_SES=""
|
||||||
|
local VAR_LIGNE=""
|
||||||
|
local VAR_I=1
|
||||||
|
local PVF=${ESQL_SQLSTMT:${#ESQL_SQLSTMT}-1:1}
|
||||||
|
local VAR_TMP=""
|
||||||
|
local VAR_MDP=""
|
||||||
|
local VAR_CPT2=""
|
||||||
|
local VAR_ERR=0
|
||||||
|
local VAR_HOST=""
|
||||||
|
local VAR_PORT=""
|
||||||
|
local VAR_BASE=""
|
||||||
|
|
||||||
|
fct_message -debug 0 "<lib:esql> ## ---------------------- esql.lib sql submit -------------------- ##"
|
||||||
|
# -- On controle si l ordre SQL fini bien par ";", le cas echeans on ajoute ce caractere...
|
||||||
|
[ "${PVF}" = "/" -o "${PVF}" = ";" ] && PVF="" || PVF=";"
|
||||||
|
# -- On identifie une eventuelle chaine de connexion sur le premier argument
|
||||||
|
# -- si c est c est le cas, soit il y eu inversion des arguments, soit il n y a pas de nom de variable passe en argument
|
||||||
|
# -- Si dessous on echange les arguments dans tous les cas ...
|
||||||
|
if [ `expr match "${VAR_RES}" ".*/.*@.*$"` -ne 0 -o `expr match "${VAR_RES}" ".*/.*$"` -ne 0 -o `expr match "${VAR_RES}" "[a-z,A-Z][a-z,A-Z]*:.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_TMP="${VAR_RES}"
|
||||||
|
VAR_RES="${VAR_CPT}"
|
||||||
|
VAR_CPT="${VAR_TMP}"
|
||||||
|
fct_message -debug 0 "<lib:esql> Echange des parametre d entree"
|
||||||
|
fi
|
||||||
|
# -- identification de l editeur a partir du format de la chaine de connection
|
||||||
|
if [ `expr match "${VAR_CPT}" "[a-z]*:"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_DB=`echo ${VAR_CPT}|cut -d ":" -f1`
|
||||||
|
VAR_CPT=`echo ${VAR_CPT}|sed 's/[^:]*:\(.*$\)/\1/'`
|
||||||
|
else
|
||||||
|
VAR_DB=${NC_EXPL_DBEDITEUR}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Construction de la chaine de connexion en fontion de l editeur (VAR_CNX) et de la forme du parametre VAR_CPT
|
||||||
|
case "${VAR_DB}" in
|
||||||
|
"oracle" ) fct_message -debug 0 "<lib:esql> Connexion a une base Oracle"
|
||||||
|
if [ -z "${VAR_CPT}" ]
|
||||||
|
then
|
||||||
|
VAR_MDP="Aucun"
|
||||||
|
VAR_CPT2="/"
|
||||||
|
VAR_CNX="/"
|
||||||
|
VAR_SES="alter session set current_schema = zzsmai_adm;"
|
||||||
|
fct_message -debug 2 "<lib:esql> <1> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <1> Schema courant (VAR_SES) : ${VAR_SES}"
|
||||||
|
elif [ "${VAR_CPT}" = "/sys" ]
|
||||||
|
then
|
||||||
|
VAR_MDP="Aucun"
|
||||||
|
VAR_CPT2="/ as sysdba"
|
||||||
|
VAR_CNX="/ as sysdba"
|
||||||
|
fct_message -debug 2 "<lib:esql> <2> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
elif [ `expr match "${VAR_CPT}" "/sys//.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
fct_message "<lib:esql> format de connexion non supporte (VAR_CPT=${VAR_CPT})"
|
||||||
|
return 2
|
||||||
|
elif [ `expr match "${VAR_CPT}" ".*/.*@.*:[0-9][0-9]*//.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_BASE=`echo "${VAR_CPT}"|sed 's#.*/.*@.*:[0-9][0-9]*//\(.*\)$#\1#'`
|
||||||
|
VAR_HOST=`echo "${VAR_CPT}"|sed 's#.*/.*@\(.*\):[0-9][0-9]*//.*$#\1#'`
|
||||||
|
VAR_PORT=`echo "${VAR_CPT}"|sed 's#.*/.*@.*:\([0-9][0-9]*\)//.*$#\1#'`
|
||||||
|
VAR_CPT2=`echo "${VAR_CPT}"|sed 's#\(.*\)/.*@.*:[0-9][0-9]*//.*$#\1#'`
|
||||||
|
VAR_MDP=`echo "${VAR_CPT}"|sed 's#.*/\(.*\)@.*:[0-9][0-9]*//.*$#\1#'`
|
||||||
|
VAR_CNX="${VAR_CPT2}/${VAR_MDP}@${VAR_HOST}:${VAR_PORT}/${VAR_BASE}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <3> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
elif [ `expr match "${VAR_CPT}" ".*/.*@.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_HOST=`echo "${VAR_CPT}"|sed 's#.*/.*@\(.*\)$#\1#'`
|
||||||
|
VAR_CPT2=`echo "${VAR_CPT}"|sed 's#\(.*\)/.*@.*$#\1#'`
|
||||||
|
VAR_MDP=`echo "${VAR_CPT}"|sed 's#.*/\(.*\)@.*$#\1#'`
|
||||||
|
VAR_CNX="${VAR_CPT2}/${VAR_MDP}@${VAR_HOST}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <4> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
elif [ `expr match "${VAR_CPT}" ".*/.*//.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_HOST=`echo "${VAR_CPT}"|sed 's#.*/.*//\(.*\)$#\1#'`
|
||||||
|
VAR_CPT2=`echo "${VAR_CPT}"|sed 's#\(.*\)/.*//.*$#\1#'`
|
||||||
|
VAR_MDP=`echo "${VAR_CPT}"|sed 's#.*/\(.*\)//.*$#\1#'`
|
||||||
|
VAR_CNX="${VAR_CPT2}/${VAR_MDP}@${VAR_HOST}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <5> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
elif [ `expr match "${VAR_CPT}" ".*/.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_CPT2=`echo "${VAR_CPT}"|sed 's#\(.*\)/.*$#\1#'`
|
||||||
|
VAR_MDP=`echo "${VAR_CPT}"|sed 's#.*/\(.*\)$#\1#'`
|
||||||
|
VAR_CNX="${VAR_CPT2}/${VAR_MDP}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <6> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
else
|
||||||
|
fct_message "<lib:esql> Chaine de connexion non reconnu"
|
||||||
|
return 2
|
||||||
|
fi ;;
|
||||||
|
"postgres" ) fct_message -debug 0 "<lib:esql> Connexion a une base Postgres"
|
||||||
|
if [ -z "${VAR_CPT}" -o "${VAR_CPT}" = "/sys" ]
|
||||||
|
then
|
||||||
|
VAR_CPT2="postgres"
|
||||||
|
VAR_MDP="aucun"
|
||||||
|
VAR_CNX="postgres://"
|
||||||
|
fct_message -debug 2 "<lib:esql> <7> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
elif [ `expr match "${VAR_CPT}" "/sys//.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_BASE=`echo "${VAR_CPT}"|sed 's#^/sys//\(.*\)$#\1#'`
|
||||||
|
VAR_CPT2="postgres"
|
||||||
|
VAR_MDP="aucun"
|
||||||
|
VAR_CNX="postgres:///${VAR_BASE}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <8> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
elif [ `expr match "${VAR_CPT}" ".*/.*@.*:[0-9][0-9]*//.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_BASE=`echo "${VAR_CPT}"|sed 's#.*/.*@.*:[0-9][0-9]*//\(.*\)$#\1#'`
|
||||||
|
VAR_HOST=`echo "${VAR_CPT}"|sed 's#.*/.*@\(.*\):[0-9][0-9]*//.*$#\1#'`
|
||||||
|
VAR_PORT=`echo "${VAR_CPT}"|sed 's#.*/.*@.*:\([0-9][0-9]*\)//.*$#\1#'`
|
||||||
|
VAR_CPT2=`echo "${VAR_CPT}"|sed 's#\(.*\)/.*@.*:[0-9][0-9]*//.*$#\1#'`
|
||||||
|
VAR_MDP=`echo "${VAR_CPT}"|sed 's#.*/\(.*\)@.*:[0-9][0-9]*//.*$#\1#'`
|
||||||
|
VAR_CNX="postgres://${VAR_CPT2}:${VAR_MDP}@${VAR_HOST}:${VAR_PORT}/${VAR_BASE}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <9> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
elif [ `expr match "${VAR_CPT}" ".*/.*@.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_BASE=`echo "${VAR_CPT}"|sed 's#.*/.*@\(.*\)$#\1#'`
|
||||||
|
VAR_CPT2=`echo "${VAR_CPT}"|sed 's#\(.*\)/.*@.*$#\1#'`
|
||||||
|
VAR_MDP=`echo "${VAR_CPT}"|sed 's#.*/\(.*\)@.*$#\1#'`
|
||||||
|
VAR_CNX="postgres://${VAR_CPT2}:${VAR_MDP}@localhost/${VAR_BASE}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <10> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
elif [ `expr match "${VAR_CPT}" ".*/.*//.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_BASE=`echo "${VAR_CPT}"|sed 's#.*/.*//\(.*\)$#\1#'`
|
||||||
|
VAR_CPT2=`echo "${VAR_CPT}"|sed 's#\(.*\)/.*//.*$#\1#'`
|
||||||
|
VAR_MDP=`echo "${VAR_CPT}"|sed 's#.*/\(.*\)//.*$#\1#'`
|
||||||
|
VAR_CNX="postgres://${VAR_CPT2}:${VAR_MDP}@localhost/${VAR_BASE}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <11> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
elif [ `expr match "${VAR_CPT}" ".*/.*$"` -ne 0 ]
|
||||||
|
then
|
||||||
|
VAR_BASE=`echo "${VAR_CPT}"|sed 's#\(.*\)/.*$#\1#'`
|
||||||
|
VAR_CPT2=${VAR_BASE}
|
||||||
|
VAR_MDP=`echo "${VAR_CPT}"|sed 's#.*/\(.*\)$#\1#'`
|
||||||
|
VAR_CNX="postgres://${VAR_CPT2}:${VAR_MDP}@localhost/${VAR_BASE}"
|
||||||
|
fct_message -debug 2 "<lib:esql> <12> Chaine de connexion (VAR_CNX) : ${VAR_CNX}"
|
||||||
|
else
|
||||||
|
fct_message "<lib:esql> Chaine de connexion non reconnu"
|
||||||
|
return 2
|
||||||
|
fi ;;
|
||||||
|
* ) fct_message "<lib:esql> Editeur inconnu : ${VAR_DB}"
|
||||||
|
return 3 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -n "${ESQL_SQLSTMT}" ]
|
||||||
|
then
|
||||||
|
fct_message -debug 0 "<lib:esql> Compte de soumission : ${VAR_CPT2}"
|
||||||
|
fct_message -debug 3 "<lib:esql> Mot de passe : ${VAR_MDP}"
|
||||||
|
fct_message -debug 0 "<lib:esql> ${ESQL_SQLSTMT}${PVF}"
|
||||||
|
case "${VAR_DB}" in
|
||||||
|
"oracle" ) VAR_TMP=`sqlplus -s ${VAR_CNX} << EndSQL
|
||||||
|
whenever sqlerror exit 100 rollback;
|
||||||
|
whenever oserror exit 101 rollback;
|
||||||
|
set head off pages 0 feed off echo off lines 2048 trim on verify off;
|
||||||
|
${VAR_SES}
|
||||||
|
${ESQL_SQLSTMT}${PVF}
|
||||||
|
EndSQL`
|
||||||
|
VAR_ERR=$? ;;
|
||||||
|
"postgres" ) VAR_TMP=`psql -t -q -F "|" -A ${VAR_CNX} << EndSQL
|
||||||
|
${ESQL_SQLSTMT}${PVF}
|
||||||
|
EndSQL`
|
||||||
|
VAR_ERR=$? ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ ${VAR_ERR} -ne 0 ]
|
||||||
|
then
|
||||||
|
export ESQL_NUMROWS=0
|
||||||
|
[ -n "${SH_SESSION_ID}" ] && fct_message -debug 0 "<lib:esql> ${VAR_TMP}" || echo "${VAR_TMP}"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
[ -z "${VAR_TMP}" ] && ESQL_NUMROWS=0 || ESQL_NUMROWS=`echo "${VAR_TMP}"|wc -l`
|
||||||
|
fct_message -debug 0 "<lib:esql> ESQL_NUMROWS=${ESQL_NUMROWS}"
|
||||||
|
export ESQL_NUMROWS
|
||||||
|
fct_message -debug 2 "<lib:esql> ## ---------------------- esql.lib result set -------------------- ##"
|
||||||
|
if [ -n "${VAR_RES}" ]
|
||||||
|
then
|
||||||
|
eval unset ${VAR_RES}
|
||||||
|
[ ${ESQL_NUMROWS} -eq 0 ] && eval ${VAR_RES}=""
|
||||||
|
[ ${ESQL_NUMROWS} -eq 1 ] && eval ${VAR_RES}=\"${VAR_TMP}\"
|
||||||
|
[ ${ESQL_NUMROWS} -eq 1 -a -n "${SH_SESSION_ID}" ] && fct_message -debug 2 "<lib:esql> ${VAR_TMP}"
|
||||||
|
if [ ${ESQL_NUMROWS} -gt 1 ]
|
||||||
|
then
|
||||||
|
VAR_I=0
|
||||||
|
echo "${VAR_TMP}" > /dev/shm/sql$$.tmp
|
||||||
|
while read VAR_LIGNE
|
||||||
|
do
|
||||||
|
VAR_LIGNE=`echo ${VAR_LIGNE}|sed 's/ */ /g'`
|
||||||
|
[ -n "${SH_SESSION_ID}" ] && fct_message -debug 2 "<lib:esql> ${VAR_LIGNE}"
|
||||||
|
eval ${VAR_RES}[${VAR_I}]=\"${VAR_LIGNE}\"
|
||||||
|
(( VAR_I++ ))
|
||||||
|
done < /dev/shm/sql$$.tmp
|
||||||
|
rm -f /dev/shm/sql$$.tmp
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
[ ${ESQL_NUMROWS} -ne 0 ] && echo "${VAR_TMP}"
|
||||||
|
fi
|
||||||
|
fct_message -debug 0 "<lib:esql> ## --------------------------------------------------------------- ##"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
typeset -Ffx esql
|
69
lib/format-ligne.lib
Executable file
69
lib/format-ligne.lib
Executable file
@ -0,0 +1,69 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : format_ligne.lib
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 10-02-2016
|
||||||
|
## Version : 1.0.0
|
||||||
|
## Objet : Permet de formater le texte dans la fonction fct_affiche_ligne.
|
||||||
|
##
|
||||||
|
## Fonction : fct_format Texte taille justification
|
||||||
|
##
|
||||||
|
## Detail : Ne pas appeler directement.
|
||||||
|
##
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 10-02-2016 - Emmanuel Confrere - Creation : Reprise du script du socle Oracle
|
||||||
|
##----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function fct_format
|
||||||
|
{
|
||||||
|
local L_TEXT="$1"
|
||||||
|
local L_TAILLE=$2
|
||||||
|
local L_JUSTIFIER=$3
|
||||||
|
local L_TMP=""
|
||||||
|
local L_TMP2=""
|
||||||
|
local L_RESULT=""
|
||||||
|
local L_REPETITION=0
|
||||||
|
|
||||||
|
case "${L_JUSTIFIER}" in
|
||||||
|
"r" ) L_TMP=1
|
||||||
|
L_REPETITION=$(( ${L_TAILLE} / ${#L_TEXT} + 1))
|
||||||
|
while [ ${L_TMP} -le ${L_REPETITION} ]
|
||||||
|
do
|
||||||
|
L_RESULT="${L_RESULT}${L_TEXT}"
|
||||||
|
L_TMP=$(( ${L_TMP} + 1 ))
|
||||||
|
done ;;
|
||||||
|
"c" ) L_TMP=1
|
||||||
|
L_REPETITION=$(( ${L_TAILLE} - ${#L_TEXT} ))
|
||||||
|
L_REPETITION=$(( ${L_REPETITION} / 2 ))
|
||||||
|
L_TMP2=$(( ${L_TAILLE} - ${#L_TEXT} - ${L_REPETITION} ))
|
||||||
|
while [ ${L_TMP} -le ${L_REPETITION} -a ${L_REPETITION} -gt 0 ]
|
||||||
|
do
|
||||||
|
L_RESULT="${L_RESULT} "
|
||||||
|
L_TMP=$(( ${L_TMP} + 1 ))
|
||||||
|
done
|
||||||
|
if [ ${L_REPETITION} -gt 0 ]
|
||||||
|
then
|
||||||
|
if [ ${L_REPETITION} -eq ${L_TMP2} ]
|
||||||
|
then
|
||||||
|
L_RESULT="${L_RESULT}${L_TEXT}${L_RESULT}"
|
||||||
|
else
|
||||||
|
L_RESULT="${L_RESULT}${L_TEXT}${L_RESULT} "
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
L_RESULT="${L_TEXT}"
|
||||||
|
fi ;;
|
||||||
|
"d" ) L_TMP=1
|
||||||
|
L_REPETITION=$(( ${L_TAILLE} - ${#L_TEXT} ))
|
||||||
|
while [ ${L_TMP} -le ${L_REPETITION} -a ${L_REPETITION} -gt 0 ]
|
||||||
|
do
|
||||||
|
L_RESULT="${L_RESULT} "
|
||||||
|
L_TMP=$(( ${L_TMP} + 1 ))
|
||||||
|
done
|
||||||
|
L_RESULT="${L_TEXT}${L_RESULT}" ;;
|
||||||
|
esac
|
||||||
|
L_RESULT=${L_RESULT:0:${L_TAILLE}}
|
||||||
|
echo ${L_RESULT}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
typeset -Ffx fct_format
|
47
lib/gen-mdp.lib
Executable file
47
lib/gen-mdp.lib
Executable file
@ -0,0 +1,47 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : gen-mdp.lib
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 10-02-2016
|
||||||
|
## Version : 1.0.0
|
||||||
|
## Objet : Genration d un mots depasse aleatoire
|
||||||
|
##
|
||||||
|
## Fonction : fct_gen_mdp
|
||||||
|
##
|
||||||
|
## Detail :
|
||||||
|
##
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 10-02-2016 - Emmanuel Confrere - Creation : Reprise du script du socle Oracle
|
||||||
|
##----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function fct_gen_mdp
|
||||||
|
{
|
||||||
|
local L_CARACTERES="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
||||||
|
local L_CHIFFRES="1234567890"
|
||||||
|
local L_SPECCAR="-=:#+_"
|
||||||
|
local L_MDP=""
|
||||||
|
local L_TMP=""
|
||||||
|
local L_CPT=1
|
||||||
|
local L_LONGUEUR=9
|
||||||
|
local L_SIMPLE="non"
|
||||||
|
|
||||||
|
[ "$1" = "-ns" ] && L_SPECCAR=""
|
||||||
|
[ -z "$1" -a "$1" != "-ns" ] && L_SIMPLE="oui"
|
||||||
|
|
||||||
|
L_MDP=${L_CARACTERES:$(( $RANDOM % ${#L_CARACTERES} )):1}
|
||||||
|
L_TMP="${L_CARACTERES}${L_SPECCAR}${L_CHIFFRES}${L_SPECCAR}${L_CHIFFRES}${L_SPECCAR}${L_CHIFFRES}"
|
||||||
|
if [ -z "$1" -a "$1" != "-ns" ]
|
||||||
|
then
|
||||||
|
while [ ${L_CPT} -le ${L_LONGUEUR} ]
|
||||||
|
do
|
||||||
|
L_MDP="${L_MDP}${L_TMP:$(( $RANDOM % ${#L_TMP} )):1}"
|
||||||
|
((L_CPT++))
|
||||||
|
done
|
||||||
|
else
|
||||||
|
L_MDP=`echo $1|md5sum|sed 's/ *//g;s/-$//;s/[0-9]*\([a-f][a-f,0-9]*\)/\1/'|cut -c1-9`
|
||||||
|
fi
|
||||||
|
echo ${L_MDP}
|
||||||
|
}
|
||||||
|
|
||||||
|
typeset -Ffx fct_gen_mdp
|
153
lib/message.lib
Executable file
153
lib/message.lib
Executable file
@ -0,0 +1,153 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## 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 "+%x %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}] : <Debug_${L_NIV_DEBUG}> ${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
|
580
lib/params.lib
Executable file
580
lib/params.lib
Executable file
@ -0,0 +1,580 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : params.lib
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 05-07-2017
|
||||||
|
## Version : 2.2.2
|
||||||
|
## Objet : Gere les options passees a un script
|
||||||
|
## qui ont ete declare dans l entete de ce dernier
|
||||||
|
##
|
||||||
|
## Fonction : fct_param
|
||||||
|
##
|
||||||
|
## Detail : Cette fonction est appele par le chargement de init.conf
|
||||||
|
## Elle analyse traite les parametres passes a la commande en correlation
|
||||||
|
## avec ceux declares dans l entete du script.
|
||||||
|
##
|
||||||
|
## Cette fonction prend en charge les option -h -s, -dbg N, -hist [N], -log [Sid], -cpt [Sid]
|
||||||
|
## qui n on t pas besoins d etre declare.
|
||||||
|
##
|
||||||
|
## -h : Affiche l aide du script
|
||||||
|
## -s : mode silence (Pas d affichage sur la console)
|
||||||
|
## -dbg N : Passe mode debug de niveau N
|
||||||
|
## -hist : Affiche l historique des N dernieres execution (N vaut 1 par defaut)
|
||||||
|
## -log : Affiche le dernier journal d execution ou celui specifier par le numero de session d'execution
|
||||||
|
## -cpt : Affiche le dernier compte-rendus ou celui specifier par le numero de session d'execution
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 22-08-2016 - Emmanuel Confrere - Cre : Creation
|
||||||
|
# 1.0.1 23-08-2016 - Emmanuel Confrere - Ano : Expension des variables imcomptible en version Bash 3.2.25 sur deploiement
|
||||||
|
# 1.1.0 24-08-2016 - Emmanuel Confrere - Evo : Ajout de la gestion des arguments sans option
|
||||||
|
# 1.1.1 24-08-2016 - Emmanuel Confrere - Ano : Changement des variable du socle NC_EXPL_ -> NC_EXPL
|
||||||
|
# 1.1.2 24-08-2016 - Emmanuel Confrere - Ano : libelle des erreurs 11 et 10
|
||||||
|
# 1.1.3 24-08-2016 - Emmanuel Confrere - Ano : Libelle de l erreur 11 erronee
|
||||||
|
# 1.1.4 24-08-2016 - Emmanuel Confrere - Evo : Ajout de la diponibilite d un compte rendu
|
||||||
|
# Ajout de l option par defaut cpt
|
||||||
|
# 1.1.5 25-08-2016 - Emmanuel Confrere - Ano : Option -hist : ne pas affiche la session en cours
|
||||||
|
# 2.0.0 29-08-2016 - Emmanuel Confrere - Evo : Les booleen sont desorme traduit par 0 ou 1 (Faux ou Vraix)
|
||||||
|
# 2.0.1 11-10-2016 - Emmanuel Confrere - Evo : Ajout de commentaire dans le code
|
||||||
|
# 2.0.2 17-11-2016 - Emmanuel Confrere - Ano : Comportement de la gestion des arguments incoherent.
|
||||||
|
# 2.1.0 21-11-2016 - Emmanuel Confrere - Evo : Ajout d un controle : Liste de valeurs determinees pour les arguments d une option
|
||||||
|
# ou pour les arguments du script (valeur separee par une virgule ou un espace)
|
||||||
|
# 2.1.1 30-03-2017 - Emmanuel Confrere - Ano : Interpretation des arguments par Bash ! Cf. DBA-2455
|
||||||
|
# 2.2.0 13-04-2017 - Emmanuel Confrere - Evo : Prise en compte de la journalisation du compte d execution dans l historique
|
||||||
|
# 2.2.1 13-04-2017 - Emmanuel Confrere - Ano : Prise en compte de la journalisation avec l option -log
|
||||||
|
# Compatibilite ascendente n etait pas assuree.
|
||||||
|
# 2.2.2 05-07-2017 - Emmanuel Confrere - Ano : Lorsque des option possede une inclusion la librairie entre dans une boucle infinie !
|
||||||
|
##----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function fct_params
|
||||||
|
{
|
||||||
|
local L_PROG=${SH_DIR}/${SH_PROG} # Nom absolu du script
|
||||||
|
local L_IDX=0 # Index de position de l option dans la declaration
|
||||||
|
local L_IDX2=0 # Index de position de l option dans la declaration
|
||||||
|
local L_PARAM="" # Ligne de declaration
|
||||||
|
local L_PARAM_ARGS="" # Ligne de declaration pour un argument sans option
|
||||||
|
local L_PARAM_ARGS_DEF=0 # Detection d un arguments de script defini par defaut (0=non, 1=oui)
|
||||||
|
local L_PARAM_ARGS_CTL="" # Liste des valeurs possible pour les arguments du scripts
|
||||||
|
local L_PARMF="" # Fichier contenant l extraction de la declaration
|
||||||
|
local L_OPT_OBLIGATOIRE="" # Liste des options obligatoire separees par " "
|
||||||
|
local L_VAR="" # Nom de la variable contenant les argument
|
||||||
|
local L_VAL="" # Valeur de l argument
|
||||||
|
local L_DEFARG="" # Valeur par defaut d un argument
|
||||||
|
local L_OPTSET=0 # Map binaire des option positionnees
|
||||||
|
local L_OPTEXCLUDE="" # Map binaire des option mutuellement execlusive
|
||||||
|
local L_OPTINCLUDE=0 # Tableau de map binaire qui pour chaque option fourni la liste des options inclusive
|
||||||
|
local L_OPTINC=0 # Map binaire des options pocedant une liste d inclusion
|
||||||
|
local L_OPTINCONNU="" # Liste des options non reconnu
|
||||||
|
local L_OPTARGS_CTL="" # Liste des valeurs possible pour les arguments d une option
|
||||||
|
local L_OPTDEF=0 # detection d une valeur par defaut pour une option (0=non, 1=oui)
|
||||||
|
local L_NB_MINARG=0 # Nombre d argument obligatoire
|
||||||
|
local L_NB_MAXARG=0 # Nombre d argument max
|
||||||
|
local L_NB_ARG=0 # Indexe
|
||||||
|
local L_OPTMAJ="non" # Option de mise en majuscule des arguments
|
||||||
|
local L_TMP="" # Variable temporaire a tout faire ;-)
|
||||||
|
local L_ERREUR=0 # Detection des erreurs
|
||||||
|
local L_ERREUR_MSG="" # Table de libelle d erreur
|
||||||
|
local L_OPT_NOM="" # Tableau des option declare
|
||||||
|
local L_UORI="" # Utilisateur a l origine de la demande d execution du script
|
||||||
|
local L_UEXE="" # Utilisateur sous lequel s execute le script
|
||||||
|
|
||||||
|
# -- Le srcipt doit etre defini, pour lire la declaration des options !!
|
||||||
|
# -- Il s agit d une securite au cas ou "init.conf" n aurais pas ete sourcee
|
||||||
|
if [ -z "${L_PROG}" ]
|
||||||
|
then
|
||||||
|
fct_message -color rouge "<lib:fct_params> Le nom du script Bash n est pas defini"
|
||||||
|
fct_erreur 254
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Extraction des options de la declaration
|
||||||
|
# -- ----------------------------------------
|
||||||
|
# -- Definition d un fichier tempon ( ${L_PARMF} ) pour acceuillir l entete du script contenant la declaration
|
||||||
|
# -- des options. Comme ce fichier va etre parcouru souvent, on le charge en RAM disque de preference ( sur /dev/shm).
|
||||||
|
# -- Le nom du fichier tempon sera le nom du script suffixee par ".parms" en lieu et place de ".sh"
|
||||||
|
L_PARMF=`echo ${SH_PROG}|sed "s/\.sh$/_${SH_SESSION_ID}\.parms/"`
|
||||||
|
[ -d /dev/shm ] && L_PARMF="/dev/shm/${L_PARMF}" || L_PARMF="/tmp/${L_PARMF}"
|
||||||
|
> ${L_PARMF}
|
||||||
|
|
||||||
|
# -- Extraction de la declaration des arguments du script et affectation de la valeur par defaut
|
||||||
|
# -- Il s agit de recuperer les lignes de l entete du script qui commence par "# ARG:"
|
||||||
|
L_PARAM_ARGS=`grep -E "^# *@ARG:" ${L_PROG}|head -1|sed "s/# *@ARG: *\([^ #]*\).*$/\1/"`
|
||||||
|
if [ -n "${L_PARAM_ARGS}" ]
|
||||||
|
then
|
||||||
|
# -- Un arguments a ete declare on initialise la valeur par defaut
|
||||||
|
L_DEFARG=`echo ${L_PARAM_ARGS}|cut -d: -f4`
|
||||||
|
L_VAR=`echo ${L_PARAM_ARGS}|cut -d: -f2`
|
||||||
|
# -- detection d une valeur par defaut pour l argument du script
|
||||||
|
# -- La variable L_PARAM_ARGS_DEF sera utilise pour ecraser le parametre par defaut si ce dernier a ete soumis au script
|
||||||
|
[ -n "${L_DEFARG}" ] && L_PARAM_ARGS_DEF=1 || L_PARAM_ARGS_DEF=0
|
||||||
|
# -- initialisation de la valeur par defaut
|
||||||
|
[ -n "${L_VAR}" -a -n "${L_DEFARG}" ] && eval ${L_VAR}=\"${L_DEFARG}\"
|
||||||
|
[ -z "${L_VAR}" -a -n "${L_DEFARG}" ] && eval SH_ARGS=\"${L_DEFARG}\"
|
||||||
|
# -- On recupere la liste des valeurs possibles pour les arguments du script
|
||||||
|
L_PARAM_ARGS_CTL=`echo ${L_PARAM_ARGS}|cut -d: -f5`
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Extraction de la declaration des options de l entete du script, et chargement dans le fichier tampon
|
||||||
|
L_IDX=0
|
||||||
|
grep -E "^# *@OPT:" ${L_PROG}|sed "s/# *@OPT: *\([^ #]*\).*$/\1/" > ${L_PARMF}
|
||||||
|
|
||||||
|
# -- Si aucun parametre n est declare dans l entete du script alors on laise le script gere lui meme les parametres d entree
|
||||||
|
# -- Cette partie de code est temporaire le temps qe les scripts existant adopte cette librairie. Le probleme c est
|
||||||
|
# -- que les options par defaut (-h,-s ...) ne seront pas gere pour un scripts qui n a pas d option, pour contourner ce probleme
|
||||||
|
# -- Il faut declarer une oprion bidon dans l entete du script
|
||||||
|
# -- On compte le nombre d option declaree :
|
||||||
|
L_IDX=`wc -l ${L_PARMF}|awk '{print $1}'`
|
||||||
|
if [ ${L_IDX} -eq 0 ]
|
||||||
|
then
|
||||||
|
# Pas d option declaree, on supprime le fichier tempon et on sort
|
||||||
|
[ -f ${L_PARMF} -a -n "${L_PARMF}" ] && rm -f ${L_PARMF}
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Ajouter a cette liste les options pris en charge par defaut
|
||||||
|
# -- -h, -s, -dbg, -log et -hist
|
||||||
|
for L_PARAM in "fb:h::0::::" "fb:s::0::::" "fn:dbg:SH_NIV_DEBUG:1::::" "fb:log:SH_ARG_LOG:0/1::::" "fn:hist:SH_ARG_HIST:0/1:10:::" "fb:cpt:SH_ARG_CPT:0/1::::"
|
||||||
|
do
|
||||||
|
echo "${L_PARAM}" >> ${L_PARMF}
|
||||||
|
done
|
||||||
|
|
||||||
|
# -- Initialisation des variables
|
||||||
|
# -- On parcours la liste des options declarees qui a ete extraite precedement.
|
||||||
|
# -- Puis on initialise les variables qui servirons de comparaison par la suite
|
||||||
|
# -- avec les options soumis au script...
|
||||||
|
L_IDX=0
|
||||||
|
while read L_PARAM
|
||||||
|
do
|
||||||
|
L_OPT_LIGNE[${L_IDX}]=${L_PARAM} # -- Ligne de parametre d une option
|
||||||
|
L_OPT_NOM[${L_IDX}]=`echo ${L_PARAM}|cut -d: -f2` # -- Nom de l option en cours de taritement
|
||||||
|
eval SH_OPTION_${L_OPT_NOM[${L_IDX}]}=0 # -- Par defaut on intialise l indicateur d utilisation d une option a faux (0)
|
||||||
|
|
||||||
|
# -- On verifie que la declaration comporte bien 7 ou 8 champs
|
||||||
|
L_TMP=`echo ${L_PARAM}|sed 's/[^:]//g'`
|
||||||
|
if [ ${#L_TMP} -lt 6 -o ${#L_TMP} -gt 7 ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[1]="<lib:fct_params> La declaration de l option \"${L_OPT_NOM[${L_IDX}]}\" ne comporte pas le nopmbre de champs requis (7 ou 8)"
|
||||||
|
L_ERREUR=1
|
||||||
|
else
|
||||||
|
[ `echo ${L_PARAM}|cut -d: -f1|grep -c "o"` -eq 1 ] && L_OPT_OBLIGATOIRE="${L_OPT_OBLIGATOIRE}${L_OPT_NOM[${L_IDX}]}:${L_IDX} "
|
||||||
|
# -- On controle que la declarartion est bien unique
|
||||||
|
L_TMP=L_POS_${L_OPT_NOM[${L_IDX}]}
|
||||||
|
if [ -n "${!L_TMP}" ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[2]="<lib:fct_params> Declaration dupliquee de l option : ${L_OPT_NOM[${L_IDX}]}"
|
||||||
|
L_ERREUR=2
|
||||||
|
else
|
||||||
|
eval ${L_TMP}=${L_IDX}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Valeur par defaut pour les parametres non booleen
|
||||||
|
L_VAR=`echo ${L_PARAM}|cut -d: -f3`
|
||||||
|
L_DEFARG=`echo ${L_PARAM}|cut -d: -f5`
|
||||||
|
|
||||||
|
if [ `echo ${L_PARAM}|cut -d: -f1|grep -c "b"` -eq 0 -a -n "${L_DEFARG}" ]
|
||||||
|
then
|
||||||
|
if [ -z "${L_VAR}" ]
|
||||||
|
then eval SH_ARG_${L_OPT_NOM[${L_IDX}]}=\"${L_DEFARG}\"
|
||||||
|
else eval ${L_VAR}=\"${L_DEFARG}\"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
((L_IDX++))
|
||||||
|
done < ${L_PARMF}
|
||||||
|
|
||||||
|
# -- Le fichier tempon ${L_PARMF} n est plus utile
|
||||||
|
[ -f ${L_PARMF} -a -n "${L_PARMF}" ] && rm -f ${L_PARMF}
|
||||||
|
|
||||||
|
# -- Calcul des exclusions et inclusion
|
||||||
|
# -- ----------------------------------
|
||||||
|
L_IDX=0
|
||||||
|
while [ ${L_IDX} -le ${#L_OPT_NOM[*]} ]
|
||||||
|
do
|
||||||
|
# -- Option mutuellement exclusive
|
||||||
|
L_PARAM=`echo ${L_OPT_LIGNE[${L_IDX}]}|cut -d: -f6|sed 's/,/ /g'`
|
||||||
|
if [ -n "${L_PARAM}" ]
|
||||||
|
then
|
||||||
|
# -- Une liste d exclusion a ete defini pour cette option
|
||||||
|
# -- On contruit un Bitmap listant les options incompatibles
|
||||||
|
for L_TMP in ${L_PARAM}
|
||||||
|
do
|
||||||
|
eval L_IDX2=\${L_POS_${L_TMP}}
|
||||||
|
if [ -z "${L_IDX2}" ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[3]="<lib:fct_params> L option ${L_TMP} declaree dans la liste d exclusion de l option ${L_OPT_NOM[${L_IDX}]} est inconnu"
|
||||||
|
L_ERREUR=3
|
||||||
|
else
|
||||||
|
L_OPTEXCLUDE="${L_OPTEXCLUDE} ${L_OPT_NOM[${L_IDX}]},${L_TMP}:$(( 2 ** ${L_IDX2} + 2 ** ${L_IDX} ))"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
# -- Option inclusive
|
||||||
|
L_PARAM=`echo ${L_OPT_LIGNE[${L_IDX}]}|cut -d: -f7|sed 's/,/ /g'`
|
||||||
|
if [ -n "${L_PARAM}" ]
|
||||||
|
then
|
||||||
|
# -- Une liste d inclusion a ete defini pour cette option
|
||||||
|
# -- On contruit un Bitmap listant les options obligatoire qui doivent etre position avec l option L_IDX
|
||||||
|
# -- Map des option qui declare une inclusion
|
||||||
|
L_OPTINC=$(( 2 ** ${L_IDX} + ${L_OPTINC} ))
|
||||||
|
L_VAL=0
|
||||||
|
for L_TMP in ${L_PARAM}
|
||||||
|
do
|
||||||
|
eval L_IDX2=\${L_POS_${L_TMP}}
|
||||||
|
if [ -z "${L_IDX2}" ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[4]="<lib:fct_params> L option ${L_TMP} declaree dans la liste d inclusion de l option ${L_OPT_NOM[${L_IDX}]} est inconnu"
|
||||||
|
L_ERREUR=4
|
||||||
|
else
|
||||||
|
L_VAL=$(( 2 ** ${L_IDX2} + ${L_VAL} ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
L_PARAM=`echo ${L_PARAM}|sed 's/ /,/g'`
|
||||||
|
L_OPTINCLUDE[${L_IDX}]="${L_PARAM}:${L_VAL}"
|
||||||
|
fi
|
||||||
|
(( L_IDX++ ))
|
||||||
|
done
|
||||||
|
|
||||||
|
# -- Analyse des options et argument sousmis au script
|
||||||
|
# -- -------------------------------------------------
|
||||||
|
# -- Si une erreur a ete detecte dans les declaration ont ne fait pas l analyse
|
||||||
|
if (( ! ${L_ERREUR} ))
|
||||||
|
then
|
||||||
|
# -- Aucune option sousmise ?
|
||||||
|
# -- si oui, on verifie l existance d option obligatoire puis on sort...
|
||||||
|
if [ ${#} -eq 0 -a ${#L_OPT_OBLIGATOIRE} -gt 0 ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[5]="Au moins une des options suivante est requise : `echo ${L_OPT_OBLIGATOIRE}|sed 's/:[0-9]*//g'`"
|
||||||
|
L_ERREUR=5
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Pas d erreur detecte dans la declarartion des options. On peut continuer ...
|
||||||
|
while [ ${#} -gt 0 ]
|
||||||
|
do
|
||||||
|
# -- Des options ont ete utilisees ...
|
||||||
|
# -- Lecture de la ligne de commande
|
||||||
|
if [ ${1:0:1} = "-" ]
|
||||||
|
then
|
||||||
|
# -- Nous sommes en presence d une option
|
||||||
|
# -- L option a t elle ete declaree ?
|
||||||
|
if [ `echo ${L_OPT_NOM[*]}|grep -cw ${1:1}` -eq 0 ]
|
||||||
|
then
|
||||||
|
# -- L option n a pas ete declare dans l entete du script
|
||||||
|
L_OPTINCONNU="${L_OPTINCONNU}${1:1} "
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
eval L_IDX=\${L_POS_${1:1}}
|
||||||
|
L_OPTSET=$(( ${L_OPTSET} + 2 ** ${L_IDX} ))
|
||||||
|
eval SH_OPTION_${L_OPT_NOM[${L_IDX}]}=1
|
||||||
|
|
||||||
|
# -- Recuperation des arguments de l option
|
||||||
|
# -- Nombre d argument pour cette option ?
|
||||||
|
L_NB_ARG=0
|
||||||
|
L_NB_MINARG=`echo ${L_OPT_LIGNE[${L_IDX}]}|cut -d: -f4`
|
||||||
|
if [ `echo ${L_NB_MINARG}|grep -c "/"` -eq 0 ]
|
||||||
|
then
|
||||||
|
# -- Seul le nombre max d argument a ete renseigne ( ou pas si L_NB_MINARG est vide )
|
||||||
|
[ -z "${L_NB_MINARG}" ] && L_NB_MAXARG=-1 || L_NB_MAXARG=$(( ${L_NB_MINARG} - 1 ))
|
||||||
|
L_NB_MINARG=0
|
||||||
|
else
|
||||||
|
# -- le nombre de agument est declare sous la forme "min/max"
|
||||||
|
L_NB_MAXARG=$(( ${L_NB_MINARG#*/} - 1 ))
|
||||||
|
# -- Si la forme declare est "nim/" alors L_NB_MAXARG vaut -1
|
||||||
|
# -- dans ce cas on considere le nombre d argument infini (999999)
|
||||||
|
(( ! ${L_NB_MAXARG} + 1 )) && L_NB_MAXARG=999999
|
||||||
|
L_NB_MINARG=${L_NB_MINARG%/*}
|
||||||
|
fi
|
||||||
|
# -- Existe t-il une liste de valeurs possible pour les argument de cette option ?
|
||||||
|
L_OPTARGS_CTL=`echo ${L_OPT_LIGNE[${L_IDX}]}|cut -d: -f8`
|
||||||
|
|
||||||
|
# -- Les argument doivent il etre transforme en majuscule ?
|
||||||
|
[ `echo ${L_OPT_LIGNE[${L_IDX}]}|cut -d: -f1|grep -c "M"` -eq 1 ] && L_OPTMAJ="oui" || L_OPTMAJ="non"
|
||||||
|
# -- Recuparation du nom de la variable qui va contenir les argument
|
||||||
|
L_VAR=`echo ${L_OPT_LIGNE[${L_IDX}]}|cut -d: -f3`
|
||||||
|
[ -z "${L_VAR}" ] && L_VAR="SH_ARG_${L_OPT_NOM[${L_IDX}]}"
|
||||||
|
# -- Lecture des arguments ...
|
||||||
|
while [ ${L_NB_ARG} -le ${L_NB_MAXARG} ]
|
||||||
|
do
|
||||||
|
[ "${L_OPTMAJ}" = "oui" ] && L_VAL=`echo ${2}|tr a-z A-Z` || L_VAL="$2"
|
||||||
|
if [ "${L_VAL:0:1}" = "-" -o -z "${L_VAL}" ]
|
||||||
|
then
|
||||||
|
# -- Option suivante ou fin de ligne !!
|
||||||
|
if [ ${L_NB_ARG} -lt ${L_NB_MINARG} ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[6]="L option \"${L_OPT_NOM[${L_IDX}]}\" attend ${L_NB_MINARG} argument(s) a minima"
|
||||||
|
L_ERREUR=6
|
||||||
|
|
||||||
|
fi
|
||||||
|
break
|
||||||
|
else
|
||||||
|
# -- Ici on pourrais valider la concordance des types ...
|
||||||
|
|
||||||
|
# -- Control de la valeur si une liste de valeurs possible a ete defini pour cette option
|
||||||
|
if (( ${#L_OPTARGS_CTL} ))
|
||||||
|
then
|
||||||
|
# -- Une liste a ete defini, la valeur de l argument courant est-elle presente ?
|
||||||
|
if (( ! `echo "${L_OPTARGS_CTL}"|grep -cw "${L_VAL}"` ))
|
||||||
|
then
|
||||||
|
# -- la valeur n est pas presente dans la liste !!
|
||||||
|
L_ERREUR_MSG[12]="L argument \"${L_VAL}\" n est pas valide pour l option ${L_OPT_NOM[${L_IDX}]} ( Argument attendu : ${L_OPTARGS_CTL})\n"
|
||||||
|
L_ERREUR=12
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Valorisation de la variable d accueil
|
||||||
|
if [ ${L_NB_MAXARG} -eq 0 ]
|
||||||
|
then
|
||||||
|
# -- Un seul argument est attendu
|
||||||
|
eval ${L_VAR}=\"${L_VAL}\"
|
||||||
|
else
|
||||||
|
# -- Plusieurs arguments sont attendu ... On initialise un tableau
|
||||||
|
eval ${L_VAR}[${L_NB_ARG}]=\"${L_VAL}\"
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
((L_NB_ARG++))
|
||||||
|
done
|
||||||
|
else
|
||||||
|
# -- Nous somme en presence d un argument
|
||||||
|
# -- On verifier que l argument a ete declare
|
||||||
|
if (( ${#L_PARAM_ARGS} ))
|
||||||
|
then
|
||||||
|
# -- Nom de la variable d acceuille des arguments
|
||||||
|
L_VAR=`echo ${L_PARAM_ARGS}|cut -d: -f2`
|
||||||
|
[ -z "${L_VAR}" ] && L_VAR="SH_ARGS"
|
||||||
|
# -- Les argument doivent il etre transforme en majuscule ?
|
||||||
|
[ `echo ${L_PARAM_ARGS}|cut -d: -f1|grep -c "M"` -eq 1 ] && L_VAL=`echo ${1}|tr a-z A-Z` || L_VAL=$1
|
||||||
|
# -- la valeur de l argument est-elle presente dans la liste des valeurs possible (si cette liste a ete defini)
|
||||||
|
if (( ${#L_PARAM_ARGS_CTL} ))
|
||||||
|
then
|
||||||
|
if (( ! `echo "${L_PARAM_ARGS_CTL}"|grep -cw "${L_VAL}"` ))
|
||||||
|
then
|
||||||
|
# -- la valeur n est pas presente dans la liste !!
|
||||||
|
L_ERREUR_MSG[12]="L argument \"${L_VAL}\" n est pas valide pour ce script ( Argument attendu : ${L_PARAM_ARGS_CTL})\n"
|
||||||
|
L_ERREUR=12
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# -- Initialisation de la variable d acceuille en fonction de la taille courante du tableau
|
||||||
|
# -- Taille courante du tableau accueillant les arguments moins l arguments par defaut ( On ecrase l argument positionne par defaut )
|
||||||
|
eval L_NB_ARG=\$\(\( \${#${L_VAR}[*]} - ${L_PARAM_ARGS_DEF} \)\)
|
||||||
|
(( ${L_PARAM_ARGS_DEF} )) && (( L_PARAM_ARGS_DEF-- ))
|
||||||
|
# -- Si pas encore initialise alors la taille est 0
|
||||||
|
(( ${L_NB_ARG} )) && eval ${L_VAR}[${L_NB_ARG}]=${L_VAL} || eval ${L_VAR}=${L_VAL}
|
||||||
|
else
|
||||||
|
# -- Pas de declaration !!
|
||||||
|
(( ! ${#L_ERREUR_MSG[11]} )) && L_ERREUR_MSG[11]="L argument suivant ete dectecte sans declaration : "
|
||||||
|
L_ERREUR_MSG[11]="${L_ERREUR_MSG[11]}\"${1}\" "
|
||||||
|
L_ERREUR=11
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Controle des options et arguments obligatoires
|
||||||
|
# -- ----------------------------------------------
|
||||||
|
if (( ! ${L_ERREUR} ))
|
||||||
|
then
|
||||||
|
# -- Option obligatoire ...
|
||||||
|
for L_TMP in ${L_OPT_OBLIGATOIRE}
|
||||||
|
do
|
||||||
|
if [ $(( ${L_OPTSET} & 2**${L_TMP#*:} )) -eq 0 ]
|
||||||
|
then
|
||||||
|
# -- L option obligatoire L_TMP n a pas ete positionnee
|
||||||
|
# -- On controle que cette option n est pas une exclusion d une option obligatoire positionnee
|
||||||
|
L_PARAM=`echo ${L_OPT_LIGNE[${L_TMP#*:}]}|cut -d: -f6|sed 's/,/ /g'`
|
||||||
|
L_VAR=0
|
||||||
|
if [ -n "${L_PARAM}" ]
|
||||||
|
then
|
||||||
|
# -- L option L_TMP pocede une liste d exclusion
|
||||||
|
for L_IDX2 in ${L_PARAM}
|
||||||
|
do
|
||||||
|
eval L_IDX=\${L_POS_${L_IDX2}}
|
||||||
|
(( !${L_VAR} )) && L_VAR=$(( ${L_OPTSET} & 2**${L_IDX} ))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
# -- Si L_VAR est null alors l option L_TMP aurais du etre positionnee
|
||||||
|
if [ ${L_VAR} -eq 0 ]
|
||||||
|
then
|
||||||
|
[ -z "${L_ERREUR_MSG[7]}" ] && L_ERREUR_MSG[7]="Les options suivante sont requises : "
|
||||||
|
L_ERREUR_MSG[7]="${L_ERREUR_MSG[7]}${L_TMP%:*} "
|
||||||
|
L_ERREUR=7
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# -- Arguments declare ? ...
|
||||||
|
if (( ${#L_PARAM_ARGS} ))
|
||||||
|
then
|
||||||
|
# -- Nom de la variable d acceuille des arguments
|
||||||
|
L_VAR=`echo ${L_PARAM_ARGS}|cut -d: -f2`
|
||||||
|
[ -z "${L_VAR}" ] && L_VAR="SH_ARGS"
|
||||||
|
# -- Nombre d argument attendu ...
|
||||||
|
L_NB_MAXARG=`echo ${L_PARAM_ARGS}|cut -d: -f3`
|
||||||
|
# -- Si le nombres d argument n est pas defini alors par defaut on considere qu il peut etre infini
|
||||||
|
[ -z "${L_NB_MAXARG}" ] && L_NB_MAXARG=999999
|
||||||
|
if [ `echo ${L_NB_MAXARG}|grep -c "/"` -eq 0 ]
|
||||||
|
then
|
||||||
|
# -- On n a pas trouve le separateur "/" donc pas de minima defini
|
||||||
|
# -- l argument est il obligatoire ?
|
||||||
|
L_TMP=`echo ${L_PARAM_ARGS}|cut -d: -f1|grep -c "o"`
|
||||||
|
(( ${L_TMP} )) && L_NB_MINARG=1 || L_NB_MINARG=0
|
||||||
|
else
|
||||||
|
L_NB_MINARG=${L_NB_MAXARG%/*}
|
||||||
|
L_NB_MAXARG=${L_NB_MAXARG#*/}
|
||||||
|
# -- Si L_NB_MAXARG n est pas defini alors on considere qu il peut etre infini
|
||||||
|
[ -z "${L_NB_MAXARG}" ] && L_NB_MAXARG=999999
|
||||||
|
fi
|
||||||
|
[ ${L_NB_MAXARG} -lt 1 ] && L_NB_MAXARG=1
|
||||||
|
# -- Nombre d argument soumis ... ( Taille du tableau d arguments )
|
||||||
|
eval L_NB_ARG=\${#${L_VAR}[*]}
|
||||||
|
if [ ${L_NB_ARG} -lt ${L_NB_MINARG} ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[13]="Le script ${SH_PROG} attend a minima ${L_NB_MINARG} argument(s)"
|
||||||
|
L_ERREUR=13
|
||||||
|
fi
|
||||||
|
if [ ${L_NB_ARG} -gt ${L_NB_MAXARG} ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[14]="Trop d argument passe. Le script ${SH_PROG} attend au maximun ${L_NB_MAXARG} argument(s)"
|
||||||
|
L_ERREUR=14
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Controle des exclusion
|
||||||
|
# -- ----------------------
|
||||||
|
for L_TMP in ${L_OPTEXCLUDE}
|
||||||
|
do
|
||||||
|
if [ $(( ${L_OPTSET} & ${L_TMP#*:} )) -eq ${L_TMP#*:} ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[8]="Les options ${L_TMP%:*} sont mutuellement exclusive"
|
||||||
|
L_ERREUR=8
|
||||||
|
(( L_ERREUR_NB++ ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# -- Controle des inclusion
|
||||||
|
# -- ----------------------
|
||||||
|
if [ $(( ${L_OPTSET} & ${L_OPTINC} )) -ne 0 ]
|
||||||
|
then
|
||||||
|
# -- Une option exigeant une inclusion a ete positionne
|
||||||
|
L_IDX=0
|
||||||
|
while [ ${L_IDX} -le ${#L_OPT_NOM[*]} ]
|
||||||
|
do
|
||||||
|
if [ $(( (2 ** ${L_IDX}) & ${L_OPTSET} & ${L_OPTINC} )) -ne 0 ]
|
||||||
|
then
|
||||||
|
# -- L option L_IDX a ete positionne est pocedent une liste d inclusion
|
||||||
|
if [ $(( ${L_OPTSET} & ${L_OPTINCLUDE[${L_IDX}]#*:} )) -ne ${L_OPTINCLUDE[${L_IDX}]#*:} ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[9]="L option ${L_OPT_NOM[${L_IDX}]} exige l usage de(s) (l) option(s) ${L_OPTINCLUDE[${L_IDX}]%:*}"
|
||||||
|
L_ERREUR=9
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
(( L_IDX++ ))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Controle des option inconnu
|
||||||
|
# -- ---------------------------
|
||||||
|
if [ -n "${L_OPTINCONNU}" ]
|
||||||
|
then
|
||||||
|
L_ERREUR_MSG[10]="Option inconnu detectee(s) : ${L_OPTINCONNU}"
|
||||||
|
L_ERREUR=10
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Nettoyage
|
||||||
|
# -- ---------
|
||||||
|
# -- Suppression des variables tempon
|
||||||
|
for L_PARAM in ${L_OPT_NOM[*]}
|
||||||
|
do
|
||||||
|
eval unset L_POS_${L_PARAM}
|
||||||
|
done
|
||||||
|
|
||||||
|
# -- Gestion des options par defaut : -h -log -hist -s, -cpt et -dbg
|
||||||
|
# -- ---------------------------------------------------------------
|
||||||
|
# -- L option dbg n a pas de traitement particulier elle n apparaitras donc pas ci-dessous.
|
||||||
|
# -- Creation d un masque binaire pour determiner les options positionnee
|
||||||
|
L_VAL="${SH_OPTION_h}${SH_OPTION_log}${SH_OPTION_hist}${SH_OPTION_s}${SH_OPTION_cpt}"
|
||||||
|
if [ ${L_VAL} -ne 0 ]
|
||||||
|
then
|
||||||
|
if (( 2#${L_VAL} & 2#00010 )) # -- Comparaison binaire bit a bit vrix si l option -s est positionnee
|
||||||
|
then
|
||||||
|
# -- Option s
|
||||||
|
SH_SILENCE="oui"
|
||||||
|
fi
|
||||||
|
# -- Une option gere par defaut a ete positionnee
|
||||||
|
if (( 2#${L_VAL} & 2#10000 ))
|
||||||
|
then
|
||||||
|
# -- Option h : affichage de l aide
|
||||||
|
fct_usage "${SH_DIR}/${SH_PROG}"
|
||||||
|
fct_erreur 0
|
||||||
|
fi
|
||||||
|
if (( 2#${L_VAL} & 2#01000 ))
|
||||||
|
then
|
||||||
|
# -- Option log
|
||||||
|
# -- Recherche du dernier journal
|
||||||
|
[ -z "${SH_ARG_LOG}" ] && SH_ARG_LOG=`tail -4 ${SH_FICTRC}|grep "fin"|cut -d: -f6|sed 's/(//;s/)//;s/ *//g'`
|
||||||
|
L_VAR=`ls ${NC_EXPL_LOG}|grep -c ${SH_ARG_LOG}`
|
||||||
|
if (( ${L_VAR} ))
|
||||||
|
then
|
||||||
|
view ${NC_EXPL_LOG}/*${SH_ARG_LOG}*
|
||||||
|
else
|
||||||
|
fct_message -color rouge "Le journal d execution de la session ${SH_ARG_LOG} du script ${SH_PROG} n existe plus"
|
||||||
|
fi
|
||||||
|
fct_erreur 0
|
||||||
|
fi
|
||||||
|
if (( 2#${L_VAL} & 2#00001 ))
|
||||||
|
then
|
||||||
|
# -- Option cpt
|
||||||
|
# -- Recherche du dernier compte-rendu
|
||||||
|
[ -z "${SH_ARG_CPT}" ] && SH_ARG_CPT=`tail -4 ${SH_FICTRC}|grep "fin"|cut -d: -f4|sed 's/(//;s/)//;s/ *//g'`
|
||||||
|
L_VAR=`ls ${NC_EXPL_CPT}|grep -c ${SH_ARG_CPT}`
|
||||||
|
if (( ${L_VAR} ))
|
||||||
|
then
|
||||||
|
view ${NC_EXPL_CPT}/*${SH_ARG_CPT}*
|
||||||
|
else
|
||||||
|
fct_message -color rouge "Le compte-rendu de la session ${SH_ARG_CPT} du script ${SH_PROG} n existe plus"
|
||||||
|
fi
|
||||||
|
fct_erreur 0
|
||||||
|
fi
|
||||||
|
if (( 2#${L_VAL} & 2#00100 ))
|
||||||
|
then
|
||||||
|
# -- Option hist
|
||||||
|
fct_affiche_ligne entete "Historique des ${SH_ARG_HIST} derniere execution du script ${SH_PROG}" "Date,18" "Utilisateur(Origine,20:Exec,20)" "Session,16" "Log,3" "Cpt,3" "Code,5" "Parametre,50"
|
||||||
|
SH_ARG_HIST=$(( ${SH_ARG_HIST} * 3 ))
|
||||||
|
tail -${SH_ARG_HIST} ${SH_FICTRC}|grep "Parametre" | while read L_VAL
|
||||||
|
do
|
||||||
|
G_TMP=`echo ${L_VAL}|sed 's/ Parametre .*$/:/;s/[^:]//g'` # Pour assurer la compatibilite ascendante
|
||||||
|
G_TMP=$(( 7 - ${#G_TMP} )) # Nombre de champs 6 ou 8 ?
|
||||||
|
L_PARAM=`echo ${L_VAL}|cut -d: -f$(( 8 - ${G_TMP} ))-`
|
||||||
|
(( ${G_TMP} )) && L_UORI='' || L_UORI=`echo ${L_VAL}|cut -d: -f4`
|
||||||
|
(( ${G_TMP} )) && L_UEXE='' || L_UEXE=`echo ${L_VAL}|cut -d: -f5`
|
||||||
|
L_IDX=`echo ${L_VAL}|cut -d: -f$(( 6 - ${G_TMP}))|sed 's/(//;s/)//'`
|
||||||
|
L_IDX2=`echo ${L_VAL}|cut -d: -f$1-3`
|
||||||
|
L_VAR=`ls ${NC_EXPL_LOG}|grep -c ${L_IDX}`
|
||||||
|
L_PARMF=`ls ${NC_EXPL_CPT}|grep -c ${L_IDX}`
|
||||||
|
(( ${L_VAR} )) && L_VAR="X" || L_VAR=""
|
||||||
|
(( ${L_PARMF} )) && L_PARMF="X" || L_PARMF=""
|
||||||
|
L_TMP=`grep ${L_IDX} ${SH_FICTRC}|grep "fin"|cut -d- -f2`
|
||||||
|
# -- Si L_TMP est vide, alors il s agit de la session en cours, on n affiche pas le resultat !
|
||||||
|
[ -n "${L_TMP}" ] && fct_affiche_ligne "${L_IDX2}" "${L_UORI}" "${L_UEXE}" "${L_IDX}" "${L_VAR}" "${L_PARMF}" "${L_TMP}" "${L_PARAM}"
|
||||||
|
done
|
||||||
|
fct_affiche_ligne pied
|
||||||
|
fct_erreur 0
|
||||||
|
fct_erreur 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# -- Sortie
|
||||||
|
# -- ------
|
||||||
|
if (( ${L_ERREUR} ))
|
||||||
|
then
|
||||||
|
L_IDX=14
|
||||||
|
while (( ${L_IDX} ))
|
||||||
|
do
|
||||||
|
[ -n "${L_ERREUR_MSG[${L_IDX}]}" ] && fct_message -color rouge "${L_ERREUR_MSG[${L_IDX}]}"
|
||||||
|
(( L_IDX-- ))
|
||||||
|
done
|
||||||
|
fct_erreur 254
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
typeset -Ffx fct_params
|
109
lib/path.lib
Executable file
109
lib/path.lib
Executable file
@ -0,0 +1,109 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : path.lib
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 10-02-2016
|
||||||
|
## Version : 2.0.0
|
||||||
|
## Objet : Ajout d'un repertoire a une variable avec control d unicite.
|
||||||
|
##
|
||||||
|
## Fonction : fctpath
|
||||||
|
##
|
||||||
|
## detail : Certaines variables represente une liste de repertoire
|
||||||
|
## separes par un caractere significatif. C'est le cas pour
|
||||||
|
## les variables PATH, MANPATH, etc...
|
||||||
|
## Cette fonction permet la mise a jour de ce type de
|
||||||
|
## variable sans se poser la question de la redondance
|
||||||
|
## de l'information ou de l'existance du repertoire.
|
||||||
|
## L'appel de cette fonction doit etre suivi de quatre
|
||||||
|
## parametres :
|
||||||
|
## - 1 : le nom du repertoire a ajouter
|
||||||
|
## - 2 : le nom de la variable a mettre a jour
|
||||||
|
## - 3 : le separateur de champs utilise
|
||||||
|
## - 4 : le parametre "avant" si vous desirez ajouter
|
||||||
|
## le repertoire en debut de variable
|
||||||
|
## La variable est automatiquement exportee.
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 19-08-2001 - Marc GRESSET - Creation
|
||||||
|
# 1.0.0 10-02-2016 - Emmanuel Confrere - Integration au script du socle DTSI
|
||||||
|
##---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fctpath () {
|
||||||
|
local V_PATH_NAME="${1}"
|
||||||
|
local V_PATH_VAR="${2}"
|
||||||
|
local V_PATH_SEPAR="${3}"
|
||||||
|
local V_PATH_WHERE="${4}"
|
||||||
|
eval V_PATH_CONTENU=\"\$\{"${V_PATH_VAR}"\}\"
|
||||||
|
|
||||||
|
#- Suppression des caracteres V_PATH_SEPAR au debut et en fin de ligne
|
||||||
|
V_PATH_CONTENU=`echo "${V_PATH_CONTENU}"|sed "s#^${V_PATH_SEPAR}##;s#${V_PATH_SEPAR}\\$##"`
|
||||||
|
|
||||||
|
if [ -z "${V_PATH_NAME}" ] || [ -z "${V_PATH_VAR}" ] || [ -z "${V_PATH_SEPAR}" ]
|
||||||
|
then
|
||||||
|
echo "fct_path : Probleme sur les parametres :"
|
||||||
|
echo "fct_path : \${V_PATH_NAME} = [ ${V_PATH_NAME} ]"
|
||||||
|
echo "fct_path : \${V_PATH_VAR} = [ ${V_PATH_VAR} ]"
|
||||||
|
echo "fct_path : \${V_PATH_SEPAR} = [ ${V_PATH_SEPAR} ]"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
case ${V_PATH_SEPAR} in
|
||||||
|
\.|\,|\;|\:|\!|\~|\@|\#|\%|\^) \
|
||||||
|
:
|
||||||
|
;;
|
||||||
|
*) echo "fct_path : Probleme sur le separateur de champs."
|
||||||
|
echo "fct_path : \${V_PATH_NAME} = [ ${V_PATH_NAME} ]"
|
||||||
|
echo "fct_path : \${V_PATH_VAR} = [ ${V_PATH_VAR} ]"
|
||||||
|
echo "fct_path : \${V_PATH_SEPAR} = [ ${V_PATH_SEPAR} ]"
|
||||||
|
return 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# - Suppression du path si existe deja dans la variable
|
||||||
|
case ${V_PATH_CONTENU} in
|
||||||
|
*${V_PATH_SEPAR}${V_PATH_NAME}${V_PATH_SEPAR}* ) \
|
||||||
|
V_PATH_CONTENU=`echo ${V_PATH_CONTENU}|sed "s#${V_PATH_SEPAR}${V_PATH_NAME}${V_PATH_SEPAR}#${V_PATH_SEPAR}#"` ;;
|
||||||
|
${V_PATH_NAME}${V_PATH_SEPAR}* ) \
|
||||||
|
V_PATH_CONTENU=`echo ${V_PATH_CONTENU}|sed "s#${V_PATH_NAME}${V_PATH_SEPAR}##"` ;;
|
||||||
|
*${V_PATH_SEPAR}${V_PATH_NAME} ) \
|
||||||
|
V_PATH_CONTENU=`echo ${V_PATH_CONTENU}|sed "s#${V_PATH_SEPAR}${V_PATH_NAME}##"` ;;
|
||||||
|
${V_PATH_NAME} ) V_PATH_CONTENU="" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# - Initialisation de la nouvelle variable
|
||||||
|
if [ "${V_PATH_WHERE}" != "supp" ]
|
||||||
|
then
|
||||||
|
if [ -z "${V_PATH_CONTENU}" ]
|
||||||
|
then
|
||||||
|
V_PATH_CONTENU="${V_PATH_NAME}"
|
||||||
|
elif [ "${V_PATH_WHERE}" = "avant" ]
|
||||||
|
then
|
||||||
|
V_PATH_CONTENU=${V_PATH_NAME}${V_PATH_SEPAR}${V_PATH_CONTENU}
|
||||||
|
else
|
||||||
|
V_PATH_CONTENU=${V_PATH_CONTENU}${V_PATH_SEPAR}${V_PATH_NAME}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${V_PATH_NAME}" ] && [ ! -f "${V_PATH_NAME}" ]
|
||||||
|
then
|
||||||
|
#- Le repertoire specifier n existe pas
|
||||||
|
unset V_PATH_NAME
|
||||||
|
unset V_PATH_VAR
|
||||||
|
unset V_PATH_SEPAR
|
||||||
|
unset V_PATH_WHERE
|
||||||
|
unset V_PATH_CONTENU
|
||||||
|
return 2
|
||||||
|
else
|
||||||
|
#- Export du nouveau Path
|
||||||
|
eval ${V_PATH_VAR}=${V_PATH_CONTENU}
|
||||||
|
eval export ${V_PATH_VAR}
|
||||||
|
unset V_PATH_NAME
|
||||||
|
unset V_PATH_VAR
|
||||||
|
unset V_PATH_SEPAR
|
||||||
|
unset V_PATH_WHERE
|
||||||
|
unset V_PATH_CONTENU
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
typeset -Ffx fctpath
|
97
lib/rotattrace.lib
Executable file
97
lib/rotattrace.lib
Executable file
@ -0,0 +1,97 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : rotattrace.lib
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 12-04-2017
|
||||||
|
## Version : 2.0.6
|
||||||
|
## Objet : Rotation du fichier passe en parametre
|
||||||
|
##
|
||||||
|
## Fonction : fct_rotation fichier retention
|
||||||
|
##
|
||||||
|
## Detail :
|
||||||
|
##
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 24-01-2008 - Emmanuel Confrere - Cre : Creation
|
||||||
|
# 1.0.0 06-06-2008 - Emmanuel Confrere - Ano : Correction des noms de variable
|
||||||
|
# 1.1.0 06-06-2008 - Emmanuel Confrere - Evo : Ajout recherche fichier
|
||||||
|
# 2.0.0 10-02-2016 - Emmanuel Confrere - Evo : Integration au socle DTSI
|
||||||
|
# 2.0.1 09-03-2016 - Pierre Trhin - Ano : Ajout du suivie des liens symbolique
|
||||||
|
# 2.0.2 04-01-2017 - Emmanuel Confrere - Ano : Limiter la profondeur de la purge au dossier specifier - Cf. Jira : DBA-2372
|
||||||
|
# Ajout d un control de validite des variables L_FIC2 et L_REP_FIC
|
||||||
|
# 2.0.3 05-01-2017 - Emmanuel Confrere - Ano : Erreur de syntax dans le control de validite
|
||||||
|
# 2.0.4 06-04-2017 - Emmanuel Confrere - Ano : Degradation de performance serveur (Cf. DBA-2458)
|
||||||
|
# 2.0.5 06-04-2017 - Emmanuel Confrere - Ano : Degradation de performance serveur,
|
||||||
|
# ajout de l option "-delete" dans find a la place de "-exec rm {} \;"
|
||||||
|
# 2.0.6 12-04-2017 - Emmanuel Confrere - Ano : l expension des nom ne se fait pas dans l instruction rm -f "${L_REP_FIC}/${L_FIC2}*"
|
||||||
|
# a cause des double-cotes. Du coup les fichiers ne sont pas supprimees.
|
||||||
|
##----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function fct_rotation
|
||||||
|
{
|
||||||
|
# Objet : Tourne les fichier de trace
|
||||||
|
# Parametre : Nom du fichier, periode de retention en jours
|
||||||
|
local L_FICHIER=`basename $1` # nom du fichier
|
||||||
|
local L_FIC2=""
|
||||||
|
local L_RET=$2 # Retention en jour - Entier positif
|
||||||
|
local L_SEQ=1
|
||||||
|
local L_REP_FIC="`dirname $1`" # Chemin absolu vers le fichier
|
||||||
|
local L_TMP=""
|
||||||
|
local L_TMP2=""
|
||||||
|
local L_OSPID=""
|
||||||
|
|
||||||
|
# Recuperation du PID du fichier ( uniquement pour les fichiers de trace )
|
||||||
|
L_OSPID=`echo ${L_FICHIER}|sed 's/.*_\([0-9][0-9]*\)\..*/\1/'`
|
||||||
|
|
||||||
|
# Si les chaine L_OSPID et L_FICHIER sont egale , alors le SH_SESSION_ID n as pas ete trouve
|
||||||
|
[ "${L_OSPID}" = "${L_FICHIER}" ] && L_OSPID=""
|
||||||
|
|
||||||
|
# L_OSPID doit etre un chiffre !
|
||||||
|
[ -z "`echo ${L_OSPID}|sed 's/[0-9][0-9]*//'`" ] || L_OSPID=""
|
||||||
|
|
||||||
|
if [ -n "${L_OSPID}" ]
|
||||||
|
then
|
||||||
|
# L_OSPID n est pas vide, L_FICHIER est donc un fichier de trace
|
||||||
|
# Extraction du nom de fichiers sans le numero d identification
|
||||||
|
L_FIC2=`echo ${L_FICHIER}|sed 's/^\(.*\)_\([0-9][0-9]*_[0-9][0-9]*\)\..*/\1/'`
|
||||||
|
else
|
||||||
|
L_FIC2=${L_FICHIER}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# On controle ... de securite
|
||||||
|
[ "${L_FIC2}" = "*" ] && return 1 # Le fichier a supprimer ne peut pas etre "*"
|
||||||
|
[ -z "${L_FIC2}" -o -z "${L_REP_FIC}" ] && return 4 # Le nom du fichier et son repertoire doivent etre soumis
|
||||||
|
[ "${L_REP_FIC:0:1}" != "/" ] && return 2 # Le repertoire est fourni en valuer absolu
|
||||||
|
L_TMP=`echo ${L_REP_FIC}|cut -d "/" -f2` # Les repertoires suivant sont interdit
|
||||||
|
L_TMP2=`echo "bin boot sbin cgroup dev lib lib64 misc proc root selinux sys srv usr run"|grep -c "${L_TMP}"`
|
||||||
|
[ ${L_TMP2} -gt 0 ] && return 3
|
||||||
|
|
||||||
|
# fct_rotation du fichier ${L_REP_FIC}/${L_FICHIER}
|
||||||
|
# Suppression des fichier de trace anterieure a ${L_RET} jours
|
||||||
|
if [ ${L_RET} -eq 0 ]
|
||||||
|
then
|
||||||
|
# Si la retention est null on supprime tous les fichiers
|
||||||
|
rm -f ${L_REP_FIC}/${L_FIC2}*
|
||||||
|
else
|
||||||
|
# Limitation de la profondeur de la purge au dossier specifier (Ne pas prendre en compte les sous-dossier - Cf. Jira : DBA-2372)
|
||||||
|
# pour eliminer un find on reduit la pronfondeur de recherche L_RET-- (Induit par le fonctionnement de find).
|
||||||
|
((L_RET--))
|
||||||
|
find -L ${L_REP_FIC} -maxdepth 1 -name ${L_FIC2}\* -daystart -type f -mtime +${L_RET} -delete;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${L_OSPID}" ]
|
||||||
|
then
|
||||||
|
# il s agit d un fichier sans SH_SESSION_ID on effectue donc la rotation des fichiers
|
||||||
|
# Nombre de fichier residuel...
|
||||||
|
L_SEQ=`ls ${L_REP_FIC}/${L_FICHIER}* 2>/dev/null|wc -l`
|
||||||
|
# Rotattion des fichiers
|
||||||
|
while [ ${L_SEQ} -gt 0 ]
|
||||||
|
do
|
||||||
|
L_TMP=$(( ${L_SEQ} - 1 ))
|
||||||
|
[ -f ${L_REP_FIC}/${L_FICHIER}.${L_TMP} ] && mv ${L_REP_FIC}/${L_FICHIER}.${L_TMP} ${L_REP_FIC}/${L_FICHIER}.${L_SEQ}
|
||||||
|
((L_SEQ--))
|
||||||
|
done
|
||||||
|
[ -f ${L_REP_FIC}/${L_FICHIER} ] && mv ${L_REP_FIC}/${L_FICHIER} ${L_REP_FIC}/${L_FICHIER}.1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
typeset -Ffx fct_rotation
|
153
lib/semaphore.lib
Executable file
153
lib/semaphore.lib
Executable file
@ -0,0 +1,153 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : semaphore.lib
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 16-06-2016
|
||||||
|
## Version : 3.1.0
|
||||||
|
## Objet : Gestion de l execution parallel d un shell.
|
||||||
|
##
|
||||||
|
## Fonction : fct_unique_exec [nom] [occurences] [mode]
|
||||||
|
## fct_libere_exec [nom]
|
||||||
|
##
|
||||||
|
## [nom] : Mot alphabetique quelconque identifiant la ressource.
|
||||||
|
## [nom] ne peut pas prendre pour valeur "wait" ou "nowait".
|
||||||
|
##
|
||||||
|
## [occurence] : Nombre d execution parallel (Par defaut 1).
|
||||||
|
##
|
||||||
|
## [mode] : "wait" (par defaut) ou "nowait".
|
||||||
|
##
|
||||||
|
## Rem : Tous les parametres sont facultatif, mais doivent etre presentes dans l'ordre.
|
||||||
|
##
|
||||||
|
## Detail : Cette librairie gere les acces concurrent a une portion de code Bash.
|
||||||
|
## Deux fonctions sont utilisees :
|
||||||
|
## - fct_unique_exec : Positionne des semaphores et controle la disponibilite.
|
||||||
|
## - fct_libere_exec : Supprime des semaphores
|
||||||
|
##
|
||||||
|
## La fonction fct_unique_exec(), si appelee sans l argument [nom] et/ou [occurences],
|
||||||
|
## doit etre positionee en debut de script juste apres le chargement du fichier
|
||||||
|
## ${NC_EXPL_CONF}/init.conf sinon elle peut etre placee a n importe quel endroit dans le code.
|
||||||
|
##
|
||||||
|
## Elle positionne une semaphore pour proteger d une execution concurrente.
|
||||||
|
## Ensuite elle controle la disponibilite de la ressource et selon le [mode] utilise
|
||||||
|
## "wait ou "nowait", attend sa liberation ou sort immediatement en erreur.
|
||||||
|
##
|
||||||
|
## La semaphore est liberee automatiquement par l appel a la fonction fct_erreur(), sauf si [nom] a ete
|
||||||
|
## utilisee - fct_erreur() appelle la fonction fct_libere_exec() -.
|
||||||
|
##
|
||||||
|
## L utilisation avec [nom] implique OBLIGATOIREMENT de liberer la semaphore en appelant
|
||||||
|
## explicitement fct_libere_exec [nom] dans le script ayant appele fct_unique_exec().
|
||||||
|
##
|
||||||
|
## [occurences] fixe le nb d execution concurrente qui peuvent etre executer en parallel
|
||||||
|
## cette valeur est fixe par defaut avec ${SH_CPT_SEMAPHORE} qui vaut 1 si non
|
||||||
|
## surcharger par le script.
|
||||||
|
##
|
||||||
|
## [mode] fixe le comportement de sortie de la fonction fct_unique_exec().
|
||||||
|
## Par defaut le mode est fixe a "wait" mais il est possible de demander de ne pas
|
||||||
|
## attendre et de renvoyer le code erreur 1 en possitionnant la valeur du mode a "nowait".
|
||||||
|
##
|
||||||
|
## Les variables SH_FICSEM, SH_PROG et SH_CPT_SEMAPHORE sont initialisees dans le
|
||||||
|
## fichier ${NC_EXPL_CONF}/init.conf (comme toute les variables SH_*).
|
||||||
|
## SH_CPT_SEMAPHORE vaut 1 par defaut et peut etre surcharge dans le fichier
|
||||||
|
## de configuration du script.
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 - Emmanuel Confrere - Creation
|
||||||
|
# 1.0.1 - Daniel Frochtmann - Parallelisation de traitement
|
||||||
|
# 1.0.2 - Emmanuel Confrere - Ajout de commentaire
|
||||||
|
# 2.0.0 - Emmanuel Confrere - Debug (Ne fonctionnais pas si plus de 2 occurance)
|
||||||
|
# Refonte complete. On se base maintenant sur une liste de PID
|
||||||
|
# 2.1.0 - Emmanuel Confrere - Evo : prise en charge du nb d occurences actives
|
||||||
|
# 3.0.0 10-02-2016 - Emmanuel Confrere - Evo : Integration au socle DTSI
|
||||||
|
# 3.0.1 17-03-2016 - Emmanuel Confrere - Evo : Ajout d information de debug
|
||||||
|
# 3.1.0 16-06-2017 - Emmanuel Confrere - Evo : Ajout de l option "mode"
|
||||||
|
# Attente progressive
|
||||||
|
# Reformulation de l aide.
|
||||||
|
##----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function fct_unique_exec()
|
||||||
|
{
|
||||||
|
local NOM=$1
|
||||||
|
local OCCURENCES=$2
|
||||||
|
local MODE=$3
|
||||||
|
local PID=$$
|
||||||
|
local WAITING=2
|
||||||
|
local ELIGIBLE=0
|
||||||
|
local ELIGIBILITE=0
|
||||||
|
local FICSEM=""
|
||||||
|
|
||||||
|
# -- Marquage
|
||||||
|
fct_message -debug 0 "<lib:fct_unique_exec> Nom:${NOM} Occ:${OCCURENCES} mode:${MODE} PID:${PID}"
|
||||||
|
|
||||||
|
# -- Fixer le nombre maxi d'occurences actives
|
||||||
|
[ "${OCCURENCES}" = "nowait" -o "${OCCURENCES}" = "wait" ] && MODE=${OCCURENCES} && OCCURENCES=${SH_CPT_SEMAPHORE} || (( ${OCCURENCES} )) || OCCURENCES=${SH_CPT_SEMAPHORE}
|
||||||
|
|
||||||
|
# -- Identification de la ressource
|
||||||
|
[ "${NOM}" = "nowait" -o "${NOM}" = "wait" ] && MODE=${NOM} && NOM=""
|
||||||
|
(( ${NOM} )) && OCCURENCES=${NOM} && NOM=""
|
||||||
|
[ -n "${NOM}" ] && FICSEM=`echo ${SH_FICSEM}|sed "s/\.sem$/_${NOM}\.sem/"` || FICSEM=${SH_FICSEM}
|
||||||
|
echo "${PID}" >> ${FICSEM}
|
||||||
|
|
||||||
|
# -- Fixer le mode d execution
|
||||||
|
[ "${MODE}" = "nowait" ] && MODE=1 || MODE=0
|
||||||
|
|
||||||
|
# -- On controle l occupation de la ressource
|
||||||
|
# -- Le process est-il eligible pour continuer l execution
|
||||||
|
# -- 0 : Non
|
||||||
|
# -- 1 : Oui
|
||||||
|
ELIGIBLE=`head -${OCCURENCES} ${FICSEM}|grep -cw "${PID}"`
|
||||||
|
|
||||||
|
# -- Dans le cas ou le process n est pas eligible mais que le mode est nowait
|
||||||
|
# -- on ne passera pas dans la boucle d attente et on doit par consequent
|
||||||
|
# -- enleve le process de la liste d attente.
|
||||||
|
fct_message -debug 1 "<lib:fct_unique_exec> Stack 1 - Nom:${NOM} Occ~:${OCCURENCES} Mode:${MODE} Eligible:${ELIGIBLE}"
|
||||||
|
(( ${MODE} & ( ${MODE} ^ ${ELIGIBLE} ) )) && fct_libere_exec "@${NOM}@${PID}"
|
||||||
|
|
||||||
|
if (( ! (${MODE} | ${ELIGIBLE}) ))
|
||||||
|
then
|
||||||
|
# -- La resource est en cours d utilisation, on attend sa liberation...
|
||||||
|
fct_message -color cyan "Une ou plusieurs occurrence du script ${SH_PROG} est en cours d execution..."
|
||||||
|
fct_message -nolog -color cyan " - Nombre d occurance active : ${OCCURENCES}"
|
||||||
|
fct_message -nolog -color blanc " .\c"
|
||||||
|
while (( ! ${ELIGIBLE} ))
|
||||||
|
do
|
||||||
|
fct_message -nolog -color cyan ".\c"
|
||||||
|
sleep ${WAITING}
|
||||||
|
(( WAITING++ ))
|
||||||
|
ELIGIBLE=`head -${OCCURENCES} ${FICSEM}|grep -cw "${PID}"`
|
||||||
|
ELIGIBILITE=`grep -cw "${PID}" ${FICSEM}`
|
||||||
|
(( ! ${ELIGIBILITE} )) && echo "${PID}" >> ${FICSEM}
|
||||||
|
CPID=`head -1 ${FICSEM}`
|
||||||
|
[ ! -d /proc/${CPID} ] && fct_libere_exec "@${NOM}@${CPID}"
|
||||||
|
done
|
||||||
|
fct_message -nolog -color vert "."
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $(( ${MODE} & ( ${MODE} ^ ${ELIGIBLE} ) ))
|
||||||
|
}
|
||||||
|
typeset -Ffx fct_unique_exec
|
||||||
|
|
||||||
|
# --------------------------------------------------------------------------------------------------------------
|
||||||
|
function fct_libere_exec()
|
||||||
|
{
|
||||||
|
# Objet : Signaler la fin d execution unique d un script shell
|
||||||
|
#
|
||||||
|
# Syntaxe : fct_libere_exec
|
||||||
|
#
|
||||||
|
local NOM=$1
|
||||||
|
local PID=$$
|
||||||
|
local FICSEM
|
||||||
|
|
||||||
|
# -- Marquage
|
||||||
|
fct_message -debug 0 "<lib:fct_libere_exec> Nom:${NOM} PID:${PID}"
|
||||||
|
|
||||||
|
[ "${NOM:0:1}" = "@" ] && PID=${NOM##*@} && NOM=${NOM%@*} && NOM=${NOM#@}
|
||||||
|
[ -n "${NOM}" ] && FICSEM=`echo ${SH_FICSEM}|sed "s/\.sem$/_${NOM}\.sem/"` || FICSEM=${SH_FICSEM}
|
||||||
|
|
||||||
|
if [ -f ${FICSEM} ]
|
||||||
|
then
|
||||||
|
cat ${FICSEM}|grep -wv "${PID}" > ${FICSEM}.tmp
|
||||||
|
mv ${FICSEM}.tmp ${FICSEM}
|
||||||
|
[ ! -s ${FICSEM} ] && rm ${FICSEM}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
typeset -Ffx fct_libere_exec
|
24
lib/usage.lib
Executable file
24
lib/usage.lib
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : usage.lib
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 10-02-2016
|
||||||
|
## Version : 1.0.0
|
||||||
|
## Objet : affiche l'entete du script passer en parametre commencant par ##
|
||||||
|
##
|
||||||
|
## Fonction : fct_usage Nom_Script
|
||||||
|
##
|
||||||
|
## Detail :
|
||||||
|
##
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0 10-02-2016 - Emmanuel Confrere - Creation : Reprise du script du socle Oracle
|
||||||
|
##----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function fct_usage
|
||||||
|
{
|
||||||
|
local L_PROG_NAME=$1
|
||||||
|
sed -n "/^##/s/^##//p" ${L_PROG_NAME}
|
||||||
|
}
|
||||||
|
|
||||||
|
typeset -Ffx fct_usage
|
32
lib/what.lib
Executable file
32
lib/what.lib
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
##----------------------------------------------------------------------------
|
||||||
|
## Script : what.lib
|
||||||
|
## Module Puppet : gnc-script_core_dtsi
|
||||||
|
## Auteur : Emmanuel Confrere
|
||||||
|
## Date : 10-02-2016
|
||||||
|
## Version : 1.1.0-1
|
||||||
|
## Objet : Fournie la version et l objet du fichier passe en parametre
|
||||||
|
##
|
||||||
|
## Fonction : what Nom_Fichier
|
||||||
|
##
|
||||||
|
## Detail :
|
||||||
|
##
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Mise a jour :
|
||||||
|
# 1.0.0-0 24-01-2008 - Emmanuel - Creation
|
||||||
|
# 1.0.0-1 06-06-2008 - Emmanuel - Correction des noms de variable
|
||||||
|
# 1.1.0-0 06-06-2008 - Emmanuel - Ajout recherche fichier
|
||||||
|
# 2.0.0-0 10-02-2016 - Emmanuel Confrere - Integration au socle DTSI
|
||||||
|
##----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
what()
|
||||||
|
{
|
||||||
|
local L_FICHIER=`which $1`
|
||||||
|
|
||||||
|
if [ -f ${L_FICHIER} ]
|
||||||
|
then
|
||||||
|
grep "^## Version" ${L_FICHIER}|sed 's/#* *//'
|
||||||
|
grep "^## Objet" ${L_FICHIER}|sed 's/#* *//'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
typeset -fx what
|
3
tetalab.sh
Normal file
3
tetalab.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
NC_EXPL_ROOT=/opt/tetalab
|
||||||
|
export NC_EXPL_ROOT
|
||||||
|
source ${NC_EXPL_ROOT}/conf/shell-env/profile_init.env
|
Loading…
Reference in New Issue
Block a user