Commit b43ae738 authored by fenwe's avatar fenwe
Browse files

2021.06.06:v1.0.0

 * legite-libs.sh
 * execLibrairiesCall: appelle multiple de librairies en argument
parent e5f98ed5
......@@ -4,133 +4,41 @@
#http://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html#The-Set-Builtin
set -u
#set -eE # same as: `set -o errexit -o errtrace`
declare -r SCRIPT_PATH=`realpath $0`; # chemin absolu complet du script rep + nom
declare -r SCRIPT_REP=`dirname $SCRIPT_PATH`; # repertoire absolu du script (pas de slash de fin)
declare -r SCRIPT_FILENAME=${0##*/}; # /path/nom.pasext.ext -> nom.pasext.ext
declare -r SCRIPT_NAME=${SCRIPT_FILENAME%.*} # nom.pasext.ext -> nom.pasext # uniquement le nom
declare -r SCRIPT_EXT=${SCRIPT_FILENAME##*.} # nom.pasext.ext -> ext # uniquement l'extention
declare -r SCRIPT_PATH=`realpath $0`; # chemin absolu complet du script rep + nom
declare -r SCRIPT_REP=`dirname $SCRIPT_PATH`;# repertoire absolu du script (pas de slash de fin)
declare -r VERSION="v1.0.0-2021.06.06";
declare -r VERSION="v0.0.4";
################
# colorisation #
################
RESET_COLOR=$(tput sgr0)
BOLD=`tput smso`
NOBOLD=`tput rmso`
BLACK=`tput setaf 0`
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
CYAN=`tput setaf 4`
MAGENTA=`tput setaf 5`
BLUE=`tput setaf 6`
WHITE=`tput setaf 7`
NORMAL=$WHITE
INFO=$BLUE
CMD=$YELLOW
WARN=$RED
TITRE1=$GREEN
TITRE2=$MAGENTA
DEBUG_COLOR=$MAGENTA
####################
# CODES DE SORTIES #
####################
#http://www.gnu.org/software/bash/manual/html_node/Exit-Status.html#Exit-Status
#https://abs.traduc.org/abs-5.0-fr/apd.html#exitcodesref
#https://tldp.org/LDP/abs/html/exitcodes.html
declare -r -i E_MISC=1
declare -r -i E_INTERNE=2
declare -r -i E_CMD_CANT_EXEC=126
declare -r -i E_CMD_NOT_FOUND=127
declare -r -i E_EXIT_BAD=128 # valeur d'exit invalide
#>=129.255 FATAL_ERROR
declare -r -i E_CTRL_C=130
declare -r -i E_EXIT_EOR=255
# 64..113: USER EXIT
declare -r -i E_ARG_NONE=65
declare -r -i E_ARG_BAD=66
#################
# NOTIFICATIONS #
#################
declare -a notifs; # tableau contenant la pile de notifications
declare -i notifsIndex=0; # index utilisé pour le remplissage de la pile de notifs
#notifsAdd($txt) # ajoute une notif dans la pile de notifs
notifsAdd(){
local notif="$1"
if [ -z "$notif" ]
then
return 1;
fi
notifs[$notifsIndex]="$notif"
((notifsIndex++))
return 0;
}
#notifsShow($separateur="\n") # affiche la pile des notifs
notifsShow(){
if [ -z "${notifs[*]}" ]
then
return 1;
fi
local separateur=${1:-"\n"}
local index=0;
for notif in "${notifs[@]}"
do
echo -ne "$notif$separateur";
done
return 0;
}
if [ ! -f "$SCRIPT_REP/legite-lib.sh" ]
then
echo "$SCRIPT_REP/legite-lib.sh introuvable -> quit"
exit 1
fi
. $SCRIPT_REP/legite-lib.sh
#############
# variables #
# init #
#############
# --- Definir si root ou user --- #
[ "$(id -u)" == "0" ] && declare -r -i IS_ROOT=1 || declare -r -i IS_ROOT=0;
# --- tag d'interuption --- #
declare -i isTrapCAsk=0; # demande d'interuption par control C
# --- variables generiques --- #
declare -r -i argNb=$#;
declare argument; # argument actuel ($1)
declare parametre; # parametre actuel ($2)
declare -i isUpdate=0; # demande de update
declare -i verbose=0; # niveau de verbosité
declare -i isDebug=0;
declare -i isDebugShowVars=0; # montrer les variables
# --- variables des includes --- #
declare -r UPDATE_HTTP="http://updates.legite.org/legite-install";
declare -r UPDATE_HTTP="$UPDATE_HTTP_ROOT/legite-install";
declare -i isConf=0;
declare -r CONF_ETC_ROOT="/etc/legite";
declare -r CONF_ETC_FILENAME="$SCRIPT_NAME.etc.$SCRIPT_EXT";
declare -r CONF_ETC_PATH="$CONF_ETC_ROOT/$CONF_ETC_FILENAME";
#declare -i isConf=0;
#declare -r CONF_ETC_ROOT="/etc/legite";
#declare -r CONF_ETC_FILENAME="$SCRIPT_NAME.etc.$SCRIPT_EXT";
#declare -r CONF_ETC_PATH="$CONF_ETC_ROOT/$CONF_ETC_FILENAME";
#declare -r CONF_USER_ROOT="/root/.legite";
declare -r CONF_USER_ROOT="$HOME/.legite";
declare -r CONF_USER_FILENAME="$SCRIPT_NAME.sh";
declare -r CONF_USER_PATH="$CONF_USER_ROOT/$CONF_USER_FILENAME";
declare conf_run=""; # fichier de configuration donné par --conf
#declare -r CONF_USER_ROOT="$HOME/.legite";
#declare -r CONF_USER_FILENAME="$SCRIPT_NAME.sh";
#declare -r CONF_USER_PATH="$CONF_USER_ROOT/$CONF_USER_FILENAME";
#declare conf_run=""; # fichier de configuration donné par --conf
# le fichier origine est copier lors de chaque installation
declare -r CONF_ORI_FILENAME="$SCRIPT_NAME.ori.sh";
declare -r CONF_ORI_PATH="$CONF_USER_ROOT/$CONF_ORI_FILENAME";
declare -r CONF_ORI_PATH="$CONF_USR_ROOT/$CONF_ORI_FILENAME";
#isConf=0; # chargement d'un fichier de configuration(CONF_USER_FILENAME) doit il etre lancé?
# --- variables des parametres supplementaires --- #
......@@ -139,14 +47,11 @@ declare -r CONF_ORI_PATH="$CONF_USER_ROOT/$CONF_ORI_FILENAME";
# --- variables du projet --- #
declare -A fonctionsTbl; # tableau contenant les fonctions (remplis par les fichiers de configuration)
declare -i isShowLibs=0; # affiche une liste des fonctions definies
#declare -A librairiesTbl; # tableau contenant les fonctions (remplis par les fichiers de configuration)
#declare -i isShowLibs=0; # affiche une liste des fonctions definies
#librairieRep="$CONF_USER_ROOT/collections";
declare -a librairiesTbl; # (array) liste des librairies appellées
declare -i librairiesTblIndex=0 # index pour construire le tableau
declare librairie=""; # librairie en cours
#declare collectionPath=""; # chemin d'acce a la collection en cours (inutile est un index de fonctionsTbl)
#declare collectionPath=""; # chemin d'acce a la collection en cours (inutile est un index de librairiesTbl)
# #################### #
......@@ -155,136 +60,30 @@ declare librairie=""; # librairie en cours
usage (){
if [ $argNb -eq 0 ];
then
echo "$SCRIPT_FILENAME [--showLibs] [--update] [--conf] [programme]";
echo "$SCRIPT_FILENAME [--showLibs] [--update] [--conf=fichier.sh] [programme]";
echo " [-d] [--showVars] # fonctions de debug";
echo "--update: update le programme legite-install.sh lui meme"
echo "--conf: execute $CONF_USER_PATH si existe"
echo "--conf: execute un fichier de configuration si existe"
echo "--showLibs: Affiche la liste des fonctions"
echo "Fichiers de configuration"
echo "$CONF_ETC_PATH: est copier a chaque installation et mise a jours (ne pas editer)"
echo "$CONF_ORI_PATH: est un exemple d'utilisation"
#echo "$CONF_USER_PATH: se lance avec --conf"
echo "programme: si fournis execute la fonction (contennu dans un fichier de conf) . 1 seule pour l'instant"
echo "$CONF_USR_PATH"
echo "$CONF_PSP_PATH: se lance avec --conf"
echo "programme: si fournis execute la fonction (contenu dans un fichier de conf) . 1 seule pour l'instant"
exit $E_ARG_NONE;
fi
}
showVars(){
if [ $isDebugShowVars -eq 1 ];
then
isDebugOld=$isDebug;
isDebug=1;
#showDebug " $LINENO"
showDebug " argNb=$argNb"
showDebug " IS_ROOT=$IS_ROOT"
showDebug " isUpdate=$isUpdate"
showDebug " verbose=$verbose"
showDebug " isDebug=$isDebugOld"
showDebug " isDebugShowVars=$isDebugShowVars"
#showDebug " isConf=$isConf"
showDebug " CONF_ETC_ROOT=$CONF_ETC_ROOT";
showDebug " CONF_ETC_FILENAME=$CONF_ETC_FILENAME";
showDebug " CONF_ETC_PATH=$CONF_ETC_PATH"
showDebug " CONF_USER_ROOT=$CONF_USER_ROOT";
showDebug " CONF_USER_FILENAME=$CONF_USER_FILENAME";
showDebug " CONF_USER_PATH=$CONF_USER_PATH";
showDebug " CONF_ORI_FILENAME=$CONF_ORI_FILENAME";
showDebug " CONF_ORI_PATH=$CONF_ORI_PATH";
showDebug " conf_run=$conf_run"
showDebug " isShowLibs=$isShowLibs"
#showDebug " PSP_sup=$PSP_sup"
isDebug=$isDebugOld;
fi
}
#########
# DEBUG #
#########
#evalCmd($cmd $ligneNu $txt)
evalCmd(){
if [ $# -gt 0 ]
then
local ligneNu=${2:-""}
local txt=${3:-""}
echo "${DEBUG_COLOR}$ligneNu$CMD$1$NORMAL$txt";
eval "$1";
return $?
fi
}
#showDebug(texte pre post)
showDebug(){
if [ $isDebug -eq 1 -a $# -gt 0 ]
then
texte="$1";
local pre=${2:-""}
local post=${3:-""}
echo "${DEBUG_COLOR}$pre$texte$post$NORMAL"
fi
}
# ############ #
# INTERUPTIONS #
# ############ #
#http://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#Bourne-Shell-Builtins
#trap -l #trap --help
#https://linuxhint.com/bash_error_handling/
trap ctrl_c INT
function ctrl_c() {
isTrapCAsk=1;
showDebug "** Trapped CTRL-C"
showVarsLocal(){
showDebug "$FUNCNAME($@)";
}
################
# MISE A JOURS #
################
# telecharge la derniere version en supprimant la version local
#updateProg src dest
updateProg(){
if [ $isUpdate -eq 1 ]
then
src="$1"; dest="$2"
local -i isRootNeeded=1;
if [ $# -ge 3 ]
then
isRootNeeded=$3;
fi
if [ $IS_ROOT -eq 0 -a $isRootNeeded -eq 1 ]
then
echo "${WARN}root est requis pour updater (ecrire dans /usr/local/bin/)"
return -1
fi
echo "${INFO}Update de $src$NORMAL"
if [ -f "$dest" ]
then
evalCmd "cp '$dest' '$dest.bak'" $LINENO; # Fait une sauvegarde
evalCmd "rm '$dest'";
fi
evalCmd "wget -O \"$dest\" \"$src\""
if [ -f "$dest" ]
then
chmod +x $dest
else
echo "${WARN}Erreur lors de l'instalation de $dest.$NORMAL"
evalCmd "mv '$dest.bak' '$dest' " # on restaure la sauvegarde
fi
fi
}
# - telecharge et installe la derniere version en remplacant le script qui a lancer l'update - #
selfUpdate (){
if [ $isUpdate -eq 1 -a $IS_ROOT -eq 1 ];
......@@ -300,83 +99,28 @@ selfUpdate (){
}
###############################
# GESTION DE LA CONFIGURATION #
###############################
# creer et execute les fichiers locaux
# LocalFileExec(localName){
execFile(){
showDebug "execFile($@)";
local localName="$1";
if [ -f "$localName" ];
then
if [ ! -x "$localName" ];then evalCmd "chmod +x $localName;"; fi
echo "nano $localName # Pour modifier le fichier"
evalCmd ". $localName";
else
echo "${WARN}$localName n'existe pas.$NORMAL"
fi
}
# ################### #
# FONCTIONS DU PROJET #
# ################### #
##########################
# GESTION DES LIBRAIRIES #
##########################
showLibs(){
if [ $isShowLibs -eq 1 ];
then
echo "Librairies possibles:";
#trie du tableau de librairies
IFS=$'\n' sorted=($(sort <<<"${fonctionsTbl[*]}"))
unset IFS
local out="";
for value in "${sorted[@]}";
do
out="$out $value"
done;
echo "$out";
fi
}
isLibExist(){
local lib="$1"
for value in "${fonctionsTbl[@]}";
do
if [ "$value" == "$lib" ]; then return 1; fi
done;
return 0;
}
# ########## #
# PARAMETRES #
# ########## #
TEMP=`getopt \
--options v::dVhnS \
--long verbose::,debug,showVars,version,help,update,listeFormats,listeCollections,conf::,convert:: \
-- "$@"`
# Note the quotes around `$TEMP': they are essential!
TEMP=$(getopt \
--options v::dVhnS \
--long help,version,verbose::,debug,showVars,update,conf::,showLibs \
-- "$@")
eval set -- "$TEMP"
#if [ $? -eq 0 ] ; then echo "options requise. Sortie" >&2 ; exit 1 ; fi
#echo "$couleurWARN nb: $# $couleurNORMAL";
#echo "${INFO}argNb:$NORMAL $#"
#echo "${INFO}arg:$NORMAL $?"
while true
do
if [ $isTrapCAsk -eq 1 ]
then
break;
fi
if [ $isTrapCAsk -eq 1 ];then break;fi
argument=${1:-""}
parametre=${2:-""}
#echo "argument:'$argument', parametre='$parametre'"
......@@ -391,29 +135,22 @@ do
"") verbosity=1; shift 2 ;;
*) #echo "Option c, argument \`$2'" ;
verbosity=$2; shift 2;;
esac ;;
esac
;;
# - Debug - #
-d|--debug)
isDebug=1;
isDebugShowVars=1;
shift
;;
--showVars)isDebugShowVars=1; shift ;;
-d|--debug) isDebug=1;isDebugShowVars=1;shift; ;;
--showVars) isDebugShowVars=1; shift ;;
# - Mise a jours - #
--update) isUpdate=1; shift ;;
# - Mise a jours - #
--update) isUpdate=1; shift ;;
# - Chargement d'un fichier de configuration - #
--conf) CONF_PSP_PATH="$parametre"; shift 2; ;;
# - Librairies - #
--showLibs) isShowLibs=1; shift ;;
# - Chargement d'un fichier de configuration - #
--conf)
isConf=1;
conf_run="$2"
shift 2
;;
#--) # parcours des arguments supplementaires
--)
if [ -z "$parametre" ]
......@@ -423,12 +160,11 @@ do
fi
#echo "--)"
librairie="$parametre";
librairiesTbl[librairiesTblIndex]="$librairie"
((librairiesTblIndex++))
librairiesCall[$librairiesCallIndex]="$librairie"
((librairiesCallIndex++))
shift 2;
;;
*)
if [ -z "$argument" ]
then
......@@ -437,83 +173,39 @@ do
fi
#librairie=${2:-""}
librairie="$argument";
librairiesTbl[librairiesTblIndex]="$librairie"
((librairiesTblIndex++))
librairiesCall[$librairiesCallIndex]="$librairie"
((librairiesCallIndex++))
shift 1;
;;
esac
done
########
# main #
########
#clear;
#echo "$INFO####";
#echo "${INFO}SCRIPT_REP:$NORMAL $SCRIPT_REP";
echo "${INFO}$SCRIPT_PATH $VERSION$NORMAL";
#echo "${INFO}SCRIPT_FILENAME:$NORMAL $SCRIPT_FILENAME";
#echo "${INFO}SCRIPT_NAME:$NORMAL $SCRIPT_NAME";
# - 0- usage - #
usage;
# - 1- mise a jours du programme - #
selfUpdate;
# - Affichage des variables - #
showVars;
# - sortie en cas d'install/mise a jours - #
if [ $isUpdate -eq 1 ]; then
exit 0;
fi
# - Chargement de ETC - #
execFile "$CONF_ETC_PATH";
# - Chargement du conf USER - #
if [ $isConf -eq 1 ]
then
execFile "$CONF_USER_PATH"
fi
# - Chargement du conf run (PSP) - #
if [ ! -z "$conf_run" ]
then
if [ -x "$conf_run" ]
then
execFile "$conf_run"
fi
fi
if [ $isUpdate -eq 1 ];then exit 0;fi
loadConfs
showLibs;
#echo $LINENO ${librairiesTbl[*]}
showDebug $LINENO ${librairiesCall[*]}
# - Execution des librairies appellées - #
for librairie in ${librairiesTbl[*]}
do #echo $LINENO"librairie:"$librairie
isLibExist "$librairie"
if [ $? -eq 1 ];
then
showDebug "Lancement de $librairie";
evalCmd "$librairie";
else
echo $WARN"librairie $librairie: inexistante!"$NORMAL
fi
done #for librairie in ${librairiesTbl[*]}
displayVar "{librairiesCall[*]}" "${librairiesCall[*]}"
execLibrairiesCall
echo "Résumé: "
notifsShow;
if [ $isTrapCAsk -eq 1 ]
then
exit E_CTRL_C
fi
\ No newline at end of file
fi
exit 0
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment