TP4 - Boucles, sauvegardes et traitement de données
Sauvegarder des fichiers et des répertoires
Section titled “Sauvegarder des fichiers et des répertoires”Les scripts shell peuvent être utiles pour la réalisation de sauvegardes automatiques.
- Ecrire la commande
sauverqui copie des fichiers passés en paramètres dans le répertoiresauvegardedu répertoire courant (à créer s’il n’existe pas).- Afficher un message d’erreur si un nom correspond à un répertoire ou si un fichier est absent
Indice
Créez le répertoire sauvegarde s’il n’existe pas (mkdir -p), puis parcourez les paramètres avec un for, en testant chaque nom avec -d / -f avant de le copier.
Voir le cours : Les itérations - for et La commande test
-
Ecrire un script
datedujourqui affiche :Terminal window Nous sommes le Xeme jour du Yeme mois de l'annee Z.Pour cela, reprendre le script suivant qui affiche la date et le modifier de sorte que les zéros non significatifs n’apparaissent pas ; on pourra aussi tenir compte du 1 et afficher 1er au lieu de 1eme
#!/bin/bashd=$(date +%D)mois=${d:0:2}jour=${d:3:2}annee=${d:6:2}echo Nous sommes le jour $jour du mois $mois de l\'annee 20$annee
Pour extraire une sous-chaine d’une variable, on utilise la syntaxe suivante : ${nomvar:d:lg}
nomvarest le nom la variabledest l’indice de début de la sous-chaine (0 est l’indice du premier caractère)lgest la longueur de la sous-chaine
exemple : si la variable nomvar=tralala, alors ${nomvar:1:3} correspond à la chaîne “ral”
Lecture de fichiers, analyses de chaînes, calculs
Section titled “Lecture de fichiers, analyses de chaînes, calculs”- Pour chacune de vos commandes (scripts), les 3 points suivants doivent être respectés :
- Votre code doit être commenté et chaque commande doit avoir un en-tête précisant son rôle et ses paramètres.
- L’utilisateur doit pouvoir obtenir l’aide des commandes en tapant :
nomcommande --help - Si l’utilisateur appelle la fonction avec de mauvais paramètres, un message d’erreur et d’aide approprié doit s’afficher.
Les questions suivantes concernent la gestion d’une épreuve de lancé de Javelot. Durant cette compétition, chaque athlète a eu 3 essais.
-
Écrire la commande
maximumqui calcule dans la variable nomméemaxiet affiche le maximum d’une liste d’entiers passée en paramètres. Le nombre de paramètres n’est pas fixé.Par exemple, la commande «
maximum 1 2 3 4 3 2 1» a pour effet d’afficher et de placer dans la variablemaxila valeur 4 car il s’agit du maximum des paramètres donnés dans l’exemple.La commande
maximumvérifiera la présence d’au moins un paramètre et affichera un message d’aide dans le cas contraire.
Indice
Initialisez maxi avec le premier paramètre ($1), puis comparez-le à chacun des autres paramètres avec un for et l’opérateur -gt.
Voir le cours : Les itérations - for
-
Écrire la commande
categoriequi calcule, stocke dans la variablecateget affiche la catégorie d’âge d’un athlète.Par exemple, la commande «
categorie 1984» a pour effet d’afficher et de placer dans la variablecategla valeursenior.En athlétisme, les catégories d’âge sont données par le tableau suivant :
CATEGORIE ANNEE DE NAISSANCE CATEGORIE ANNEE DE NAISSANCE Masters 1976 et avant Minimes 2001 et 2002 Seniors 1977 à 1993 Benjamins 2003 et 2004 Espoirs 1994 à 1996 Poussins 2005 et 2006 Juniors 1997 et 1998 École d’Athlétisme 2007 à 2009 Cadets 1999 et 2000 Baby Athlé 2010 et après
Indice
Une suite de elif avec des comparaisons -le sur l’année, dans l’ordre chronologique du tableau, couvre exactement toutes les tranches.
Voir le cours : Les conditionnelles
-
Écrire la commande
afficherresultatqui affiche la catégorie et le meilleur lancé d’un athlète donné.Par exemple, la commande «
afficherresultat Martin Galle 12-2-1991 94 87 93» a pour effet d’afficher :Le meilleur lancé du senior Martin Galle est de 94 mLa commande
afficherresultatdoit comporter 6 paramètres : le prénom et le nom de l’athlète, sa date de naissance (au format j-m-aaaa) et les 3 essais.La commande
afficherresultatpourra appeler les commandesmaximumetcategorie.
Indice
Extrayez l’année de naissance (le dernier champ après le dernier - de la date), puis appelez vos commandes maximum et categorie déjà écrites avec $(...) plutôt que de refaire leurs calculs.
Voir le cours : Les variables (suite) (la substitution de commandes)
Exercice bonus (pour les plus rapides)
Section titled “Exercice bonus (pour les plus rapides)”On dispose d’un fichier de texte appelé athletes.txt et contenant une ligne pour chaque athlète avec le format suivant :
Nom:Prenom:DatedeNaissance:essai1:essai2:essai3Exemple de fichier athletes.txt :
#Fichiers des athletes#Nom:Prenom:dateNaissance:essai1:essai2:essai3Galle:Martin:12-2-1991:94:87:93Honnete:Marie:14-9-1982:82:91:93Pleur:Jean:13-3-1976:93:79:72Prane:Dolly:19-11-1999:41:57:59Mieu:Jeff-Edmond:22-12-2004:89:95:91Ecrire la commande calculerresultats qui affiche, pour chaque athlète d’un fichier donné, sa catégorie d’âge et son meilleur lancé. Le fichier contenant les athlètes et leurs performances au javelot est un paramètre de la commande.
Indice
Lisez le fichier ligne à ligne avec while read, en utilisant IFS=: pour découper chaque ligne sur les :. Pensez à ignorer les lignes de commentaire qui commencent par #.
Voir le cours : Les itérations - while