Le but de cet exercice est de faire un un script pour générer des squelettes: C, latex, ou shell. Manipulation des variables, switch, fonction, redirections dans des fichiers.
Bien souvent lorsque l’on crée des fichier C, shell, ou encore latex, on a toujours besoin du même squelette qu’il est fastidieux de retaper à chaque création de fichier. Le but de cet exercice est de faire un script qui vous permette de générer des squelettes personnalisés et contenant l’ensemble des informations de bases spécifiques à chaque langage.
Exemple de squelette C pour monfichier.c
:
/**
*
* @filename monfichier.c
* @date 2019-10-18 15:13
* @author Prenom Nom <prenom.nom@enseirb-matmeca.fr>
* @brief ...
*
*/
#include <stdlib.h>
#include <stdio.h>
#define _NB_MIN_PARAMS_ 1
void print_usage( char *argv[] ) {
fprintf( stderr, "Usage: %s ....\n", argv[0] );
return;
}
int main( int argc, char *argv[] )
{
if ( argc < _NB_MIN_PARAMS_ ) {
print_usage( argv );
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Exemple de squelette tex pour monfichier.tex
:
%%
%% @filename monfichier.tex
%% @date 2019-10-18 15:13
%% @author Prenom Nom <prenom.nom@enseirb-matmeca.fr>
%% @brief ...
%%
\documentclass[a4paper, draft]{article}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
% Figures
\usepackage{graphicx}
\graphicspath{{./img/}}
% Math
\usepackage{amsmath, amssymb}
\newtheorem{defi}{Définition}
% Algortihmes
\usepackage[vlined,lined,linesnumbered,boxed,french]{algorithm2e}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator{\myfunc}{myfunc}
\DeclareMathOperator*{\sign}{sign}
\DeclareMathOperator*{\imwh}{width}
\DeclareMathOperator*{\imht}{height}
% Extra
\usepackage[left=3cm,right=3cm,top=2cm,bottom=2cm]{geometry}
\usepackage{url}
\begin{document}
\end{document}
Exemple de squelette shell pour monfichier.sh
:
#!/bin/sh/env bash
#
# @filename monfichier.sh
# @date 2019-10-18 15:13
# @author Prenom Nom <prenom.nom@enseirb-matmeca.fr>
# @brief ...
#
CMD=$( basename $0 )
nbminparams=1
usage()
{
echo "Usage: $CMD ..."
}
if [ $# -lt $nbminparams ]
then
usage
exit 1
fi
Le nom de fichier sera passé en paramètre.
./skeleton.sh monfichier
Vérifier le nombre de paramètres du script et faite appel à une fonction usage
décrivant le comportement si il y a une erreur.
On souhaite maintenant générer plusieurs types de squelettes. Déplacer la génération du script initial dans une fonction. On a va créer une fonction par template, donc par type de fichier.
améliorer le script en mettant en place un aiguillage (case
) permettant d’appeler la bonne fonction en fonction du type du fichier.
./skeleton monfichier tex
devra par exemple générer le template latex.
On remarque que l’entête est très similaire d’un format de fichier à l’autre. Il s’agit toujours des mêmes lignes. Factoriser le code à l’aide d’une fonction qui prend en paramètre le symbole qui différencie chacune des entêtes.
On peut aller plus loin dans la factorisation et l’automatisation du code.
date
avec le bon format de sortie.