Programmation bash (exercices, tests et documentation.)
"Un livre appartenant à la série Programmation de Wikilivres".
self-referencing
Codes shell pour créer la page « Annexe » d'un wikilivre.
Entête des modules.
 Le fichier de commandes header.sh doit être inclus dans tous les modules
 de test du programme principal. Il initialise le répertoire des commandes,
 le répertoire de travail du projet; le projet est le nom du livre, de
 l'article ou de la page. Si ils n'existent pas ils seront créés
 Ce projet éducatif et de tests est destiné à être utilisé sous wikilivres
 en langue française et en caractères UTF8. 
 Les variables Site et SitePrefix se rapportent à "fr.wikibooks.org".
 Le programme est prévu pour fonctionner à l'initiative du contributeur qui
 qui doit copier la page "Contenus" ou la page de la compilation dans le
 répertoire de travail "~/Annexe/<nom du livre>"
 Les modules en tests sont indépendants, cependant ils doivent être exécutés
 dans l'ordre ./header.sh <livre>, ./lister <livre>, ./télécharger <livre>
 ./ajouter_sclt <livre>, ./ajouter_sclic, ./ajouter_sclip <livre>
 La liste des pages à analyser est indispensable dans tous les modules en
 tests. L'absence de la liste des pages à analyser est signalée à chaque
 lancement des modules du programme principal "Annexer"
 AVERTISSEMENT : Ce programme avec ses modules doit être utilisé par des
 wikipédiens, à titre personnel. La structure du résultat est voisine de
 l'impression par PediaPress. Pour cette raison ce programme n'est pas
 commercialisable.
Annexer (main).
Annexer ou annexer.sh est la page principale qui permet de produire la page « Annexe », elle utilise les commandes shell "header.sh, "lister", "télécharger", "ajouter_sclt", "ajouter_sclic" et "ajouter_sclip".
 la commande "annexer" est le programme principal de tests pour créer la
 page "Annexe" des livres de wikilivres.
 annexer (module de tests) analyse la ligne de commandes et initialise la
 variable $Verbose ou affiche la syntaxe à la demande interrogative '?'
 en premier paramètre.
 ce programme supprime tous les fichiers obsolètes du répertoire de travail
 "~/Annexe/<nom du livre>" et de ses sous répertoires, avec l'accord de
 l'utilisateur.
 les modules lister, télécharger, ajouter_sclt, ajouter_scli* sont exécutés
 dans l'ordre, puis pour finir, le fichier "Annexe" du livre est assemblé.
 à la fin de l'exécution de chaque module il est possible d'interrompre le
 programme par la validation de la ligne (retour chariot après #T) :
 #T exit -> sur deux lignes comme ci-après :
 #T
 exit
 l'extraction de la documentation peut se faire par la commande :
 mkd -Stw DOP annexer (D=Docu, O=organigramme, P=pour programmeurs)
 47 analyse de la ligne de commandes :
 48 si le premier paramètre est le caractère ?
 50 alors :
 52 afficher la syntaxe et quitter.
 63 fin si
 66 inclure le fichier d'entête header.sh
 69 ## annexer ################
 71 initialiser les variables $Verbose et $Personal à 'false'
 80 si ne nombre de paramètres est supérieur à 1
 82 alors :
 84 si le deuxième paramètre est '-v'
 86 alors initialiser la variable $Verbose à 'true' (vrai).
 89 fin si
 91 si le deuxième paramètre est '-pb'
 93 alors initialiser la variable $Personalwb à 'true' (vrai).
 96 fin si
 98 si le deuxième paramètre est '-pc'
 100 alors initialiser la variable $Personalco à 'true' (vrai).
 103 fin s
 105 fin si
 108 si le nombre de paramètres est égal à 3
 110 alors :
 112 si le troisième paramètre est '-v'
 114 alors initialiser la variable $Verbose à 'true' (vrai).
 117 fin si
 119 si le troisième paramètre est '-pb'
 121 alors, si la variable $Personalco n'est pas à validée, initialiser la variable $Personalwb à 'true' (vrai).
 123 fin si
 126 si le troisième paramètre est '-pc'
 128 alors, si la variable $Personalwb n'est pas à validée, initialiser la variable $Personalco à 'true' (vrai).
 130 fin si
 132 fin si
 135 si le nombre de paramètres est supérieur à 3
 137 alors : signaler l'erreur et quitter.
 142 fin si
 156 afficher : 'effacer tous les fichiers obsolètes ? :'
 157 '*.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list ?'
 161 attendre 'un' (un seul) caractère de réponse.
 165 si la réponse au clavier est 'o' (oui !),
 167 alors effacer les fichiers du répertoire de projet (nom du livre).
 173 sinon, continuer.
 175 fin si
 181 se placer dans le répertoire des commandes(~/Annexer/.)
 184 créer le fichier contenant la liste des articles à analyser. (./lister $1)
 185 si la variable $Verbose et validée (à 'true'),
 187 alors : exécuter la commande 'lister' en mode bavard.
 190 sinon : exécuter 'lister' en mode silencieux, les observation seront dans
 191 le fichier lister-cmd.txt 
 194 fin si
 199 si le code de retour est supérieur à 0
 201 alors afficher le nom du module de commande en erreur et quitter 'annexer'
 202 avec retour à 1
 206 fin si
 212 se placer dans le répertoire des commandes
 216 si le mode bavard est activé,
 218 alors: exécuter la commande 'télécharger' en mode bavard.
 221 sinon: exécuter la commande 'télécharger' en mode silencieux..
 224 fin si
 229 si le code de retour est supérieur à 0
 231 alors afficher le nom du module de commande en erreur et quitter 'annexer'
 232 avec retour à 1
 236 fin si
 242 se placer dans le répertoire des commandes
 245 créer la "page Annexe" et ajouter les sources, contributeurs, droits de
 246 copie du texte des articles.
 247 sclt signifie : s=source, c=contributeurs, l=licence, t=texte des articles
 248 si le mode bavard est activé,
 250 alors : exécuter la commande 'ajouter_sclt' en mode bavard.
 253 sinon : exécuter la commande 'ajouter_sclt' en mode silencieux.
 256 fin si
 261 si le code de retour est supérieur à 0
 263 alors afficher le nom du module de commande en erreur et quitter 'annexer'
 264 avec retour à 1
 268 fin si
 274 se placer dans le répertoire des commandes
 277 si la variable $Personal est invalide 'false' 
 279 alors:
 281 exécuter ajouter_sclic 
 282 (ajouter les sources, licence, contributeurs des images avec la commande
 283 globale conventionnelle ajouter_sclic
 284 si le mode bavard est validé,
 286 alors : ajouter_sclic en mode bavard
 289 sinon : ajouter_sclic et copier les observations dans ajouter-sclic-cmd.txt
 292 fin si
 295 fin si
 300 si le code de retour est supérieur '0'
 302 alors afficher le nom du module de commande en erreur et quitter 'annexer'
 303 avec retour à 1
 307 fin si
 313 se placer dans le répertoire des commandes
 315 si l'option annexe' personnalisée est validée ($Personal=true)
 317 alors:
 319 exécuter ajouter_sclip 
 320 (ajouter les sources, licence, contributeurs des images avec la commande
 321 globale conventionnelle ajouter_sclic
 327 fin si
 330 fin si
 334 si le code de retour est différent de '0'
 336 alors afficher le nom du module de commande en erreur et quitter 'annexer'
 337 avec retour à 1
 341 fin si
 350 se placer dans le répertoire des commandes.
 352 si l'option de la commande annexe '-pc' (personalco) est activée à 'vrai'
 354 alors exécuter sclipco.inc
 358 fin si
 360 si le code de retour est différent de '0',
 362 alors afficher le nom du module de commande en erreur et quitter 'annexer'
 363 avec retour à 1
 367 fin si
 374 se placer dans le répertoire des commandes.
 376 si l'option de la commande annexe '-pb' (personalwb) est activée à 'vrai'
 378 alors exécuter sclipwb.inc
 382 fin si
 384 si le code de retour est différent de '0',
 386 alors afficher le nom du module de commande en erreur et quitter 'annexer'
 387 avec retour à 1
 391 fin si
 397 assembler la page 'Annexe' du livre.
 400 copier sclt dans la page 'Annexe' du livre.
 403 si la variable Personal est activée à 'true'
 405 alors : ajouter le contenu du fichier $1.sclip au fichier $1.annexe
 407 sinon :
 409 ajouter $1.sclic à l'annexe
 411 fin si
 414 ajouter la licence (fr) à la page 'Annexe'
Tests unitaires du fichier de commandes "annexer".
"Faire un brouillon avec le micro-ordinateur sous linux (ou autre système acceptant les shells bash)."
Note : Si, par exemple, vous lancez la commande ./annexer LivreTest ou ./header.sh LivreTest de n'importe répertoire, les répertoires ~/Annexer et ~/annexer/LivreTest seront automatiquement créés au bon endroit par l'entête "header.sh". Il suffira de copier le fichier de commandes "annexer" ou "annexer.sh" dans le répertoire de fichiers de commandes : "mv ./annexer ~/Annexer/annexer" ou shell bash sous windows, "mv ./annexer.sh ~/Annexer/annexer.sh"
Lister (module).
Créer une liste des liens vers les pages qui composent le livre.
 L'objet de cette commande est de créer le fichier de liste $Projet/$1.list
 avec le fichier "contenu" prioritaire, sinon avec le fichier "compilé"
 si il existe.
 Le 23 avril; créer la liste de projet $Projet/$1.prj a été jugée nécessaire
 pour que l'utilisation des boucles de commandes s'exécutent dans l'ordre
 de présentation des textes et des images afin de créer la page "Annexe"
 du livre (ou de la page).
 Si le fichier "<livre>.contenu" (copie de la page "Contenus" de la version
 imprimable) n'existe pas le programme teste la présence du fichier de
 compilation "<livre>.compilé", et si celui-ci n'est pas présent le
 programme se termine avec un code de retour à 1.
 Lorsque le programme se termine normalement le code de retour est 0, le
 fichier examiné aura été protégé contre l'effacement, donc en lecture
 seule, et le fichier projet.list aura été créé.
 Le contenu des listes sont affichés pour être validés.
 ## lister #################
 effacer tous les fichiers *.list,
 initialiser la variable de retour à 0
 créer le fichier de liste $Projet/$1.list avec le fichier "contenu" prioritaire, sinon avec le fichier "compilé" s'il existe.
 si le fichier LivreTest.contenu existe,
 alors :
 s'assurer que le fichier sera en lecture seule,
 créer la liste des articles de la page avec la page de Contenus du livre.
 créer le fichier de projet avec la page de Contenus du livre.
 sinon, si le fichier LivreTest.compilé existe,
 alors :
 s'assurer que le fichier sera en lecture seule,
 créer la liste avec la page compilée.
 créer le fichier de projet avec la page compilée
 sinon afficher les raisons de l'échec et recommander la marche à suivre.
 fin si
 afficher le code de retour de la commande.
 afficher les listes pour contrôle et retourner la valeur 0 si tout est correct.
Exemple de page "Contenus" du livre en test LivreTest.
La page "Contenus" d'une version imprimable contient l'Article maître du livre OU la liste des articles qui composent le livre. Dans ces tests nous incluons les deux versions qui nous permettrons de distinguer des présentations différentes de la page "Annexe" du livre.
Exemple de page du livre en test, LivreTest compilé.
Nous faisons ici les mêmes remarques que pour la page "Contenus" de la version imprimable. La première ligne, qui est un lien vers la page principale n'existe pas, normalement, dans une version compilée. Si elle est présente dans de fichier, c'est pour la même raison de démonstration que précédemment: voir les différences de présentation de la page "Annexe" du livre.
Tests du module lister.
Le but est d'obtenir un fichier qui content la liste des liens vers les pages d'un livre de wikilivres à documenter.
Nous pouvons obtenir ces liens grâce aux pages « Contenus » des Versions imprimables et « Compilation » issue de la compilation d'une page. (Menu à gauche d'une page wikimedia.)
Il est aussi possible d'éditer et d'enregistrer manuellement une telle liste.
Les lignes qui méritent notre attention.
La ligne 65 dans l'édition du 26 avril 2020 :
cat $Projet/$1.contenu | sed "s/\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" > $Projet/$1.list
Cette ligne prend en compte le texte de la page Contenus de la Version imprimable du livre pour créer le fichier de liste.
La ligne elle même signifie : 
La ligne 79 de la même édition :
cat $Projet/$1.compilé | sed "s/:\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" > $Projet/$1.list
Cette ligne prend en compte le texte de la page Compilation de la Version compilée du livre pour créer le fichier de liste.
Le commentaire est le même que pour la ligne précédent à ceci près qu'au premier filtre on supprime aussi le caractère ':' du début de ligne des fichiers issus de la compilation.
Tests de la commande.
Vérifier que l'on obtient les fichier 
Vérifier que l'on a modifié les autorisations du fichier LivreTest.contenus afin qu'il ne puisse pas être supprimé par mégarde lors des manipulations de fichiers. 
Vérifier avec la commande : "~/Annexer$ ls -l ~/Annexer/LivreTest/LivreTest.contenu", que le fichier LivreTest.contenu est en lecture seule pour tous les utilisateurs : -r--r--r--.
 -r--r--r-- 1 gc gc 353 avril 3 16:57 /home/gc/Annexer/LivreTest/LivreTest.contenu
Télécharger (module).
 La commande ./télécharger <wikilivre> télécharge la page complète d'une
 "page" ou d'un "livre" de wikilivre. Elle crée les répertoires de travail
 avec la même hiérarchie que dans la page originale du livre, ou de sa
 version imprimable, ou de sa page de compilation.
 On procède par le téléchargement complet de la page et des sous-pages du
 livre. Viennent ensuite la création des répertoires de travail des pages
 qui composent le livre, puis on copie des pages html dans ces répertoires.
 Pendant tout ce processus des lichiers temporaires de liste sont créés en
 local:
 $Projet/$1.locale.list qui est une image locale de la structure du livre.
 $Projet/$1.mainPage. lien local vers l' "Article maître du livre"
 $Projet/$1.dirs : liste des sous-pages de l'article principal du livre.
 ## télécharger ############
 télécharger dans le répertoire de travail, la structure complète du livre.
 Déplacer les pages html dans des sous-répertoires de travail pour documenter les pages et sous pages
 créer une liste locale vers les répertoires téléchargés $Projet/$1.locale.list
 Copier les fichiers html dans les répertoires respectifs.
 créer un fichier avec le nom de la page $Projet/$1.mainPage.
 initialiser la variable $mainPage
 créer un fichier des répertoires de travail à créer. 
 copier les pages et sous pages html dans les répertoires respectifs.
 quitter le programme d'essai et passer à la création de la page "Annexe" des articles.
Test du module « télécharger ».
Le but est de télécharger tous les fichiers html qui composent le livre grâce au fichier de liste obtenu précédemment.
Les lignes qui méritent notre attention.
ligne48 de la version du 26 avril 2020
<Syntaxhighlight lang="bash">
wget -r -linf -k -p -E -i $1.list -o wget-log.txt
echo "----------"
</Syntaxhighlight>
Cette ligne crée la structure complète des répertoires et fichiers, depuis la racine du site, jusqu'aux fichiers html qui composent le livre.
<Syntaxhighlight lang="bash">
 while read line
 do
 echo "$line".html | sed "s/https:\/\///g" | tr '\n' ' ' > source
 read Source < source
 echo "Source = $Source"
 echo "$line" | awk -F"/" '{ print $NF }'| tr '\n' '/' > destination 
 read dir < destination
 mkdir $dir
 echo "$line".html | awk -F"/" '{ print $NF }' » destination
 read Destination < destination
 echo "Destination = $Destination"
 echo "Copier : cp ./$Source $Destination"
 cp -f "./$Source" "$Destination"
 done < $Projet/$1.list
 rm source ; rm destination
</syntaxhighlight>
Tests de la commande "télécharger".
 Copier le code du chapitre Télécharger dans un éditeur et enregistrer ce code dans le répertoire Annexe sous le nom « télécharger » ou « télécharger.sh »
 Autoriser l'exécution du code par la commande chmod 777 ~/Annexe/télécharger
 Lancer la commande ./télécharger LivreTest
On devrait obtenir :
 ~/Annexer$ ls -R LivreTest/fr.wikibooks.org
 $ ls -a -1 ~/Annexer$/LivreTest
LivreTest.compilé
LivreTest.compilé.test
LivreTest.contenu
LivreTest.contenu.test
LivreTest.dirs
LivreTest.list
LivreTest.locale.list
LivreTest.mainPage
LivreTest.prj
wget-log-télécharger.txt
Ajouter sclt (module).
Ajouter la section article, source, licence, contributeur(s).
Tests du module ajouter_sclt.
Le but est de créer l'entête de la page Annexe et d'y ajouter la liste des "articles avec les sources, licences, contributeurs".
Les numéros des pages n'est possibles que lorsque la version imprimable aura été créée, avec une post-indexation et une post-annexion.
Les lignes qui méritent notre attention.
Remarque : Dans les explications du code on entend par projet le nom du projet entré en paramètre dans la commande "./ajouter_sclt projet"
Lignes 117-119 de la version du 29 avril 2020
 #O extraire et copier toutes les chaînes de caractères du fichier html
 #O $ligne.html dans le fichier $ligne.str et les dupliquer à l'écran
 mkd -pws '**' $Projet/$ligne/$ligne.html $Projet/$ligne/$ligne.tmp | tr ',' '\n' > $Projet/$ligne/$ligne.str
mkd n'est pas inclus dans les distributions linux. les paquets et sources sont téléchargeable pour tous les systèmes d'exploitation.
Pour toute informations complémentaires : mkd (commande unix), Mkd_(Extracteur_de_documents)
Cette ligne de commandes extrait tous les commentaires avec une sortie dans un fichier "projet.tmp" ainsi que vers la "sortie standard" où elle est reprise pour être listée en colonne grâce au séparateur de chaînes ','.
Lignes 124-130
 #O article,
 if [ $ligne != $1 ]
 then 
 echo "$ligne" » $PageSclt
 fi
 echo "$ligne" > $Projet/$ligne/$ligne.article
 cat $Projet/$ligne/$ligne.article
$ligne est la variable lue ligne par ligne du fichier de liste "projet.pj" dans une boucle "tant qu'il y a des lignes à lire, faire ..."
Cette ligne est aussi le nom de l'article qui va être analysé. Si $ligne n'est pas le nom du livre (de l'article principal) le nom de l'article est ajouté à la page $PageSclt.
Lignes 132-139 
 #O source,
 echo -n ", "source : "https://"$Site"/w/index.php?oldid=" > $Projet/$ligne/$ligne.RevisionId
 cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e wgRevisionId | tr -d ':' | sed "s/\"/%/g" | cut -d'%' -f3 » $Projet/$ligne/$ligne.RevisionId
 if [ $ligne != $1 ]
 then 
 cat $Projet/$ligne/$ligne.RevisionId » $PageSclt
 fi
 cat $Projet/$ligne/$ligne.RevisionId
La deuxième ligne crée le fichier de ".RevisionId" dans lequel on écrit une chaîne de caractères sans retour à la ligne.
La troisième ligne :
   cat ouvre le flux du fichier "projet.str"
 | retient la ligne qui contient wgRevisionId,
 | supprime le caractère ':' qu'il contient
 | remplace les caractères '"' par le caractère '%'
 | coupe la chaîne à l'endroit où se trouvent les caractères '%' et sélectionne le champ 3.
 » la chaîne résultante est ajoutée au fichier "projet.RevisionId"
Lignes 152-164
 1 #O license :
 2 echo -n ", "licence : "" > $Projet/$ligne/$ligne.license
 3 #T cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f4 » $Projet/$ligne/$ligne.license
 4 cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | tr '"' '%' | cut -d'%' -f4 » $Projet/$ligne/$ligne.license
 5 #T cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f2 | sed "s/\/\//https:\/\//g" » $Projet/$ligne/$ligne.license
 6 if [ $ligne != $1 ]
 7 then 
 8 cat $Projet/$ligne/$ligne.license » $PageSclt
 9 fi
 10 cat $Projet/$ligne/$ligne.license
 11 #
 12 #P spécial pour bas de page fr ## 
 13 cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e footer-info-copyright | sed "s/\"\//%\//g" | tr '"' '%' | cut -d'%' -f4 > $Projet/$ligne/$ligne.licence
 exemple : le répertoire de l'ArticleUn est ~/Annexer/LivreTest/ArticleUn/ dans lequel on va écrire ArticleUn.license
   cat ouvre le flux du fichier "projet.str",
 | retient la ligne qui contient "license",
 | sélectionne la chaîne "/ et la remplace par la chaîne %/,
 | supprime '%' et coupe la chaîne au caractère '%' puis sélectionne le deuxième tronçon (-f2), il existe aussi (-f2-3, -f2-4) etc.
 | remplacer les caractères // par https://
 » copier la chaîne dans le fichier "projet.license"
Lignes 155-159
 #O auteur(s). 
 echo -n ", "auteur(s) : "" > $Projet/$ligne/$ligne.auteur
 cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e wgRelevantUserName | sed "s/\"/%/g" | cut -d'%' -f4 » $Projet/$ligne/$ligne.auteur
 if [ $ligne != $1 ]
 then 
 cat $Projet/$ligne/$ligne.auteur » $PageSclt
 fi
 cat $Projet/$ligne/$ligne.auteur 
Tests de la commande.
 cat LivreTest.sclt dans le répertoire du projet "LivreTest"
 Annexe 
 Références 
 Contenus 
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleUn
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleDeux
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleTrois
Source de cette édition 
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest
 Sources licences et contributeurs des articles 
Les "sources" listées pour chaque article fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence.
ArticleUn
, "source : "https://fr.wikibooks.org/w/index.php?oldid=632571
, "licence : "https://creativecommons.org/licenses/by-sa/3.0/
, "auteur(s) : "Goelette Cardabela
ArticleDeux
, "source : "https://fr.wikibooks.org/w/index.php?oldid=632572
, "licence : "https://creativecommons.org/licenses/by-sa/3.0/
, "auteur(s) : "Goelette Cardabela
ArticleTrois
, "source : "https://fr.wikibooks.org/w/index.php?oldid=632573
, "licence : "https://creativecommons.org/licenses/by-sa/3.0/
, "auteur(s) : "Goelette Cardabela
Ajouter scli "(trois modules indépendants)".
Ajouter la section image, source, license, contributeurs(s) à la page "Annexe".
Les fichier de commandes scli.
 Illustration 1 "Source : "..., "Licence : "..., "Contributeur : "...
 Illustration 2 "Source : "..., "Licence : "..., "Contributeur : "...
 Illustration 3 "Source : "..., "Licence : "..., "Contributeur : "...
 Illustration 4 "Source : "..., "Licence : "..., "Contributeur : "...
 Article 1 :
 Illustration 1.0 "Source : "..., "Licence : "..., "Contributeur : "...
 Illustration 1.n "Source : "..., "Licence : "..., "Contributeur : "...
 Article 2 :
 Illustration 2.0 "Source : "..., "Licence : "..., "Contributeur : "...
 Illustration 2.n "Source : "..., "Licence : "..., "Contributeur : "...
Tests de la commande ajouter_sclic.
Fichiers obtenus avec la commande ~/Annexer/ajouter_sclic LivreTest.
 https://commons.wikimedia.org/wiki/File:Commerce_de_communautés_indigènes.JPG
 https://commons.wikimedia.org/wiki/File:Fernando_Botero_(2018).jpg
 https://commons.wikimedia.org/wiki/File:Gabriel_Garcia_Marquez_-_Fresque.jpg
 https://commons.wikimedia.org/wiki/File:Pano_Plazo_Botero.jpg
"Version personnalisée par article sclip (module)".
Cette commande est composée de trois parties : 
Chacun de ces modules peut être éprouvé séparément.
Il n'est pas envisagé de détailler l'explication des lignes de codes, 
on peut considérer que la compréhension des codes de commandes bash est suffisamment assimilée à ce niveau de la programmation. Les explications éventuelles se trouvent au sein du code de programmation.
Entête ajouter_sclip.
 Le répertoire de travail est le sous répertoire du projet $Projet/$1/$1
 plus précisément : ~/Annexer/<nom du livre>/<nom du livre>
 <nom du livre> pourrait être la sous-page 'Version imprimable' du livre
 et peut être considéré comme un 'Article'.
 Remarques :
 à ce stade, Les fichiers $1.list, $1.prj, $1.pj, $1.sclt, $.mainPage sont 
 censés préexister dans le répertoire racine du projet $1 (nom du livre).
 De même, les fichiers <Article>.str sont sensés préexister dans les
 répertoires <Article> correspondants.
 Seront créés :
 * Dans le répertoire de travail racine ~/Annexe/$1/. :
 le fichier $1.sclic qui vient compléter le fichier $1.sclt afin de créer
 le fichier "Annexe",
 * dans le sous-répertoire de travail ~/Annexe/$1/$1/. :
 $1.files, $1.pict, $1.illustrations, $1.links, html.list et
 les fichiers d'images .str .title, .source, .license, .auteur.
 Ce module est l'entête des programmes sclipco.inc et sclipwb.inc du
 programme Annexer :
 Si une des options -pc ou -pb de la ligne de commande 'annexer <livre>'
 est validée, le module ajouter_sclip est exécuté puis un des modules
 sclipco ou sclipwb est exécutés selon l'option choisie -pc ou -pb.
 (-pc pour images sur 'Commons', -pb pour images sur 'Wikilivres'.)
 Structure, organisation des fichiers :
 Les répertoires de travail sont les répertoires des 'Articles'.
 Le fichier $Projet/$ligne/$ligne.str a été créé avec la commande
 ajouter_sclt
 Remarques :
 1.les images extraites avec le fichier de commandes ajouter_sclic peuvent
 être copiées dans les répertoires des articles correspondants lorsqu'ils
 sont identifiés dans leurs répertoires respectifs pour créer une option
 d'images téléchargées de 'Commons'.
 2.le fichier de conversions url/html vers utf8 a été inclus dans l'entête
 header.sh depuis le 13 mai 2020
Comparaison des annexes obtenues pour la page "LivreTest".
Annexe classique avec sclic.
Éditer cette annexe.
Annexe personnalisée avec le téléchargement sur le serveur "Commons".
Éditer cette annexe.
Annexe personnalisée avec le téléchargement sur le serveur "Wikilivres".
Éditer cette annexe.
Comparaison avec l'annexe manuelle ou semi-manuelle.
Éditer cette version manuelle.
Tests unitaires et d'intégration.
Les fichiers de commandes shell peuvent être éprouvés successivement, sous linux ou sous d'autres systèmes d'exploitation acceptant les commandes shell bash : Windows 10, MinGw, Cygwin, ...
Pour effectuer ces tests il faut se placer dans le répertoire utilisateur et créer un répertoire qui regroupe les fichiers de commandes. Dans les exemples présentés : mkdir ~/Annexer
Les fichiers de commandes : 
header.sh, annexer, lister, télécharger, ajouter-sclt, ajouter-sclic, ajouter-sclip, sont prévus pour être placés dans ce répertoire des commandes ~/Annexer. Le fichier header.sh est non seulement un fichier de commandes, il est aussi un fichier d'entête pour tous les modules en tests unitaires.
Les commandes peuvent être éprouvées avec tous les livres disponibles. Pour les essais de ces versions en tests, nous avons utilisé le livre « LivreTest ».
La commande « annexer » permet le test d'intégration de tous les modules avec des points d'arrêt possibles après chaque module testé.
Rendez-vous dans le chapitre Annexer pour effectuer ces test et/ou avoir plus d'informations.
Copier et installer les fichiers de l'application et des tests.
Éditer la page originale
Index des sections.
Sections ↑
 1 Codes shell pour créer la page « Annexe » d'un wikilivre
 1.1 Entête des modules
 1.2 Annexer (main)
 1.2.1 Tests unitaires du fichier de commandes annexer
 1.2.2 Annexe obtenue
 1.2.2.1 Impression visuelle de cette annexe
 1.3 Lister (module)
 1.3.1 Exemple de page Contenus du livre en test LivreTest
 1.3.2 Exemple de page du livre en test, LivreTest compilé
 1.3.3 Exemple de listes obtenues pour le livre LivreTest
 1.3.4 Tests du module lister
 1.3.4.1 Les lignes qui méritent notre attention
 1.3.4.2 Tests de la commande
 1.4 Télécharger (module)
 1.4.1 Test du module « télécharger »
 1.4.1.1 Les lignes qui méritent notre attention
 1.4.1.2 Tests de la commande télécharger
 1.5 Ajouter sclt (module)
 1.5.1 Tests du module ajouter_sclt
 1.5.1.1 Les lignes qui méritent notre attention
 1.5.1.2 Tests de la commande
 1.6 Ajouter scli (trois modules indépendants)
 1.6.1 Les fichier de commandes scli
 1.6.1.1 Version classique sclic (module)
 1.6.1.2 Programme des tests du module ajouter_sclic
 1.6.1.3 Les lignes qui méritent notre attention
 1.6.1.4 Tests de la commande ajouter_sclic
 1.6.1.4.1 Fichiers obtenus avec la commande ~/Annexer/ajouter_sclic LivreTest
 1.6.1.5 Version personnalisée par article sclip (module)
 1.6.1.6 Entête ajouter_sclip
 1.6.1.7 Module sclipco.inc
 1.6.1.8 Modude sclipwb.inc
 1.6.2 Comparaison des annexes obtenues pour la page LivreTest
 1.6.2.1 Annexe classique avec sclic
 1.6.2.2 Annexe personnalisée avec le téléchargement sur le serveur Commons
 1.6.2.3 Annexe personnalisée avec le téléchargement sur le serveur Wikilivres
 1.6.2.4 Comparaison avec l'annexe manuelle ou semi-manuelle
 2 Tests unitaires et d'intégration
 3 Copier et installer les fichiers de l'application et des tests
 4 Post-référencer post-indexer un wikilivre
 5 Post indexer avec Open Office (OO) ou LibreOffice
 5.1 Survol rapide de post indexation avec le LivreTest
 5.1.1 Préparation du document avec OO
 5.1.2 Copier le document dans OO
 5.1.2.1 Créer l'« Index lexical »
 5.1.2.2 Créer la « Table des matières »
 6 Indexer un wikilivre
 6.1 Préparer le « Modèle de livre » pour OO
 6.2 Recopier le contenu WikiMedia (textes et images) dans OO
 6.3 Corriger et compléter les pages
 6.4 Documentation générale
 6.5 Conseils pour les cadres et les formules mathématiques dans OO
 6.6 Imprimer
 7 Alternative à l'indexation avec OpenOffice ou LibreOffice
 8 Références
 9 Index des sections