Auto-éditer un wikilivre/Auto-référencer/annexer.sh
Apparence
#! /bin/bash
# Fichier annexer.sh
VERSION=200626
#P Nom du fichier de commandes : annexer
#P Syntaxe : "annexer <nom du livre> [options]"
#P Options :
#P annexer ? pour obtenir la syntaxe de la ligne de commandes.
#P -p pour la version personnalisée de l'annexe (personal version).
#P -v pour la version bavarde à l'exécution (verbose mode).
#P Exemple : "./annexer LivreTest -v -pb" à la console.
#P Date de création : 24 mars 2020
#P Modifié le : 7 mai 2020 par GC
#P Modifié le : 18 mai 2020 par GC mise à jour de modules.
#P Modifié le : 19 mai 2020 par GC lignes 350 à 392.
#P Modifié le : 30 mai 2020 par GC pour l'installation automatique.
#P Modifié le : 2 juin 2020 par GC mise à jour des liens d'exécution.
#P Version sur WikiLivres le : 20 mai 2020
#P
#P LES FICHIERS DE COMMANDES
#P## header.sh ##############
#P header.sh, a créé le répertoire des commandes si celui-ci ne préexistait pas
#P il a vérifié la validité ou invalidé de ligne de commande, initialisé
#P les variables $Projet, $Site, $SitePrefix, vérifié l'existence des
#P fichiers de liste "$Projet/$1".list et "$Projet/$1".prj, puis affiché le
#P contenu du répertoire de travail.
#P## annexer ################
#P lors de l'exécution de la commande "Annexer" le répertoire courant EST le
#P répertoire travail ; $1 (~/annexer/$1/.), il est inutile de s'encombrer de
#P la variable $Projet.
#P
#D la commande "annexer" est le programme principal de tests pour créer la
#D page "Annexe" des livres de wikilivres.
#D annexer (module de tests) analyse la ligne de commandes et initialise la
#D variable $Verbose ou affiche la syntaxe à la demande interrogative '?'
#D en premier paramètre.
#D ce programme supprime tous les fichiers obsolètes du répertoire de travail
#D "~/Annexe/<nom du livre>" et de ses sous répertoires, avec l'accord de
#D l'utilisateur.
#D les modules lister, télécharger, ajouter_sclt, ajouter_scli? sont exécutés
#D dans l'ordre, puis pour finir, le fichier "Annexe" du livre est assemblé.
#D à la fin de l'exécution de chaque module il est possible d'interrompre le
#D programme par la validation de la ligne (retour chariot après #T) :
#D #T exit -> sur deux lignes comme ci-après :
#D #T
#D exit
#D
#D l'extraction de la documentation peut se faire par la commande :
#D mkd -Stw DOP annexer (D=Docu, O=organigramme, P=pour programmeurs)
#D
if [ $0=annexer ]; then echo "annexer : Version "$VERSION; fi
#O analyse de la ligne de commandes :
#O si le premier paramètre est le caractère ?
if [ "$1" = "?" ]
#O alors :
then {
#O afficher la syntaxe et quitter.
clear
echo "Syntaxe de la ligne de commande :"
echo " annexer [ <nom du livre> || ? ] [ -v ] [ -pb || -pc ]"
echo " Par défaut, seule la version Annexe globale sera proposée."
echo " Options pour obtenir une version personnalisée par article :"
echo " annexer ?, pour afficher la syntaxe de la ligne de commandes."
echo " -pb pour la version personnalisée wikilivres (personal version whith wikibooks)."
echo " -pc pour la version personnalisée commons (personal version with commons)."
echo " -v pour la version bavarde (verbose mode)."
exit 0
}
#O fin si
fi
#O inclure le fichier d'entête header.sh
source header.inc
#O## annexer ################
#O initialiser les variables $Verbose et $Personal à 'false'
Verbose="false"
Personal="false"
Personalwb="false"
Personalco="false"
#P si le nombre de paramètres reçus est inférieur à 2 ($0 ne compte pas)
#P alors : passer, il n'y a rien à initialiser
#O si ne nombre de paramètres est supérieur à 1
if (("$#" > "1"))
#O alors :
then
#O si le deuxième paramètre est '-v'
if [ "$2" = "-v" ]
#O alors initialiser la variable $Verbose à 'true' (vrai).
then
Verbose="true";
#O fin si
fi
#O si le deuxième paramètre est '-pb'
if [ "$2" = "-pb" ]
#O alors initialiser la variable $Personalwb à 'true' (vrai).
then
Personalwb="true"; Personal="true";
#O fin si
fi
#O si le deuxième paramètre est '-pc'
if [ "$2" = "-pc" ]
#O alors initialiser la variable $Personalco à 'true' (vrai).
then
Personalco="true"; Personal="true";
#O fin s
fi
#O fin si
fi
#O si le nombre de paramètres est égal à 3
if (("$#" == "3"))
#O alors :
then
#O si le troisième paramètre est '-v'
if [ "$3" = "-v" ]
#O alors initialiser la variable $Verbose à 'true' (vrai).
then
Verbose="true";
#O fin si
fi
#O si le troisième paramètre est '-pb'
if [ "$3" = "-pb" ]
#O alors, si la variable $Personalco n'est pas à validée, initialiser la variable $Personalwb à 'true' (vrai).
then if test "$Personalco" = "false"; then Personalwb="true"; Personal="true"; else echo "Erreur de syntaxe paramètre 3 :$3 incompatible avec paramètre 2 :$2"; exit 1; fi;
#O fin si
fi
#O si le troisième paramètre est '-pc'
if [ "$3" = "-pc" ]
#O alors, si la variable $Personalwb n'est pas à validée, initialiser la variable $Personalco à 'true' (vrai).
then if test "$Personalwb" = "false"; then Personalco="true"; Personal="true"; else echo "Erreur de syntaxe paramètre 3 :$3 incompatible avec paramètre 2 :$2"; exit 1; fi;
#O fin si
fi
#O fin si
fi
#O si le nombre de paramètres est supérieur à 3
if (("$#" > "3"))
#O alors : signaler l'erreur et quitter.
then
echo "Erreur : trop de paramètres !"
echo "'./annexer ?' pour la syntaxe."
exit 1
#O fin si
fi
#T
echo "La variable Verbose est initialisée à : $Verbose"
#T
echo "La variable Personalwb est initialisée à : $Personalwb"
#T
echo "La variable Personalco est initialisée à : $Personalco"
#T
echo "La variable Personal est initialisée à : $Personal"
#-----
#T exit #w interrompt l'exécution de la suite.
#O afficher : 'effacer tous les fichiers obsolètes ? :'
#O '*.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list ?'
echo "effacer tous les fichiers *.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list ?"
echo -e "\033[31m 'o' pour approuver l'effacement des fichiers obsolètes. \033[0m "
echo " Retour-chariot pour continuer, Ctrl-C pour quitter."
#O attendre 'un' (un seul) caractère de réponse.
read -n1 -p -s Inkey
echo "Inkey = "$Inkey
#O si la réponse au clavier est 'o' (oui !),
if [ "$Inkey" = "o" ]
#O alors effacer les fichiers du répertoire de projet (nom du livre).
then {
cd $Projet
echo -e "\033[31mSuppression des fichiers obsolètes.\033[0m "
rm -R *.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list
}
#O sinon, continuer.
else echo "Pas de suppression de fichiers ! ... suite ..."
#O fin si
fi
#-----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes(~/Annexer/.)
cd $RepCom
#O créer le fichier contenant la liste des articles à analyser. (./lister $1)
#O si la variable $Verbose et validée (à 'true'),
if [ $Verbose = "true" ]
#O alors : exécuter la commande 'lister' en mode bavard.
then
./lister $1
#O sinon : exécuter 'lister' en mode silencieux, les observation seront dans
#O le fichier lister-cmd.txt
else
./lister $1 > lister-cmd.txt
#O fin si
fi
Retour=$?
#T echo "Code de retour de la commande lister : " $Retour
#O si le code de retour est supérieur à 0
if [ $Retour -gt '0' ]
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'lister' en mode silencieux voyez lister-cmd.txt"
exit 1
#O fin si
fi
#
# -----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes
cd $RepCom
#T créer les répertoires et sous répertoires complets du livre. (../télécharger $1)
#O si le mode bavard est activé,
if [ $Verbose = "true" ]
#O alors: exécuter la commande 'télécharger' en mode bavard.
then
./télécharger $1
#O sinon: exécuter la commande 'télécharger' en mode silencieux..
else
./télécharger $1 > télécharger-cmd.txt
#O fin si
fi
Retour=$?
#T echo "Code de retour de la commande télécharger : " $Retour?
#O si le code de retour est supérieur à 0
if [ $Retour -gt '0' ]
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'télécharger' en mode silencieux voyez télécharger-cmd.txt"
exit 1
#O fin si
fi
# -----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes
cd $RepCom
#O créer la "page Annexe" et ajouter les sources, contributeurs, droits de
#O copie du texte des articles.
#O sclt signifie : s=source, c=contributeurs, l=license, t=texte des articles
#O si le mode bavard est activé,
if [ $Verbose = "true" ]
#O alors : exécuter la commande 'ajouter_sclt' en mode bavard.
then
./ajouter_sclt $1
#O sinon : exécuter la commande 'ajouter_sclt' en mode silencieux.
else
./ajouter_sclt $1 > ajouter_sclt-cmd.txt
#O fin si
fi
Retour=$?
#T echo "Code de retour de la commande ajouter_sclt : " $Retour
#O si le code de retour est supérieur à 0
if [ $Retour -gt '0' ]
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'ajouter-sclt' en mode silencieux voyez ajouter_sclt-cmd.txt"
exit 1
#O fin si
fi
# -----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes
cd $RepCom
#O si la variable $Personal est invalide 'false'
if [ $Personal = "false" ]
#O alors:
then
#O exécuter ajouter_sclic
#O (ajouter les sources, licence, contributeurs des images avec la commande
#O globale conventionnelle ajouter_sclic
#O si le mode bavard est validé,
if [ $Verbose = "true" ]
#O alors : ajouter_sclic en mode bavard
then
./ajouter_sclic $1
#O sinon : ajouter_sclic et copier les observations dans ajouter-sclic-cmd.txt
else
./ajouter_sclic $1 > ajouter-sclic-cmd.txt
#O fin si
fi
cat $Projet/$1.sclic > $Projet/$1.scli
#O fin si
fi
Retour=$?
#T echo "Code de retour de la commande ajouter_sclic : " $Retour
#O si le code de retour est supérieur '0'
if [ $Retour -gt '0' ] && [ $Personal = "false" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'ajouter_sclic'"
exit 1
#O fin si
fi
# -----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes
#cd $RepCom
#O si l'option annexe' personalisée est validée ($Personal=true)
# if [ $Personal = "true" ]
#O alors:
# then
#O exécuter ajouter_sclip
#O (ajouter les sources, licence, contributeurs des images avec la commande
#O globale conventionnelle ajouter_sclic
# if [ $Verbose = "true" ]
# then
# ./ajouter_sclip $1
# else
# ./ajouter_sclip $1 > ajouter-sclip-cmd.txt
#O fin si
# fi
# cat $1.sclip > $1.scli
#O fin si
# fi
#Retour=$?
#T echo "Code de retour de la commande ajouter_sclip : " $Retour
#O si le code de retour est différent de '0'
# if [ $Retour -gt '0' ] && [ $Personal = "true" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
# then
# echo "Erreur au module shell 'ajouter_sclip'"
# exit 1
#O fin si
# fi
#T echo "La variable Verbose est initialisée à : $Verbose"
#T echo "La variable Personalwb est initialisée à : $Personalwb"
#T echo "La variable Personalco est initialisée à : $Personalco"
#T echo "La variable Personal est initialisée à : $Personal"
#T break
#O se placer dans le répertoire des commandes.
cd $RepCom
#O si l'option de la commande annexe '-pc' (personalco) est activée à 'vrai'
if [ "$Personalco" == "true" ]
#O alors exécuter sclipco
then
if [ "$Verbose" == "true" ]; then ./sclipwb $1 && ./sclipco $1; else ./sclipwb $1 > sclipwb-cmd.txt && ./sclipco $1 > sclipco-cmd.txt; fi;
echo "sclipwb et sclipco ont été exécutés successivement.";
#O fin si
fi
#O si le code de retour est différent de '0',
if [ $Retour -gt '0' ] && [ $Personalpc = "true" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'slipco' ou au module 'sclipw'"
exit 1
#O fin si
fi
#T Remarque :
#T $Personalpc et $Personalpw ne peuvent pas être actifs en même temps au
#T cours de la commande.
#O se placer dans le répertoire des commandes.
cd $RepCom
#O si l'option de la commande annexe '-pb' (personalwb) est activée à 'vrai'
if [ "$Personalwb" == "true" ]
#O alors exécuter sclipwb.inc
then
if [ "$Verbose" == "true" ]; then ./sclipwb $1; else ./sclipwb $1 > scliwb.inc-cmd.txt; fi;
echo "sclipwb a été exécuté";
#O fin si
fi
#O si le code de retour est différent de '0',
if [ $Retour -gt '0' ] && [ $Personalwb = "true" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'slipwb'"
exit 1
#O fin si
fi
# -----
#T exit #w interrompt l'exécution de la suite.
#O assembler la page 'Annexe' du livre.
cd $Projet
#O copier sclt dans la page 'Annexe' du livre.
cat $1.sclt > $1.annexe
#O si la variable Personal est activée à 'true'
if [ $Personal == "true" ]
#O alors : ajouter le contenu du fichier $1.sclip au fichier $1.annexe
then cat $Projet/$1.sclip >> $Projet/$1.annexe; echo "$1.sclip est copié dans $1.annexe";
#O sinon :
else
#O ajouter $1.sclic à l'annexe
cat $1.sclic >> $1.annexe echo "$1.sclic est copié dans $1.annexe";
#O fin si
fi
#O ajouter la licence (fr) à la page 'Annexe'
echo "== Licence ==" >> $1.annexe
cat $1/$1.licence >> $1.annexe
echo "" >> $1.annexe
echo "{{Nouvelle page imprimée}}" >> $1.annexe
echo ""
echo ""
echo ""
echo "Copier le contenu du fichier "$1/annexe" dans la page 'Annexe' du livre "$1.
exit 0
# Fin de fichier annexer.sh