#!/usr/bin/env bash # # creation_categ.sh # # Permet de naviguer dans les éléments de chaque catégorie d'un dossier suivant #+ la syntaxe : #+ #+ # Commentaire dans le fichier #+ [[Titre de la catégorie]]Description de la catégorie #+ titre de l'élément##http://domaine.tld/##description de l'élément##nom_image##Titre de l'image##description de l'image ## VARIABLES DEBUG=1 dossier="categ" destination="categories.html" IFS=" " dossier_composants="./composants" deb_categ="${dossier_composants}/categ_deb.html" fin_categ="${dossier_composants}/categ_fin.html" elem="${dossier_composants}/element.html" ## FONCTIONS debug() { if [[ $DEBUG -eq 1 ]] then echo -e $1 fi } ## TESTS if ! test -d $dossier then echo -e "Dossier '$dossier' manquant." exit 0 fi ## DEBUT #TODO: n'afficher que les fichiers dont l'extension est .txt (ou .ail?) #+ À l'aide de find par exemple. #TODO: Prendre en compte plusieurs paramètres pour : # - connaître le dossier contenant les fichiers de catégorie # - l'extension des fichiers contenant les catégories # - le fichier contenant le début de la catégorie # - le fichier contenant la fin de la catégorie # - le fichier contenant une trame pour un élément #TODO: Faire des tests sur les paramètres avant lancement du programme # Parcours du dossier for fichier in `ls $dossier` do # On met/remet la valeur de CATEG à 0 significative de l'absence #+ d'une Catégorie CATEG=0 # On met/remet le tableau des elements à 0 elements_titre=() elements_url=() elements_desc=() elements_image_addr=() elements_image_titre=() elements_image_desc=() curseur_element=0 # Calcul du nombre de ligne du fichier nbre_lignes=`cat ${dossier}/${fichier} |wc -l` # debug debug "$fichier: $nbre_lignes" # Vérification du nombre de lignes retourné if [[ $nbre_lignes -gt 0 ]] then # Récupération du nom de la catégorie nbre_categories=`grep -E "^\[\[.*\]\].*$" ${dossier}/${fichier} |wc -l` # Si le nombre de catégorie est égal à 1, on a tout bon if [[ $nbre_categories -eq 0 ]] then echo "Fichier '${dossier}/${fichier}' mal renseigné : Pas de nom de catégorie" exit 0 elif [[ $nbre_categories -gt 1 ]] then echo "Fichier '${dossier}/${fichier}' mal renseigné : Trop de catégorie présentes." exit 0 else echo "Fichier '${dossier}/${fichier}' correct : Catégorie présente." fi # le fichier contient plusieurs lignes, on lit le contenu for ligne in $(cat ${dossier}/${fichier}) do debug "Contenu ligne : $ligne" # Vérifie les différents cas possibles : #+ SI la chaîne débute par '#' #+ exemple : # quelque chose diese_comp=`echo $ligne |sed -e 's@^\(#\).*$@\1@g'` debug "Comparaison dièse : $diese_comp" if [[ $diese_comp == "#" ]] then debug "La ligne est un commentaire : Aucune action." continue fi #+ SI la chaîne commence par '[[' et fini par ']]' #+ exemple : [[Titre]]Description de ma catégorie categ_comp=`echo $ligne |sed -e 's#^\(\[\[\).*\(\]\]\).*$#\1\2#g'` debug "Comparaison '[[]]' : $categ_comp" if [[ $categ_comp == "[[]]" ]] then debug "La ligne est une catégorie : Enregistrement." titre_categ=`echo $ligne |sed -e 's#^\[\[\(.*\)\]\].*$#\1#g'` desc_categ=`echo $ligne |sed -e 's#^\[\[.*\]\]\(.*\)$#\1#g'` debug "$titre_categ : $desc_categ" CATEG=1 fi #+ SI la chaîne contient 6 fois '##' #+ exemple : Vous êtes perdus ?##http://perdu.com##Se rendre sur le site perdu.com####Mon image##Description de mon image element_comp=`echo $ligne |sed -e 's@^.*\(##\).*\(##\).*\(##\).*\(##\).*\(##\).*$@\1\2\3\4\5@g'` debug "Comparaison element : $element_comp" if [[ $element_comp == "##########" ]] then debug "La ligne est un élément : Enregistrement." # Recherche des informations pour l'élément element_titre=`echo $ligne |sed -e 's@^\(.*\)##.*##.*##.*##.*##.*$@\1@g'` element_url=`echo $ligne |sed -e 's@^.*##\(.*\)##.*##.*##.*##.*$@\1@g'` element_desc=`echo $ligne |sed -e 's@^.*##.*##\(.*\)##.*##.*##.*$@\1@g'` element_img_addr=`echo $ligne |sed -e 's@^.*##.*##.*##\(.*\)##.*##.*$@\1@g'` element_img_titre=`echo $ligne |sed -e 's@^.*##.*##.*##.*##\(.*\)##.*$@\1@g'` element_img_desc=`echo $ligne |sed -e 's@^.*##.*##.*##.*##.*##\(.*\)$@\1@g'` debug "Élément : titre=$element_titre, url=$element_url, desc=$element_desc, adresse_image=$element_img_addr, titre_image=$element_img_titre, desc_image=$element_img_desc" # Ajout des éléments dans les tableaux appropriés elements_titre[$curseur_element]=${element_titre:-""} elements_url[$curseur_element]=${element_url:-""} elements_desc[$curseur_element]=${element_desc:-""} elements_image_addr[$curseur_element]=${element_img_addr:-""} elements_image_titre[$curseur_element]=${element_img_titre:-""} elements_image_desc[$curseur_element]=${element_img_desc:-""} # Incrémentation du curseur du tableau contenant les éléments curseur_element=$(( $curseur_element + 1 )) fi done else # le fichier ne contient pas de ligne. message d'erreur echo -e "Fichier '$fichier' non pris en charge : Le fichier semble vide." fi # On débute la création du fichier contenant la catégorie si CATEG=1 if [[ $CATEG == 1 ]] then echo -e "Création d'un bloc Catégorie…" # Tests sur la valeur de la catégorie et de l'état du curseur debug "Catégorie : $titre_categ : $desc_categ" debug "État curseur : $curseur_element" # Tests sur la valeur debug "Fichier de début de catégorie : $deb_categ" debug "Destination : $destination" # Création du fichier pour les catégories (DÉBUT) cat $deb_categ |sed -e "s|@@TITRE_CATEG@@|${titre_categ}|g" -e "s|@@DESC_CATEG@@|${desc_categ}|g" > ${destination} sed -i "s#^\(.*\)@@.*@@\(.*\)#\1\2#g" ${destination} # Préparation du numéro d'index i=0 # Parcours des tableaux afin de récupérer toutes les informations #+ d'un élément while [ $i -lt $curseur_element ] do # Assignation des valeurs à des variables afin de l'afficher e_titre=${elements_titre[$i]:-""} # titre element e_desc=${elements_desc[$i]:-""} # description element e_url=${elements_url[$i]:-""} # url element e_img_addr=${elements_image_addr[$i]:-""} # adresse image e_img_titre=${elements_image_titre[$i]:-""} # titre image e_img_desc=${elements_image_desc[$i]:-""} # description image # Affichage du résultat debug "$i : ${e_titre} || ${e_desc} || ${e_url} || ${e_img_addr} || ${e_img_titre} || ${e_img_desc}" # Ajout des informations dans le fichier de destination echo -e "\t…ajout de l'élément '${e_titre}'" cat $elem |sed -e "s|@@TITRE_ELEMENT@@|$e_titre|g" -e "s|@@DESC_ELEMENT@@|${e_desc}|g" -e "s|@@URL_ELEMENT@@|${e_url}|g" -e "s|@@URL_IMAGE@@|${e_img_addr}|g" -e "s|@@TITRE_IMAGE@@|${e_img_titre}|g" -e "s|@@DESC_IMAGE@@|${e_img_desc}|g" -e "s|^\(.*\)@@.*@@\(.*\)$|\1\2|g" >> ${destination} # Incrémentation de l'index let i++ done # Ajout de la fin du fichier pour les catégories (FIN) cat $fin_categ >> ${destination} fi done