Les utilisateurs novices d'Unix sont régulièrement déroutés par la complexité des lignes de commande à mettre en oeuvre. Dans cet exercice, vous allez créer un script destiné à les aider à utiliser la commande tar en les guidant par l'intermédiaire de menus.
La commande permettant de lire au clavier une variable est read. Par exemple, la succession de commandes read i; echo ${i} lit au clavier une chaîne de caractère avec read (la lecture se poursuit jusqu'au moment où vous appuyez sur la touche entrée) et l'affiche avec echo.
Le programme devra se dérouler en 3 étapes :
Choisissez une operation :
Creer une nouvelle archive 1
Ajouter des fichiers dans une archive 2
Lister le contenu d'une archive 3
Extraire le contenu d'une archive 4
Quitter le programme 0
Choisissez une ou plusieurs options :
Mode verbeux 1
Respect des permissions 2
Fin 0
Indication : le mieux est de construire en quatre parties une chaîne représentant la ligne de commande :
Si vous désirez aller plus loin dans l'exercice, il vous est possible d'apporter les améliorations suivantes :
Ecrivez un script shell qui prend sur sa ligne de commande un nombre et un nom de fichier de base et qui effectue l'opération suivante :
Ecrire " Ceci est le fichier numéro i " dans le fichier " nom_de_base.i "
... où i varie entre 1 et le deuxième argument de la ligne de commande du script (le premier étant nom_de_base). Vous utiliserez les possibilités suivantes :
Quelle méthode vous paraît la plus simple ? Ceux qui, à la suite de cet exercice, considèreront toujours qu'un mécanisme évolué de gestion des opérations arithmétiques dans les scripts shell ne s'imposait pas sont priés de passer me voir dans mon bureau !
Cet exercice est tout spécialement intéressant pour les gens en provenance de MSDOS et son résulat me sert régulièrement dans mes tâches quotidiennes d'administration système. En effet, supposons que vous vouliez changer l'extension d'un grand nombre de fichiers depuis .htm vers .html. Sous MSDOS, et, pourvu que les fichiers soient situés dans le même répertoire, vous faîtes ren *.htm *.html et le tour est joué ! Et là, vous voulez réitérer la commande sous Unix et vous vous rendez compte du résultat désastreux du au globbing par le shell ! Cet exercice vous propose de résoudre ce problème. En outre, vous pourrez utiliser cette commande sur des fichiers contenus dans une arborescence complète.
Voici le modus operandi de l'opération :
./toto.htm
./titi.htm
./sousrep/t2.htm
./toto.htm ./toto.html
./titi.htm ./titi.html
./sousrep/t2.htm ./sousrep/t2.html
mv ./toto.htm ./toto.html
mv ./titi.htm ./titi.html
mv ./sousrep/t2.htm ./sousrep/t2.html
Ecrire un script prenant en paramètres :
... et réalisant l'opération ci-dessus !
Parfois, vous voulez limiter l'utilisation de quelques commandes pendant certaines heures de la journée sans toutefois vouloir recourir à la gestion par groupes d'utilisateurs ou de crontabs. Vous instaurez donc un système basé sur la confiance ... Toutefois, vous vous rendez rapidement compte que, si la majorité de vos utilisateurs joue le jeu, quelques têtes brulées persistent à braver votre autorité, voyons comment les recenser ... en utilisant en particulier les commandes ps, grep et awk.
Ecrivez un script permettant d'extraire de manière unique le nom des utilisateurs utilisant une commande passée en argument.
Soit une belle page ouaib contenant du code source. Vous faîtes un beau copier coller vers votre éditeur de code source (vi par exemple), et, oh ! malheur ! celui-ci est rempli de cabalistique HTML remplaçant certains des caractères les plus courants en programmation : "<>&".
Exemple inverse, vous voulez insérer du code source dans une page HTML. Vous faîtes l'insertion brutale et au moment de la visualisation, tout est de travers car certains des caractères de votre code source ont été décodés comme des débuts de balise HTML.
Or, il n'est rien de plus fastidieux que de réaliser à la main la conversion d'un format vers l'autre, aussi, vous saisissez vous de sed pour écrire les 2 scripts de transformation !. Il y a un seul piège à éviter, celui concernant le caractère &.
Voici une liste minimale des caractères à convertir :
Code Source | HTML |
< | < |
> | > |
& | & |
" | " |
Comme vous le voyez, le caractère le plus difficile à traiter est &.