1. Gérer une "TODO list"
1.1. Description
Pour éviter d'oublier des choses importantes à faire, je voudrais garder une une liste dans mon ordinateur. J'aimerais pouvoir ajouter des tâches, les lister, et en supprimer.
Remarque: je pourrais également utiliser cette fonctionnalité pour garder :
-
une liste de films à voir,
-
la liste des livres que j'ai prêtés,
-
etc.
1.2. Objectif
Le script doit fournir une unique fonction todo
qui offre 3
fonctionnalités :
-
lister les tâches en attente
-
supprimer une tâche
-
ajouter une tâche -
Voici un exemple d'utilisation :
$ source todo.sh
$ todo list
1 - finir TP d'info202
2 - téléphoner à tata
3 - inviter Edith à manger
4 - passer la serpillère dans l'entrée
$ todo done 1
La tâche 1 (finir TP d'info202) est faite !
$ todo list
1 - téléphoner à tata
2 - inviter Edith à manger
3 - passer la serpillère dans l'entrée
$ todo add 2 réviser la chimie
La tâche "réviser la chimie" a été ajoutée en position 2.
$ todo list
1 - téléphoner à tata
2 - réviser la chimie
3 - inviter Edith à manger
4 - passer la serpillère dans l'entrée
1.3. Précisions
Votre fonction devra analyser son premier argument afin de décider quelle opération effectuer. Il faudra donc se reporter à la section arguments individuels d'une fonction et la description des conditionnelles.
Stockage des tâches
La liste des tâche doit être sauvegardée dans un fichier (caché) .todo_list qui sera stocké dans votre dossier personnel. Ce fichier contiendra une ligne par tâche, sans numéro.
Pour simplifier la gestion de ce fichier, il est conseillé de le définir dans une variable au début de votre script:
TACHES=$HOME/.todo_list
Note : la variable HOME
contient le chemin absolu vers
votre dossier personnel...
Manipulation du fichier
Pour manipuler les tâches, il faudra utiliser les choses suivantes.
-
La commande
nl
permet d'afficher les lignes d'un fichier, en ajoutant un numéro de ligne. Il est possible d'ajouter un séparateur entre le numéro et la ligne si vous le souhaitez (voirman nl
pour les détails). -
pour ajouter une tache en position
n
, il faudra :-
rediriger les
n-1
premières taches dans un fichier temporaire avec la commandehead
et une redirection>
, -
ajouter la tache dans le fichier temporaire avec une commande
echo
et une redirection>>
, -
les tâches à partir de la numéro
n
dans le fichier temporaire avec la commandetail
et une redirection>>
, -
remplacer le fichiers des tâches par le fichier temporaire.
Les commandes head et tail seront utiles pour afficher les premières ou dernières lignes d'un fichier, et il faudra aussi lire la section sur les opérations arithmétiques en bash
-
-
pour supprimer la tache en position
n
, il faudra-
rediriger les
n-1
premières taches dans un fichier temporaire avec la commandehead
et une redirection>
, -
les tâches à partir de la numéro
n+1
dans le fichier temporaire avec la commandetail
et une redirection>>
, -
remplacer le fichiers des tâches par le fichier temporaire.
-
1.4. Pour aller plus loin
-
Gestion des erreurs (oubli du numéro de tache, etc.)
-
Gestion de plusieurs fichiers pour des listes différentes.
-
Filtre sur les taches en cours (avec grep) pour limiter l'affichage.
-
etc.