Exercices de scripting
Quelques exercices de base de scripting shell.
Téléchargements de fichiers
Le projet Gutenberg contient de nombreux ouvrages libres de droits. Vous allez y récupérer des fichiers avec du scripting shell
Récupération du fichier
Essayez de faire les différentes question de cette partie en une seule ligne de shell.
Url
En utilisant la commande curl
(au pire installez là), téléchargez le 1er tome du Comte de Monte-Cristo au format utf-8 (récupérez son adresse sur le site) et affichez le résultat dans stdout.
Sauvegarde
Sauvegardez le contenu de l'url dans un fichier dont vous choisirez le nom en utilisant la redirection de stdout vers un fichier.
Métrologie
Vous utiliserez le fichier de la question précédente pour faire cette partie. La encore, vous devriez pouvoir répondre à toutes les questions en une seule chaîne de commandes, mais ne vous forcez pas à y arriver si vous ne trouver la pas la solution.
Nombres
en Utilisant wc
, rendez le nombre de lignes, de mots et de caractères de ce fichier.
Entête du Roman
- A quelle ligne commence effectivement le Roman ?
- . Quelle option de
grep
permet de donner la ligne contenant le pattern à chercher ? - Quel pattern utiliseriez vous avec grep pour trouver la fin de l'entête ajoutée par le site Gutenberg (on considère que la table des matière fait partie du roman) ?
- Utilisez cette option pour trouver le numéro de ligne du début du roman
- Combinez la recherche précédente avec la commande
cut
pour avoir uniquement le numéro de ligne - Comptez le nombre de lignes, de mots et de caractères de ce fichier à partir du début du roman
Marseille
- Quelle est la différence entre
grep
etgrep -E
? - En utilisant la commande
grep -E
, comptez le nombre de fois où l'on parle de Marseille ou de Marseillais dans ce Tome.
Stockage
On vous demande de créer un script pour répondre aux questions suivantes
Tout le comte
- Créez un script qui crée sort sur stdout le contenu à la suite des 4 tomes du comte de monté Cristo
- affinez le résultat en ne prenant pas les entêtes des 4 romans
Vous utiliserez une boucle for pour télécharger les 4 tomes à la suite des autres, à partir d'un tableau dans lequel vous aurez au préalable stocké les 4 urls.
Le comte est bon
Sauvez avec une redirection le contenu du roman dans un fichier. Utilisez ce fichier pour :
- Refaire la partie métrologie pour le roman entier.
- calculez le nombre moyen de mot par ligne (divisez le nombre de mots par rapport au nombre de lignes)
Script final
Créez un script qui :
- crée le fichier
comte-monte-cristo.txt
uniquement s'il n'existe pas déjà dans le dossier courant. - Si le fichier existe :
- le script prévient l'utilisateur sur stderr
- rend un code de sortie de 1
- si le fichier n'existe pas :
- il crée le fichier et y met les 4 tomes du cote de Monte-Cristo (partie "Tout le comte")
- affiche sur stderr, le nombre de ligne du fichier
- rend un code de sortie de 0
Poubelle
La commande rm
ne fait aucune sauvegarde d'un fichier avant de le supprimer. On vous demande de :
- créer une commande
poubelle
qui prend un unique paramètre. Vous placerez cette commande dans$HOME/.local/bin
et ferez en sorte que la commande soit accessible en changeant le PATH. - cette commande doit prendre un argument. SOn fonctionnement est le suivant :
- elle sauve le fichier argument dans le dossier
$POUBELLE
- elle supprime le fichier argument
- elle sauve le fichier argument dans le dossier
- si la variable d'environnement
$POUBELLE
n'existe pas, elle sauve le fichier argument dans le dossier$HOME/.config/poubelle
- si l'argument existe déjà dans
$POUBELLE
(ou dans$HOME/.config/poubelle
si$POUBELLE
n'est pas positionné), la commande doit :- prévenir dans stderr que ce fichier est déjà sauvé
- si l'option -f n'est pas positionner, s'arrêter avec un code de sortie de 1.
- si l'option -f est positionner, elle doit remplacer le fichier par le nouveau et rendre un code de sortie de 0
- si la commande est langée avec l'option
-r
et avec un argument : elle doit- récupérer le fichier sauvé dans
$POUBELLE
(ou dans$HOME/.config/poubelle
si$POUBELLE
n'est pas positionné) s'il existe (sinon on prévient l'utilisateur dans stderr et on sort avec un code de 2) - copier le fichier dans le dossier courant
- supprimer de
$POUBELLE
(ou dans$HOME/.config/poubelle
si poubelle n'est pas positionné)
- récupérer le fichier sauvé dans
- si la commande est lancée avec la commande
-l
et sans argument, elle doit lister les fichiers sauvés (ceux de$POUBELLE
ou de$HOME/.config/poubelle
si$POUBELLE
n'est pas positionné) - la commande doit avoir une option
-h
(et--help
) permettant de rendre son aide. - si la commande est lancée sans arguments, avec des arguments incompatibles ou incomplet, la commande doit s'arrêter avec un code de 3 et afficher l'aide de la commande.
Vous pourrez lire ce tuto pour gérer au mieux les options.