Skip to content

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 sauver qui copie des fichiers passés en paramètres dans le répertoire sauvegarde du 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 datedujour qui 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/bash
    d=$(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}

  • nomvar est le nom la variable
  • d est l’indice de début de la sous-chaine (0 est l’indice du premier caractère)
  • lg est 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.

  1. Écrire la commande maximum qui calcule dans la variable nommée maxi et 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 variable maxi la valeur 4 car il s’agit du maximum des paramètres donnés dans l’exemple.

    La commande maximum vé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

  1. Écrire la commande categorie qui calcule, stocke dans la variable categ et 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 variable categ la valeur senior.

    En athlétisme, les catégories d’âge sont données par le tableau suivant :

    CATEGORIEANNEE DE NAISSANCECATEGORIEANNEE DE NAISSANCE
    Masters1976 et avantMinimes2001 et 2002
    Seniors1977 à 1993Benjamins2003 et 2004
    Espoirs1994 à 1996Poussins2005 et 2006
    Juniors1997 et 1998École d’Athlétisme2007 à 2009
    Cadets1999 et 2000Baby 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

  1. Écrire la commande afficherresultat qui 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 m

    La commande afficherresultat doit 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 afficherresultat pourra appeler les commandes maximum et categorie.

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)

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:essai3

Exemple de fichier athletes.txt :

#Fichiers des athletes
#Nom:Prenom:dateNaissance:essai1:essai2:essai3
Galle:Martin:12-2-1991:94:87:93
Honnete:Marie:14-9-1982:82:91:93
Pleur:Jean:13-3-1976:93:79:72
Prane:Dolly:19-11-1999:41:57:59
Mieu:Jeff-Edmond:22-12-2004:89:95:91

Ecrire 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