diff --git a/README.md b/README.md index 380a763..abfe6f9 100755 --- a/README.md +++ b/README.md @@ -1,556 +1,557 @@ -# Aide memoire pour l'écriture de scripts avec le socle bash + # Aide memoire pour l'écriture de scripts avec le socle bash -* Sommaire - * I - Arborescence du socle - * II - Variables d'environement - * 1 - Variables globales - * 2 - Variables de session - * III - Utilisation du socle bash - * 1 - Cartouche - * 1.1 Élements du cartouche - * 1.2 Versionnement sémantique - * 1.2.1 Usage - * 1.2.2 Format - * 1.2.3 Sémantique - * 2 - Initialisation du socle - * 3 - Structure d'un script - * 4 - Actions realisées au lancement d'un script - * IV - Nomenclature - * 1 - Fichiers temporaires - * 2 - Nom des exécutables - * V - Description et usage des bibliothèques - * 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 + * Sommaire + * I - Arborescence du socle + * II - Variables d'environement + * 1 - Variables globales + * 2 - Variables de session + * III - Utilisation du socle bash + * 1 - Cartouche + * 1.1 Élements du cartouche + * 1.2 Versionnement sémantique + * 1.2.1 Usage + * 1.2.2 Format + * 1.2.3 Sémantique + * 2 - Initialisation du socle + * 3 - Structure d'un script + * 4 - Actions realisées au lancement d'un script + * IV - Nomenclature + * 1 - Fichiers temporaires + * 2 - Nom des exécutables + * V - Description et usage des bibliothèques + * 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 -## I - Arborescence du socle + ## I - Arborescence du socle -La racine des dossiers utilisée par le Socle Bash est définie par la variable d'environement NC\_EXPL\_ROOT. -Cette dernière est initialisée à la connexion par l'appel au script /etc/profile.d/tetalab.sh -Cette arborescence est utilisée pour tous scripts Bash ainsi que les variables d'environement qui -en découlent. + La racine des dossiers utilisée par le Socle Bash est définie par la variable d'environement NC\_EXPL\_ROOT. + Cette dernière est initialisée à la connexion par l'appel au script /etc/profile.d/tetalab.sh + Cette arborescence est utilisée pour tous scripts Bash ainsi que les variables d'environement qui + en découlent. -Sous l'arborescence ${NC\_EXPL\_ROOT} on trouve les dossiers suivants : + Sous l'arborescence ${NC\_EXPL\_ROOT} on trouve les dossiers suivants : - +-----------------+-----------------------------------------------------------------------------------------------+ - | Dossier | Description | - +-----------------+-----------------------------------------------------------------------------------------------+ - | {Racine}/bin | Contient les binaires (scripts Bash) | - | {Racine}/conf | Contient les fichiers de configuration des scripts, ainsi que du socle | - | {Racine}/cpt | Contient les fichiers de comtpe-rendus génerés par les script (purge auto, 8 jours par défaut)| - | {Racine}/dat | Contient les fichiers de données gérés par les scripts | - | {Racine}/hist | Contient l'historique d'exécution des scripts (pas de purge) | - | {Racine}/lib | Contient les bibliothèques chargées par le socle | - | {Racine}/log | Contient les fichiers de logs d exécution des scripts (purge auto , 8 jours par défaut ) | - | {Racine}/man | Contient les fichiers d'aide des scripts pour l'utilitaire "man" | - | {Racine}/mod | Contient les fichiers modèles (templates) à usage des scripts | - | {Racine}/msg | Contient les fichiers de messages des scripts utilisés par la bibliothèque "fct_erreur" | - | {Racine}/tmp | Contient les fichiers temporaires des scripts | - +-----------------+-----------------------------------------------------------------------------------------------+ + +-----------------+-----------------------------------------------------------------------------------------------+ + | Dossier | Description | + +-----------------+-----------------------------------------------------------------------------------------------+ + | {Racine}/bin | Contient les binaires (scripts Bash) | + | {Racine}/conf | Contient les fichiers de configuration des scripts, ainsi que du socle | + | {Racine}/cpt | Contient les fichiers de comtpe-rendus génerés par les script (purge auto, 8 jours par défaut)| + | {Racine}/dat | Contient les fichiers de données gérés par les scripts | + | {Racine}/hist | Contient l'historique d'exécution des scripts (pas de purge) | + | {Racine}/lib | Contient les bibliothèques chargées par le socle | + | {Racine}/log | Contient les fichiers de logs d exécution des scripts (purge auto , 8 jours par défaut ) | + | {Racine}/man | Contient les fichiers d'aide des scripts pour l'utilitaire "man" | + | {Racine}/mod | Contient les fichiers modèles (templates) à usage des scripts | + | {Racine}/msg | Contient les fichiers de messages des scripts utilisés par la bibliothèque "fct_erreur" | + | {Racine}/tmp | Contient les fichiers temporaires des scripts | + +-----------------+-----------------------------------------------------------------------------------------------+ -Note : Sous chaque dossier vous trouverez un fichier texte lisezmoi.txt decrivant l'usage du répertoire. + Note : Sous chaque dossier vous trouverez un fichier texte lisezmoi.txt decrivant l'usage du répertoire. -## II - Variables d'environement + ## 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 définies et exportées à la connexion. Elles sont donc utilisables -par tous les scripts, mais elles ne sont pas modifiables. + Le socle utilise deux groupes de variables. Le premier dit "global" le second "de session". + Sauf si explicite, les variables globales sont définies et exportées à la connexion. Elles sont donc utilisables + par tous les scripts, mais elles ne sont pas modifiables. -Les variables de session sont définies à l'execution d'un script et lui sont propres. -Cependent certaines d'entre elles sont transmises aux scripts enfants: - - 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 définies à l'execution d'un script et lui sont propres. + Cependent certaines d'entre elles sont transmises aux scripts enfants: + - 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 à 2 niveaux. De facon global dans le fichier "init.conf" ou pour un script -particulier dans le fichier ${NC\_EXPL\_CFG}/.conf. + Les variables de session sont modifiable à 2 niveaux. De facon global dans le fichier "init.conf" ou pour un script + particulier dans le fichier ${NC\_EXPL\_CFG}/.conf. -La valeur définie dans "init.conf" sera utlisée sauf si elle a été surchargée dans le fichier de configuration du -script. + La valeur définie dans "init.conf" sera utlisée sauf si elle a été surchargée dans le fichier de configuration du + script. -Il y a cependant une spécificite pour SH\_RETENTION\_CPT et SH\_RETENTION\_LOG: - - ces variables sont definies une et une seule fois lors de la première initialisation. Ce qui signinfie qu'un - script qui aurait surchargé ces variables, ignorera l'initialisation de ces variable si il est appelé par un - autre script. + Il y a cependant une spécificite pour SH\_RETENTION\_CPT et SH\_RETENTION\_LOG: + - ces variables sont definies une et une seule fois lors de la première initialisation. Ce qui signinfie qu'un + script qui aurait surchargé ces variables, ignorera l'initialisation de ces variable si il est appelé par un + autre script. -### 1 - Variables globales générales + ### 1 - Variables globales générales - +-------------------+----------------------------+ - | 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 | - +-------------------+----------------------------+ + +-------------------+----------------------------+ + | 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 définies dans le fichier "tetalab.sh" -Les autres variables NC\_* sont définies dans le fichier "profile\_init.env" + Les variables NC\_EXPL\_ROOT, EXPL\_ROOT et NC\_EXPL\_SRVBATCH sont définies dans le fichier "tetalab.sh" + Les autres variables NC\_* sont définies dans le fichier "profile\_init.env" -### 2 - Variables de session + ### 2 - Variables de session -Cette liste n'est pas exhaustive, seules les principales variables sont citées. + Cette liste n'est pas exhaustive, seules les principales variables sont citées. - +--------------------+-------------------------------------------------------------------------------+ - | Nom | Usage | - +--------------------+-------------------------------------------------------------------------------+ - | SH_SESSION_ID | Numero unique d'exécution : _ | - | SH_SILENCE | Active 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 exécutant le script | - | SH_DIR | Dossier hébergeant le script | - | SH_PROG_VERSION | Version du script | - | SH_FICTRC | Pointe vers le fichier ${NC_EXPL_HST}/.hist | - | SH_FICMSG | Pointe vers le fichier ${NC_EXPL_MSG}/.msg | - | SH_FICCFG | Pointe vers le fichier ${NC_EXPL_CFG}/.conf | - | SH_FICSEM | Pointe vers le fichier /dev/shm/.sem | - | SH_FICLOG | Pointe vers le fichier ${NC_EXPL_LOG}/.log | - | SH_FICCPT | Pointe vers le fichier ${NC_EXPL_CPT}/.cpt | - | SH_NIV_DEBUG | Vaut 0 par défaut. Niveau d'affichage dans les fichiers de traces | - | SH_RETENTION_CPT | Vaut 8 par défaut. Duree de rétention en jours des fichiers de compte-rendus | - | SH_RETENTION_LOG | Vaut 8 par défaut. Duree de rétention en jours des fichiers de traces | - +--------------------+-------------------------------------------------------------------------------+ + +--------------------+-------------------------------------------------------------------------------+ + | Nom | Usage | + +--------------------+-------------------------------------------------------------------------------+ + | SH_SESSION_ID | Numero unique d'exécution : _ | + | SH_SILENCE | Active 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 exécutant le script | + | SH_DIR | Dossier hébergeant le script | + | SH_PROG_VERSION | Version du script | + | SH_FICTRC | Pointe vers le fichier ${NC_EXPL_HST}/.hist | + | SH_FICMSG | Pointe vers le fichier ${NC_EXPL_MSG}/.msg | + | SH_FICCFG | Pointe vers le fichier ${NC_EXPL_CFG}/.conf | + | SH_FICSEM | Pointe vers le fichier /dev/shm/.sem | + | SH_FICLOG | Pointe vers le fichier ${NC_EXPL_LOG}/.log | + | SH_FICCPT | Pointe vers le fichier ${NC_EXPL_CPT}/.cpt | + | SH_NIV_DEBUG | Vaut 0 par défaut. Niveau d'affichage dans les fichiers de traces | + | SH_RETENTION_CPT | Vaut 8 par défaut. Duree de rétention en jours des fichiers de compte-rendus | + | SH_RETENTION_LOG | Vaut 8 par défaut. Duree de rétention en jours des fichiers de traces | + +--------------------+-------------------------------------------------------------------------------+ -Remarque : Les variables SH\_SILENCE et SH\_NIV\_DEBUG sont controlées par les options "-s" et "-dbg" -si la gestion des options a été activée. + Remarque : Les variables SH\_SILENCE et SH\_NIV\_DEBUG sont controlées par les options "-s" et "-dbg" + si la gestion des options a été activée. -## III - Utilisation du socle bash - -Cette partie décrit sommairement les quelques règles d'usage pour écrire un script Bash avec le socle. + ## III - Utilisation du socle bash + + Cette partie décrit sommairement les quelques règles d'usage pour écrire un script Bash avec le socle. -### 1 - Cartouche + ### 1 - Cartouche -Les scripts doivent commencer par le cartouche ci-dessous : + Les scripts doivent commencer par le cartouche ci-dessous : - +----------------------------------------------------------------------------------------------------+ - | | - | #!/bin/bash | - | ##---------------------------------------------------------------------------- | - | ## Script : | - | ## Module Puppet : | - | ## Auteur : | - | ## Date : | - | ## Version : | - | ## Objet : | - | ## | - | # ---------------------------------------------------------------------------- | - | # Mise a jour : | - | # - - : | - | # 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: : | - | # ---------------------------------------------------------------------------- | - | # Liste des options et arguments | - | # @OPT: ::::::: # | - | # @OPT: :... # | - | # @ARG: :::: # | - | ##---------------------------------------------------------------------------- | - | ## | - | ## Syntaxes : | - | ## -------- | - | ## | - | ## prompt> | - | ## | - | ## : | - | ## | - | ## Fonctionnement : | - | ## -------------- | - | ## | - | ## | - | ## | - | ##---------------------------------------------------------------------------- | - +----------------------------------------------------------------------------------------------------+ + +----------------------------------------------------------------------------------------------------+ + | | + | #!/bin/bash | + | ##---------------------------------------------------------------------------- | + | ## Script : | + | ## Module Puppet : | + | ## Auteur : | + | ## Date : | + | ## Version : | + | ## Objet : | + | ## | + | # ---------------------------------------------------------------------------- | + | # Mise a jour : | + | # - - : | + | # 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: : | + | # ---------------------------------------------------------------------------- | + | # Liste des options et arguments | + | # @OPT: ::::::: # | + | # @OPT: :... # | + | # @ARG: :::: # | + | ##---------------------------------------------------------------------------- | + | ## | + | ## Syntaxes : | + | ## -------- | + | ## | + | ## prompt> | + | ## | + | ## : | + | ## | + | ## Fonctionnement : | + | ## -------------- | + | ## | + | ## | + | ## | + | ##---------------------------------------------------------------------------- | + +----------------------------------------------------------------------------------------------------+ -Note : Les lignes commençant par 2 "#" sont utilisées pour générer l'aide, leur maintient est donc nécéssaire -pour garantir la fiabilité 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 + Note : Les lignes commençant par 2 "#" sont utilisées pour générer l'aide, leur maintient est donc nécéssaire + pour garantir la fiabilité 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-données + ##### 1.1.1 Meta-données - : peut prendre les valeurs suivantes -> cre, ano, evo, typo -* cre : Création du script. -* evo : Évolution du script -> Ajout de nouvelles fonctionnalités, Amélioration du code. -* ano : Correction du code suite à un comportement inattendu. -* typo : Ajout de commentaires, de texte ou corrections gramaticales sans influence sur le code. - - : + : peut prendre les valeurs suivantes -> cre, ano, evo, typo + * cre : Création du script. + * evo : Évolution du script -> Ajout de nouvelles fonctionnalités, Amélioration du code. + * ano : Correction du code suite à un comportement inattendu. + * typo : Ajout de commentaires, de texte ou corrections gramaticales sans influence sur le code. + + : - : Format x.y.z -Pour le suivi des versions on utilisera le versionnement sémantique (voir paragraphe III-1.2). + : Format x.y.z + Pour le suivi des versions on utilisera le versionnement sémantique (voir paragraphe III-1.2). -##### 1.1.2 Paragraphe + ##### 1.1.2 Paragraphe -* Mise a jour : Ce paragraphe est utilisé pour suivre l'evolution des versions. La dernière version en -vigueur doit être reportée dans le premier paragraphe. + * Mise a jour : Ce paragraphe est utilisé pour suivre l'evolution des versions. La dernière version en + vigueur doit être reportée dans le premier paragraphe. -* Dependance : Permêt de définir la liste ainsi que la version des scripts qui sont appelés. -Dans le cas d'un changement cela permêt de connaître les scripts qui sont impactés. -Pour le moment aucun script n'exploite cette méta-donnée qui est presente pour un future usage. + * Dependance : Permêt de définir la liste ainsi que la version des scripts qui sont appelés. + Dans le cas d'un changement cela permêt de connaître les scripts qui sont impactés. + Pour le moment aucun script n'exploite cette méta-donnée qui est presente pour un future usage. -* Liste des options : La déclaration des options n'est pas obligatoire. - -Si aucune déclaration n'est présente alors la bibliothèque params.lib ne fait aucune action. -Dans ce cas les options par défaut -h, -log, -hist, -cpt, -s et -dbg ne seront pas disponible. + * Liste des options : La déclaration des options n'est pas obligatoire. + + Si aucune déclaration n'est présente alors la bibliothèque params.lib ne fait aucune action. + Dans ce cas les options par défaut -h, -log, -hist, -cpt, -s et -dbg ne seront pas disponible. -Si le script ne nécessite pas d'option mais que l'on souhaite disposer des options par défaut, il -faudra déclarer une option bidon. + Si le script ne nécessite pas d'option mais que l'on souhaite disposer des options par défaut, il + faudra déclarer une option bidon. - # @OPT: f:bidon:::::: + # @OPT: f:bidon:::::: -Si la déclaration existe alors le socle gèrera les paramètres en entrée du script, ainsi que -les options par défaut -h, -log, -hist, -cpt, -s et -dbg. Ces mots clé sont reservés et ne -peuvent pas être utilisé par le script. + Si la déclaration existe alors le socle gèrera les paramètres en entrée du script, ainsi que + les options par défaut -h, -log, -hist, -cpt, -s et -dbg. Ces mots clé sont reservés et ne + peuvent pas être utilisé par le script. -La déclaration est réalisée dans le paragraphe "Liste des options et arguments". Chaque -option est identifiée par l'entête de ligne "# @OPT:" suivi de la description. + La déclaration est réalisée dans le paragraphe "Liste des options et arguments". Chaque + option est identifiée par l'entête de ligne "# @OPT:" suivi de la description. -La description consiste en une liste de paramètres séparés par ":" + La description consiste en une liste de paramètres séparés par ":" + + ::::::: + + L'ordre des paramètres est figé et tous doivent etre présents. + + 8 champs sont obligatoires, soit 7 caracteres ":" (on ne compte pas le caracatere ":" suivant @OPT). + Exemple de déclaration 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: + + * : Propriété de l'attribu défini par l'aggrégation des lettres suivantes: + * f -> Option falcultative + * b -> Booléen + * o -> Option obligatoire + * M -> Argument transformé en majuscule + + * : nom de l'option (sans le tiret). Attention le nom de l'option est sensible à la casse. + + * : nom de la variable dans laquelle sera stockée le(s) argument(s) + si plusieurs arguments alors un tableau sera initialisé + L'index [n] commence à zero. + Le nombre d'arguments éffectivement passés a la commande est "${#[*]}". + La valeur max de l'index [n] est "${#[*]} - 1". + + * : nombre d'arguments attendus de la forme "min/max", "min/", "max" ou "" + si vide ou "0" alors l'option est booléene. + la forme "min/" considere le nombre max non determiné (infini) + + * : Valeur par défaut assignée à + Fonctionne si vaut 0/1 1/1 + + * : Liste des options mutellement exclusives séparées par une virgule. + + * : Liste des options inclusives séparées par une virgule. + + Lors de l'initialisation les marqueurs "@OPT" sont lues et analysées. + Le résultat est comparé aux arguments et options sousmis au script + et les variables suivantes son initialisées ... + + * SH\_OPTION\_ : Initialisée à "1" (Vrai) ou "0" (Faux) selon que l'option est respectivement utilisée ou non. + Il existe toujours une variable par option déclarée. Ceci concerne aussi les options par défaut géré par la bibliothèque params.lib + + * SH\_ARG\_ : Cette variable existe uniquement si le champ est null et si le type n'est pas booléen. + Par défaut elle est initialisée à null ou avec la valeur + Si le champ est renseigné, alors SH\_ARG\_ est remplacée pas . + Si l'option associée peut prendre plusieurs arguments, alors les variables SH\_ARG\_ ou sont des tableaux dont l'index commence a zéro. + La taille du tableau peut etre récuperée via ${#SH\_ARG\_[*]} ou ${#[*]}. + + Les options -h, -s, -log [id], -hist [N] et -dbg N sont prises en charge automatiquement. Ces noms sont donc reservées. + + Les options par défaut réalisent 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'exécution). + -cpt [id] : Affiche le dernier compte-rendu ou le Compte-rendu "id" (identifiant de session d'execution). + -hist [N] : Affiche l'historique des "N" dernières executions (N=10 par défaut) + -dbg N : Activation du mode debug au niveau "N". Active les messages gérés par la librairie fct_message + dont l'option -debug est utilisée. + + + * Arguments : La déclaration des argument du script n'est pas obligatoire + + Attention : Si aucune option "@OPT:" n'est déclarée alors il n y aura pas de prise en charge des arguments. + Si votre script ne nécessite pas d'option, mais qu'il presente des arguments, il faudra alors déclarer une + option bidon : + + # @OPT: f:bidon:::::: + + La déclaration est réalisé dans le paragraphe "Liste des options et arguments". + Elle est identifiée par l'entête 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 existent, alors seule la premiere est prise en compte). + + La description consiste en une liste de paramètres séparés par ":" + + :::: + + L'ordre des paramètres est figé et tous doivent être présents. + + * : Propriéte de l'attribu défini par l'aggrégation des lettres suivantes: + + f -> Argument falcultative + o -> Argument obligatoire + M -> Argument transforme en majuscule + + * : nom de la variable dans laquelle sera stockée le(s) argument(s) + si plusieurs arguments alors un tableau sera initialisé + L'index [n] commence a zero. + Le nombre d'arguments effectivement passés à la commande est "${#[*]}". + La valeur max de l'index [n] est "${#[*]} - 1". + + Si n'est pas renseigné alors la variable SH\_ARGS[] est initialisée + + * : nombre d'arguments attendus de la forme "min/max", "min/", "max" ou "". + si vide alors on considère que le nombre d'arguments est a minima de 1. + la forme "min/" considère le nombre est a minima de "min". + + * : Valeur par défaut assignée a + Fonctionne si vaut 0/1 1/1 + + ATTENTION: + Si le caractère "&" est présent dans la valeur d'un argument, alors cette valeur doit être encadrée + par une simple quote et le caractère "&" doit être protégé par un anti-slash "\". + + Dans le cas contraire le shell génèrera un fils qui tentera l'execution d'un script portant le nom de la valeur + de l'argument. + + #### 1.2 Versionnement sémantique + + ##### 1.2.1 Usage + + L'idée de l'utilisation du versionnement sémantique est de définir clairement les intentions + d'un changement dans un code pour les clients de ce dernier. Ceci permet de fiabiliser la mise en + place de dépendances et de déterminer les impacts d'un changement. + + ##### 1.2.2 Format + + Le format utilisé 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 Sémantique + + * Version majeure X : Il vaut "0" lors du développement, le script est considéré non valide et ne + devrait pas être appelé par d'autres scripts. Une fois le script valide la version doit etre 1.0.0 + (première version stable). + + Il doit etre incrementé si des changements dans le code n'assure plus la compatibilité ascendante. + Les identifiants de version mineure et de correction doivent etre remis à zero quand l'identifiant + de version majeure est incrementé. + + * Version mineur Y : Doit être incrementé lors de l'ajout de nouvelles fonctionnalités ou d'amélioration + du code qui n'ont pas d'impact sur la compatibilité ascendante. L'identifiant de version de correction doit + être remis a zero lorsque l'identifiant de version mineure est incrementé. + + * Version de correction Z : Doit être incrementé si seules des corrections rétro-compatibles sont introduites. + Une correction est définie comme un changement interne qui corrige un comportement incorrect. + Il peut être incrementé lors de correction typographique ou grammaticale. - ::::::: -L'ordre des paramètres est figé et tous doivent etre présents. + ### 2 - Initialisation du socle -8 champs sont obligatoires, soit 7 caracteres ":" (on ne compte pas le caracatere ":" suivant @OPT). -Exemple de déclaration valide : + Par défaut les bibliothèques du socle sont chargées à la connexion. Mais pour qu'elles puissent être operationnelles + il faut initialiser les variables de session. - # @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: + Ceci est réalisé en sourcant le fichier "${NC\_EXPL\_CFG}/init.conf" au debut du script : - * : Propriété de l'attribu défini par l'aggrégation des lettres suivantes: - * f -> Option falcultative - * b -> Booléen - * o -> Option obligatoire - * M -> Argument transformé en majuscule + Remarque: L'analyse des options et arguments est aussi réalisée par "${NC\_EXPL\_CFG}/init.conf". - * : nom de l'option (sans le tiret). Attention le nom de l'option est sensible à la casse. - - * : nom de la variable dans laquelle sera stockée le(s) argument(s) -si plusieurs arguments alors un tableau sera initialisé -L'index [n] commence à zero. -Le nombre d'arguments éffectivement passés a la commande est "${#[*]}". -La valeur max de l'index [n] est "${#[*]} - 1". - - * : nombre d'arguments attendus de la forme "min/max", "min/", "max" ou "" -si vide ou "0" alors l'option est booléene. -la forme "min/" considere le nombre max non determiné (infini) - - * : Valeur par défaut assignée à -Fonctionne si vaut 0/1 1/1 - - * : Liste des options mutellement exclusives séparées par une virgule. - - * : Liste des options inclusives séparées par une virgule. - -Lors de l'initialisation les marqueurs "@OPT" sont lues et analysées. -Le résultat est comparé aux arguments et options sousmis au script -et les variables suivantes son initialisées ... - - * SH\_OPTION\_ : Initialisée à "1" (Vrai) ou "0" (Faux) selon que l'option est respectivement utilisée ou non. -Il existe toujours une variable par option déclarée. Ceci concerne aussi les options par défaut géré par la bibliothèque params.lib - - * SH\_ARG\_ : Cette variable existe uniquement si le champ est null et si le type n'est pas booléen. -Par défaut elle est initialisée à null ou avec la valeur -Si le champ est renseigné, alors SH\_ARG\_ est remplacée pas . -Si l'option associée peut prendre plusieurs arguments, alors les variables SH\_ARG\_ ou sont des tableaux dont l'index commence a zéro. -La taille du tableau peut etre récuperée via ${#SH\_ARG\_[*]} ou ${#[*]}. - -Les options -h, -s, -log [id], -hist [N] et -dbg N sont prises en charge automatiquement. Ces noms sont donc reservées. - -Les options par défaut réalisent 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'exécution). - -cpt [id] : Affiche le dernier compte-rendu ou le Compte-rendu "id" (identifiant de session d'execution). - -hist [N] : Affiche l'historique des "N" dernières executions (N=10 par défaut) - -dbg N : Activation du mode debug au niveau "N". Active les messages gérés par la librairie fct_message - dont l'option -debug est utilisée. + +----------------------------------------------------------------------------------------------------+ + | | + | #!/bin/bash | + | ##---------------------------------------------------------------------------- | + | . | + | | + | . | + | ##---------------------------------------------------------------------------- | + | #----------------------------------------------------------------------------- | + | # 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 | + +----------------------------------------------------------------------------------------------------+ -* Arguments : La déclaration des argument du script n'est pas obligatoire -Attention : Si aucune option "@OPT:" n'est déclarée alors il n y aura pas de prise en charge des arguments. -Si votre script ne nécessite pas d'option, mais qu'il presente des arguments, il faudra alors déclarer une -option bidon : + ### 3 - Structure d'un script - # @OPT: f:bidon:::::: + Voici les éléments qui devraient être présents a minima dans les script Bash. Ceci est recommandé pour + assurer une homogénéite dans l'ensemble du socle. -La déclaration est réalisé dans le paragraphe "Liste des options et arguments". -Elle est identifiée par l'entête de ligne "# @ARG:" suivi de la description. + +----------------------------------------------------------------------------------------------------+ + | | + | #!/bin/bash | + | ##---------------------------------------------------------------------------- | + | . | + | | + | . | + | ##---------------------------------------------------------------------------- | + | #----------------------------------------------------------------------------- | + | # 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 | + | { ... | + | } | + | | + | #----------------------------------------------------------------------------- | + | 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"} # | + | ... | + | | + | # -- Control de coherence des options | + | # -- -------------------------------- | + | | + | # -- Traitement | + | # -- ---------- | + | | + | ... | + | | + | fct_erreur 0 | + +----------------------------------------------------------------------------------------------------+ -Il ne peut y avoir qu'une ligne de description pour les arguments. (Si plusieurs lignes avec le -marqueur @ARG existent, alors seule la premiere est prise en compte). -La description consiste en une liste de paramètres séparés par ":" - :::: + Note : La construction G\_VAR1=${G\_AVR1:="Valeur par défaut"} permet de définir une variable avec une + valeur par défaut, qui peut être surchargée dans le fichier de configuration {NC\_EXPL\_CFG}/.conf -L'ordre des paramètres est figé et tous doivent être présents. + Concernant les fonctions /fct\_message/ et /fct\_erreur/ voir le chapitre V. - * : Propriéte de l'attribu défini par l'aggrégation des lettres suivantes: - f -> Argument falcultative - o -> Argument obligatoire - M -> Argument transforme en majuscule + ### 4 - Actions réalisées au lancement d un script - * : nom de la variable dans laquelle sera stockée le(s) argument(s) -si plusieurs arguments alors un tableau sera initialisé -L'index [n] commence a zero. -Le nombre d'arguments effectivement passés à la commande est "${#[*]}". -La valeur max de l'index [n] est "${#[*]} - 1". + Le script commence par le chargement de la configuration ". ${NC\_EXPL\_CFG}/init.conf" + un certain nombre d'actions sont effectuées par défaut en plus de l'initialisation des variables de session. -Si n'est pas renseigné alors la variable SH\_ARGS[] est initialisée + * Initialisation des variables de session (Cf. II.3) + * Génération d'un numéro de session unique sous la varable ${SH\_SESSION\_ID} + * Chargement du fichier ${SH\_FICCFG} + * Rotation des fichiers ${SH\_FICLOG} et ${SH\_FICCPT} selon les rétentions respective ${SH\_RETENTION\_LOG} et ${SH\_RETENTION\_CPT} + * Purge des fichiers temporaires (${NC\_EXP\_ROOT}/tmp) antérieurs selon la retentions ${SH\_RETENTION\_LOG} et + suppression des fichiers générés 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 début exécution ainsi que les arguments passés au script + * Initialisation du fichier ${SH\_FICLOG} à vide + * Analyse des paramètres passés au script - * : nombre d'arguments attendus de la forme "min/max", "min/", "max" ou "". -si vide alors on considère que le nombre d'arguments est a minima de 1. -la forme "min/" considère le nombre est a minima de "min". + Cette analyse ne fonctionne que si les options ont été déclarées dans l'entête du script (Cf. III.1.1.2) - * : Valeur par défaut assignée a -Fonctionne si vaut 0/1 1/1 -ATTENTION: -Si le caractère "&" est présent dans la valeur d'un argument, alors cette valeur doit être encadrée -par une simple quote et le caractère "&" doit être protégé par un anti-slash "\". -Dans le cas contraire le shell génèrera un fils qui tentera l'execution d'un script portant le nom de la valeur -de l'argument. + ## IV - Nomenclature -#### 1.2 Versionnement sémantique + ### 1 - Fichiers temporaires -##### 1.2.1 Usage + Les fichiers temporaires doivent etre écrits dans le répertoire ${NC\_EXPL\_TMP}. + Les noms des fichiers temporaires sont de la forme : \_${SH\_SESSION\_ID}.tmp + De cette facon il seront gérés par le socle (Suppresion automatique). -L'idée de l'utilisation du versionnement sémantique est de définir clairement les intentions -d'un changement dans un code pour les clients de ce dernier. Ceci permet de fiabiliser la mise en -place de dépendances et de déterminer les impacts d'un changement. + ### 2 - Nom des exécutables (fichiers du dossier ${EXPL\_ROOT}/bin ) -##### 1.2.2 Format + Les noms des fichiers doivent être de la forme : -Le format utilisé 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.
+
+    * 
 : est une des valeurs suivantes : "sys", "dba", "exp", "ctl", "aud", "int"
+      * "sys" : Scrits d'administration système.
+      * "dba" : Scripts d'administration base de données
+    Ces scripts peuvent présenter des risques et doivent faire l'objet d'une attention particulière
+    lors de leurs exécution.
+      * "exp" : Scripts d'exploitation dévolus principalement aux traitements réccurents
+    Ces scripts sont réservés à l'exploitation courante. Il peuvent modifier le système dans le cadres de
+    traitements réccurents.
+    Leurs exécution est de risque modére, comme respecter une date d'execution.
+    Il sont reservés à l'exploitation système uniquement.
+    Dans le cas d'un traitement réccurrent pour le compte d'une application le nom doit
+    être de la forme \_.
+      * "int" : Scripts dédiés aux interfaces entre applications
+    Ces scripts doivent faire l'objet d'une attention particulière car il peuvent modifier
+    les données applicatives et peuvent être contraints par des conditions d'execution.
+      * "ctl" : Script de contrôle (dévolu principalement au système de monitoring)
+      * "aud" : Script d'audit ne modifiant pas le système.
+    Ces scripts peuvent être executés sans aucun risque.
+
+    *  est libre, doit refléter si possible la fonction du script.
+
+    *  est une des valeurs suivantes :
+
+        "sh" : Script Bash.
         
-##### 1.2.3 Sémantique
-
-* Version majeure X : Il vaut "0" lors du développement, le script est considéré non valide et ne 
-devrait pas être appelé par d'autres scripts. Une fois le script valide la version doit etre 1.0.0
-(première version stable).
-
-Il doit etre incrementé si des changements dans le code n'assure plus la compatibilité ascendante.
-Les identifiants de version mineure et de correction doivent etre remis à zero quand l'identifiant
-de version majeure est incrementé.
-
-* Version mineur Y : Doit être incrementé lors de l'ajout de nouvelles fonctionnalités ou d'amélioration
-du code qui n'ont pas d'impact sur la compatibilité ascendante. L'identifiant de version de correction doit
-être remis a zero lorsque l'identifiant de version mineure est incrementé.
-
-* Version de correction Z : Doit être incrementé si seules des corrections rétro-compatibles sont introduites. 
-Une correction est définie comme un changement interne qui corrige un comportement incorrect.
-Il peut être incrementé lors de correction typographique ou grammaticale.
-
-    
-### 2 - Initialisation du socle
-
-Par défaut les bibliothèques du socle sont chargées à la connexion. Mais pour qu'elles puissent être operationnelles
-il faut initialiser les variables de session.
-
-Ceci est réalisé en sourcant le fichier "${NC\_EXPL\_CFG}/init.conf" au debut du script :
-
-Remarque: L'analyse des options et arguments est aussi réalisée par "${NC\_EXPL\_CFG}/init.conf".
-
-    +----------------------------------------------------------------------------------------------------+
-    |                                                                                                    |
-    |       #!/bin/bash                                                                                  |
-    |       ##----------------------------------------------------------------------------               |
-    |       .                                                                                            |
-    |                                                                                         |
-    |       .                                                                                            |
-    |       ##----------------------------------------------------------------------------               |
-    |       #-----------------------------------------------------------------------------               |
-    |       #                 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 éléments qui devraient être présents a minima dans les script Bash. Ceci est recommandé pour
-assurer une homogénéite dans l'ensemble du socle.
-
-    +----------------------------------------------------------------------------------------------------+
-    |                                                                                                    |
-    |       #!/bin/bash                                                                                  |
-    |       ##----------------------------------------------------------------------------               |
-    |       .                                                                                            |
-    |                                                                                         |
-    |       .                                                                                            |
-    |       ##----------------------------------------------------------------------------               |
-    |       #-----------------------------------------------------------------------------               |
-    |       #                 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                                                                              |
-    |       { ...                                                                                        |
-    |       }                                                                                            |
-    |                                                                                                    |
-    |       #-----------------------------------------------------------------------------               |
-    |       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"}           #                                |
-    |       ...                                                                                          |
-    |                                                                                                    |
-    |       # -- Control de coherence des options                                                        |
-    |       # -- --------------------------------                                                        |
-    |                                                                                                    |
-    |       # -- Traitement                                                                              |
-    |       # -- ----------                                                                              |
-    |                                                                                                    |
-    |       ...                                                                                          |
-    |                                                                                                    |
-    |       fct_erreur 0                                                                                 |
-    +----------------------------------------------------------------------------------------------------+
-
-
-
-Note : La construction /G\_VAR1=${G\_AVR1:="Valeur par défaut"}/ permet de définir une variable avec une 
-valeur par défaut, qui peut être surchargée dans le fichier de configuration {NC\_EXPL\_CFG}/.conf
-
-Concernant les fonctions /fct\_message/ et /fct\_erreur/ voir le chapitre V.
-
-
-### 4 - Actions réalisées au lancement d un script
-
-Le script commence par le chargement de la configuration ". ${NC\_EXPL\_CFG}/init.conf"
-un certain nombre d'actions sont effectuées par défaut en plus de l'initialisation des variables de session.
-
-* Initialisation des variables de session (Cf. II.3)
-* Génération d'un numéro de session unique sous la varable ${SH\_SESSION\_ID}
-* Chargement du fichier ${SH\_FICCFG}
-* Rotation des fichiers ${SH\_FICLOG} et ${SH\_FICCPT} selon les rétentions respective ${SH\_RETENTION\_LOG} et ${SH\_RETENTION\_CPT}
-* Purge des fichiers temporaires (${NC\_EXP\_ROOT}/tmp) antérieurs selon la retentions ${SH\_RETENTION\_LOG} et
-suppression des fichiers générés 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 début exécution ainsi que les arguments passés au script
-* Initialisation du fichier ${SH\_FICLOG} à vide
-* Analyse des paramètres passés au script
-
-Cette analyse ne fonctionne que si les options ont été déclarées dans l'entête du script (Cf. III.1.1.2)
-
-
-
-## IV - Nomenclature
-
-### 1 - Fichiers temporaires
-
-Les fichiers temporaires doivent etre écrits dans le répertoire ${NC\_EXPL\_TMP}.
-Les noms des fichiers temporaires sont de la forme : \_${SH\_SESSION\_ID}.tmp
-De cette facon il seront gérés par le socle (Suppresion automatique).
-
-### 2 - Nom des exécutables (fichiers du dossier ${EXPL\_ROOT}/bin )
-
-Les noms des fichiers doivent être de la forme :
-
-    
_
-    
_.
-    
__[_].
-    _.
-
-
-* 
 : est une des valeurs suivantes : "sys", "dba", "exp", "ctl", "aud", "int"
-  * "sys" : Scrits d'administration système.
-  * "dba" : Scripts d'administration base de données
-Ces scripts peuvent présenter des risques et doivent faire l'objet d'une attention particulière
-lors de leurs exécution.
-  * "exp" : Scripts d'exploitation dévolus principalement aux traitements réccurents
-Ces scripts sont réservés à l'exploitation courante. Il peuvent modifier le système dans le cadres de
-traitements réccurents.
-Leurs exécution est de risque modére, comme respecter une date d'execution.
-Il sont reservés à l'exploitation système uniquement.
-Dans le cas d'un traitement réccurrent pour le compte d'une application le nom doit
-être de la forme \_.
-  * "int" : Scripts dédiés aux interfaces entre applications
-Ces scripts doivent faire l'objet d'une attention particulière car il peuvent modifier
-les données applicatives et peuvent être contraints par des conditions d'execution.
-  * "ctl" : Script de contrôle (dévolu principalement au système de monitoring)
-  * "aud" : Script d'audit ne modifiant pas le système.
-Ces scripts peuvent être executés sans aucun risque.
-
-*  est libre, doit refléter si possible la fonction du script.
-
-*  est une des valeurs suivantes :
-
-    "sh" : Script Bash.
-    
-*  est le nom de l'application à laquelle le script est dédié.
-Ces scripts sont réservés à une application particulière dans le cadres de l'exploitation
-réccurente de l'application.
+    *  est le nom de l'application à laquelle le script est dédié.
+    Ces scripts sont réservés à une application particulière dans le cadres de l'exploitation
+    réccurente de l'application.