Auto-éditer un wikilivre/Auto-référencer/lister.sh
Apparence
#! /bin/bash
# Fichier : lister.sh
VERSION=200701
#P Nom du fichier de commandes : lister
#P Syntaxe : "lister <nom du livre>"
#P Exemple : "./lister LivreTest" à la console.
#P Date de création : 26 mars 2020
#P Modifié le : 26 avril 2020 par GC
#P Modifié le : 30 mai 2020 par GC pour l'installation automatique.
#P Modifié le : 30 juin par GC pour inclure les sommaires aux fichiers de liste
#P Version de documentation sur WikiLivres le : 26 avril 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.
#D L'objet de cette commande est de créer le fichier de liste $Projet/$1.list
#D avec le fichier "contenu" prioritaire, sinon avec le fichier "compilé"
#D si il existe.
#D Le 23 avril; créer la liste de projet $Projet/$1.prj a été jugée nécessaire
#D pour que l'utilisation des boucles de commandes s'exécutent dans l'ordre
#D de présentation des textes et des images afin de créer la page "Annexe"
#D du livre (ou de la page).
#D
#D Si le fichier "<livre>.contenu" (copie de la page "Contenus" de la version
#D imprimable) n'exite pas le programme teste la présence du fichier de
#D compilation "<livre>.compilé", et si celui-ci n'est pas présent le
#D programme se termine avec un code de retour à 1.
#D Lorsque le programme se termine normalement le code de retour est 0, le
#D fichier examiné aura été protégé contre l'effacement, donc en lecture
#D seule, et le fichier projet.list aura été créé.
#D Le contenu des listes sont affichés pour être validés.
#D
#P L'extraction de la documentation peut se faire par la commande :
#P mkd -Stw DP lister
#O inclure le fichier d'entête header.sh
source header.inc
#O## lister #################
if [ $0=lister ]; then echo "lister : Version "$VERSION; fi
#O effacer tous les fichiers *.list,
rm *.list
#O initialiser la variable de retour à 0
retour=0
err1=1 #P initialise une valeur d'erreur
#T echo "retour = "$retour
#T echo "valeur d'erreur de retour N°1 = "$err1
#T exit
#O initialisation du fichier de liste avec la page racine du livre
echo "https://$Site/wiki/$1" > $Projet/$1.list
#O créer le fichier de liste $Projet/$1.list avec les fichiers "contenu" ou
#O "contenus" prioritaires, ou avec les fichier "Sommaire" ou
#O "Sommaire_du_livre", sinon avec le fichier "compilé" si ils existent.
#O
#O si un fichier de contenu existen, affecter la variable $Contenu, protéger
#O le fichier conte l'écriture.
#P REMARQUE:les extensions en majuscules peuvent avoir tét produites par la
#P fonction "findbook.sh" par la commande "findbook.sh [ url ]" du sommaire
#P ou du fichier de Contenus de la version imprimable du livre.
#P Exemple : (findbook.sh se trouve dans le répertoire ~/Annexer/bin)
#P ./findbook https://fr.wikibooks.org/w/index.php?title=Goélette_Cardabela/Sommaire_du_livre
#P Dans ce cas le répertoire du projet aura été créé dans ~/Annexer, et le
#P fichier "Contenu=$Projet/$1.Sommaire" du_livre aura été créé dans ce
#P répertoire.
if test -r $Projet/$1.contenu; then Contenu=$Projet/$1.contenu; fi
if test -r $Projet/$1.Contenus; then Contenu=$Projet/$1.Contenus;fi
if test -r $Projet/$1.compilé; then Contenu=$Projet/$1.compilé;fi
if test -r $Projet/$1.Sommaire; then Contenu=$Projet/$1.Sommaire;fi
if test -r $Projet/$1.Sommaire_du_livre; then Contenu=$Projet/$1.Sommaire_du_livre;fi
chmod 444 $Contenu
echo "Contenu : "; ls -l $Contenu
#O si la variable "$Contenu" n'existe pas existe ou n'est pas vide,
if test -z $Contenu
#O alors : afficher les raisons de l'échec et recommander la marche à suivre.
then
clear
echo "Les pages $Projet/$1.contenu et $Projet/$1.compilé n'ont pas été trouvées"
echo ""
echo -e "\033[31m copier la page 'Contenus' du livre dans le fichier $Projet/$1.contenu \033[0m"
echo ""
echo -e "\033[31m ou : copier la page de compilation dans le fichier $Projet/$1.compilé \033[0m"
let retour+=1;
#O afficher le code de retour de la commande et quitter.
#P Le code $retour n'est valable que pour un appel de fonction n'est pas pour
#P une commande directe.
if "$O" != "./lister"
then
echo "code de retour : $retour"
return $retour
else
exit $retour
fi
#O fin si la variable "$Contenu" n'existe pas existe ou n'est pas vide,
fi
#O si la variable "$Contenu" est égale à la chaîne "$Projet/$1.contenu" ou "$Projet/$1.Contenus"
if [ "$Contenu" = "$Projet/$1.Contenu" ] || [ "$Contenu" = "$Projet/$1.Contenus" ]
#O alors :
then
{
#O créer la liste des articles de la page avec la page de Contenus du livre.
echo ""
echo "$Projet/$1.list avec $Contenu :"
cat $Contenu | sed "s/\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" | tr ' ' '_' >> $Projet/$1.list
#O créer le fichier de projet avec la page de Contenus du livre.
cat $Contenu | grep $1 | sed "s/\[\[//g" | tr '|' '\n' |grep $1 | sed "s/$1\]\]/\r/g" | sed "s/\]\]//g" | cut -sd '/' -f2-5 > $Projet/$1.prj
}
fi
#O si le fichier LivreTest.compilé existe,
if test -r $Projet/$1".compilé"
#O alors :
then
{
#O créer la liste avec la page compilée.
echo ""
echo "$Projet/$1.list avec $Projet/$1.compilé :"
cat $Projet/$1.compilé | sed "s/:\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" | tr ' ' '_' >> $Projet/$1.list
#O créer le fichier de projet avec la page compilée
cat $1.compilé | grep $1 | sed "s/:\[\[//g" | tr '|' '\n' | grep $1 | sed "s/$1\]\]/\r/g" | sed "s/\]\]//g" | cut -sd '/' -f2-5 > $Projet/$1.prj
}
fi
#O si la variable "$Contenu" est égale à la chaîne "$Projet/$1.Sommaire" ou "$Projet/$1.Sommaire_du_livre"
if [ "$Contenu" = "$Projet/$1.Sommaire" ] || [ "$Contenu" = "$Projet/$1.Sommaire_du_livre" ]
#O alors :
then
{
#O créer la liste des articles de la page avec la page de Contenus du livre.
echo ""
echo "$Projet/$1.list avec $Contenu :"
cat $Contenu | sed "s/\[\[/\n$SitePrefix/g" | grep -e "https:" | grep -v "Catégorie:" | grep -v "#" | sed "s/{{BASEPAGENAME}}/$1/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" | tr ' ' '_' >> $Projet/$1.list
exit 0
#cat $Contenu | sed "s/\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" | tr ' ' '_' >> $Projet/$1.list
#O créer le fichier de projet avec la page de Contenus du livre.
cat $Contenu | grep "[[" | sed "s/\[\[//g" | tr '|' '\n' | grep $1 | sed "s/$1\]\]/\r/g" | sed "s/\]\]//g" | cut -sd '/' -f2-5 > $Projet/$1.prj
}
fi
#O afficher les listes pour contrôle et retourner la valeur 0 si tout est correct.
echo ""
echo " fichier Projet.list"
cat $Projet/$1.list
echo ""
echo " fichier Projet.prj"
cat $Projet/$1.prj
echo " "
read -p "Si tout est correct : retour-chariot pour continuer, Ctrl-C pour quitter > "
exit 0
# Fin lister.sh