TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts



Documents pareils
Télécom Nancy Année

I. Introduction aux fonctions : les fonctions standards

Compte-rendu de projet de Système de gestion de base de données

TP1 - Prise en main de l environnement Unix.

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

Manuel d'utilisation

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Création d'un questionnaire (sondage)

Chapitre 4 Pierre, papier, ciseaux

COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER.

Initiation à la comptabilité Hellodoc Niveau : normal à confirmé

1 Démarrage de Marionnet

Manuel de l'utilisateur d'intego VirusBarrier Express et VirusBarrier Plus

Traitement de texte : Quelques rappels de quelques notions de base

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.3

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.0

Chapitre 2 Devine mon nombre!

Didacticiel de mise à jour Web

Chapitre 1 I:\ Soyez courageux!

Cyberclasse L'interface web pas à pas

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Premiers pas en Linux

SCHMITT Année 2012/2014 Cédric BTS SIO. TP Serveur Backup

Utiliser CHAMILO pour le travail collaboratif

CA Desktop Migration Manager

Utilisation de GalaxShare

TP 1 : 1 Calculs en binaire, octal et hexadécimal

Auguria_PCM Product & Combination Manager

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Poker. A rendre pour le 25 avril

Cours Langage C/C++ Programmation modulaire

Guide d utilisation. Table des matières. Mutualisé : guide utilisation FileZilla

Client Kiwi Backup : procédures d'installation et de mise à jour. Gilles Arnoult, Clément Varaldi

Gestion des utilisateurs : Active Directory

Table des matières. 10 Gimp et le Web. Option de traitement d'images Mémento pour la séance N o Création d'animation

Procédure Création : 04/05/2009 ARCHIVAGE DE LA MESSAGERIE

Vous rappelez-vous des premiers sites Internet auxquels vous avez accédé?

Recommandations de sécurité informatique

Présentation du logiciel Cobian Backup

Navigation dans Windows

Cours 1 : Qu est-ce que la programmation?

Acer erecovery Management

Samsung Drive Manager Manuel d'utilisation

1 sur 5 10/06/14 13:10

TP 1 Prise en main de l environnement Unix

TP WINDOWS 2008 SERVER - OUTILS DE SAUVEGARDE ET DE RESTAURATION

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

TP 1. Prise en main du langage Python

TD n o 8 - Domain Name System (DNS)

FinImportExport Documentation Utilisateur Gestion d'environnement dans Fininfo Market

NOTIONS DE PROBABILITÉS

CHAPITRE VIII : Les circuits avec résistances ohmiques

TP sauvegarde et restauration avec le logiciel Cobian Backup

(VM(t i ),Q(t i+j ),VM(t i+j ))

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Système clients serveur Kwartz Vulgarisation, identification, dossier personnel

Terminal Infocomm et Poste Infocomm

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

Exe Livret Animateur_Exe Livret Animateur 01/02/11 11:10 Page1

TAGREROUT Seyf Allah TMRIM

Initiation à la programmation en Python

TD séances n 3 et n 4 Répertoires et Fichiers sous Unix

L'USB et Windows XP. Tout d'abord, il faut connaître un peu de vocabulaire pour s'y retrouver par la suite :

Contents. 1 Premiers pas en Linux. 1.2 Généralités. 1.1 Bref historique Linux

La magie de SVN. Découverte & usage du logiciel

1 TD 2 : Construction d'une chier Acrobat et envoi par

Séance 0 : Linux + Octave : le compromis idéal

Storebox User Guide. Swisscom (Suisse) SA

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

Manuel d utilisation de Gestion 6

INSTALLATION ET CONFIGURATION D'UN SERVEUR WEB SUR MAC OS X

Contrôle parental NetAddictFree 8 NetAddictFree 8 - Guide d utilisation

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

claroline classroom online

Manuel de l utilisateur de Samsung Auto Backup

Didacticiel du service cartographique en cache

MANUEL D INSTALLATION D UN PROXY

Manuel d Utilisateur - Logiciel ModAFi. Jonathan ANJOU - Maud EYZAT - Kévin NAVARRO

HelpAndManual_unregistered_evaluation_copy GESTIONNAIRE D'ALARMES CENTRALISE OPTIM'ALARM. Manuel d'utilisation

TUTORIAL REUTERS. Utilisation de l'utilitaire de recherche Reuters

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

1. Structure d'un programme FORTRAN 95

Septembre 2012 Document rédigé avec epsilonwriter

Algorithmes d'apprentissage

5 semaines pour apprendre à bien jouer un morceau de piano

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Éléments d'architecture des ordinateurs

SOMMAIRE. Travailler avec les requêtes... 3

Les messages d erreur d'applidis Client

Projet Administration Réseaux

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

PREINSCRIPTION EN LIGNE

RAPPORT D'OPTIMISATION DU SITE INTERNET

Le backup LOGOSw (Backup interne)

Transcription:

E3FI ESIEE Paris Systèmes et scripts B. Perret TP : Shell Scripts 1 Remarque générale Lorsque vous cherchez des informations sur Internet, n'oubliez pas que langage de shell script que nous avons vu correspond à bash. La plupart des ressources disponibles se rapporte à ce langage néanmoins il est possible que vous tombiez de temps en temps sur un autre langage de shell script. 2 Mise en jambe Objectifs : savoir écrire et exécuter un shells script minimal. savoir utiliser des variables et exécutez des commandes. Cours : slides 61 à 71. Hello World : écrivez un script qui ache le message "Hello World". Exécutez le et vériez que le résultat est conforme. Paramètre : écrivez un script qui prend un paramètre et ache la valeur de se paramètre à l'écran. Exemple la commande./monscript toto doit acher parametre : toto. Exécutez le et vériez que le résultat est conforme. Somme de deux nombres : paramètres et l'ache à l'écran. écrivez un script qui calcule la somme de deux nombres passés en 3 Avec des si Objectifs : savoir utiliser la structure conditionnelle et la commande test en shell script. Cours : slides 72 à 78 Max : Ecrivez un script qui prend deux nombre en paramètre et ache le plus grand des deux. Utilisation correcte : Reprenez le script de l'exercice Paramètre ci-dessus. Que se passe-t-il si vous lancer le script sans indiqué de paramètre? Ajoutez des instructions an que le script ache un message d'erreur si l'utilisateur ne passe pas 1 et 1 seul paramètre au script. Nombre ou pas nombre : écrivez un petit script qui retourne la valeur 0 si le premier paramètre reçu représente un nombre entier et 1 sinon (utilisez grep). Astuce, parfois on ne s'intéresse pas à la sortie d'une commande mais uniquement à son code de retour. On peut alors rediriger la sortie de cette commande vers le chier /dev/null qui agit comme un trou noir (tout ce qu'on met dedans est perdu à jamais). 1

Nombre ou pas nombre 2 : écrivez un petit script qui demande un nombre a l'utilisateur et vérie si les caractères donnés par l'utilisateur correspondent bien à un nombre. 4 Boucles Objectifs : savoir utiliser la structure conditionnelle et la commande test en shell script. Cours : slides 79 à 86 Liste des paramètres : Somme de n nombres : paramètres. écrivez un script qui ache tous les paramètres qu'il a reçu. écrivez un script qui calcule la somme de tous les nombres passés en Nombre impairs : écrivez un script qui ache la liste des n premiers nombres impaires (à partir de 1), n étant un paramètre optionnel qui sera xé à 10 si il n'est pas précisé par l'utilisateur. Table de multiplication : écrivez un script nommé table permettant d'acher des tables de multiplications. table 5 10 aura pour résultat l'achage : 0 x 5 = 0 1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45 10 x 5 = 50 Fonction application : écrivez un script applique.sh qui prend en paramètre le nom d'une commande et qui appelle successivement cette commande avec chacun des chiers contenu dans le répertoire courant. (Par exemple si le répertoire courant contient 2 chiers fich1.txt et fich2.txt, l'exécution de./applique.sh wc génèrera les appelles : wc fich1.txt et wc fich2.txt.) Qui sont les plus grands? : écrivez un script qui ache la liste des utilisateurs dont l'uid est plus grand qu'un nombre donné en paramètre (cette information se trouve dans le chier /etc/passwd) Pointage et gestion des droits : (optionnel) écrivez un script pointer.sh qui ajoute une ligne contenant : le login de la personne exécutant le script, la date et l'heure, à la n du chier pointage.sh. Imaginons que ce script doit être appelé par les employés d'une entreprise lorsqu'ils arrivent ou quittent leur poste. Un problème se pose : comment faire pour que le script pointer.sh puisse modier le chier pointage.sh sans que les utilisateurs n'en aient le droit? Ceci est a priori impossible car lorsqu'un utilisateur lance un script, celui-ci s'exécute avec les droits de l'utilisateur qui le lance. Il existe néanmoins une astuce pour parvenir à cette n : cherchez des informations sur le mot Setuid sur Internet pour trouver la solution. Vérier avec un de vos collègues que cette solution fonctionne bien. 2

5 Un peu plus complexe Objectifs : perfectionnement et réutilisation de l'ensemble des notions vues. Comptage : écrivez un script qui prend en paramètre un nom de chier et qui ache ce chier ligne par ligne, en ajoutant devant chaque ligne : le numéro de la ligne et le nombre de mots qu'elle contient. ls récursif : écrivez un script qui ache la liste de tous les chiers contenus dans le répertoire courant, ses sous-répertoires, les sous-sous-répertoires, etc. Archivage : écrivez un script qui réalise les actions suivantes : Il créé le dossier ~/archive/yyyy-mm-dd/ ou YYYY-MM-DD-hh:mm est replacé par la date et l'heure actuelle (si le dossier ~/archive/ n'existe pas, il est créé dans la foulée). Il déplace tous les chiers du répertoire courant (ainsi que ses sous-dossiers) dans ce nouveau dossier. Ajoutez ensuite une option pour demander au script de mettre l'ensemble des chiers à déplacer dans une archive compressée.tgz (utilitaire tar). Un script de pro : (optionnel) ouvrez le script système /etc/init.d/killprocs qui est appelé lors de l'extinction du système. Essayez de comprendre comment il fonctionne. 6 Problème (presque) concret : automatisation Objectif : savoir combiner les compétences acquises pou résoudre un problème concret, utiliser les fonctions. Cours : slides 87 à 89. Cet exercice constitue un petit problème classique : comment automatiser une tâche répétitive tout en gérant proprement les exceptions. Dans notre problème, nous avons un ensemble de données qui sont stockées dans le répertoire ~perretb/public_html/i3fm/unix/subwork/. Ces données sont stockées dans un peu plus de 1200 chiers indépendants. Nous souhaitons appliquer le programme qui a été développé par l'équipe sur chacun de ces chiers. Ce programme appelé dosomething est disponible ici : ~perretb/public_html/i3fm/unix/dosomething. dosomething n'est pas encore parfaitement able (c'est la beta 0.92) et il arrive qu'il soit incapable de faire ce qu'il est sensé faire sur certaines données. Néanmoins les ingénieurs ont trouvé un compromis, dosomething peut fonctionner selon 3 niveaux d'optimisation. Dans le niveau le plus haut il est très rapide mais plante souvent, dans le niveau le plus bas il est plutôt lent mais plante rarement. La stratégie retenue est alors la suivante : pour chaque chier on essaye de le traiter avec le niveau 1 (optimisation maximale). Si cela ne fonctionne pas on réessaye avec le niveau 2. Si cela ne fonctionne toujours pas, on passe au niveau 3. Finalement, si le niveau 3 ne fonctionne pas non plus, il faut enregistrer le nom du chier fautif pour que l'équipe de débogage se penche dessus. Concrètement, le programme dosomething s'utilise de la façon suivante. Il prend obligatoirement 2 paramètres : le premier indique le niveau d'optimisation : -o1 (optimisation élevée) -o2 (optimisation moyenne) -o3 (optimisation faible) le nom du chier à traiter. Si le traitement se déroule correctement, le résultat est écrit sur la sortie standard et le code de retour 0 (succès) est renvoyé. Si une erreur survient (erreur dans la façon d'utiliser le programme ou impossibilité de traiter le chier indiqué au niveau d'optimisation voulu), le descriptif de l'erreur est écrit sur la sortie d'erreur et le code de retour 1 (échec) est renvoyé. 3

Comme il est impensable de devoir gérer cette procédure manuellement sur les 1223 chiers à traiter, vous allez devoir écrire un script qui automatise le processus et enregistre les résultats au fur et à mesure. 1) Commencez par écrire une fonction qui prend trois arguments : Le nom du chier à traiter Le nom du chier de résultats Le nom du chier de log des erreurs Cette fonction applique la stratégie de traitement décrite sur le chier d'entrée. Le résultat (si une des niveaux d'optimisation fonctionne) doit être inscrit à la suite du chier de résultats. Si le niveau d'optimisation 3 échoue, le message d'erreur produit par le programme doit être enregistré dans le log d'erreur (on ne s'intéresse pas au message d'erreur des niveaux 1 et 2). 2) Écrivez un seconde fonction qui prend les mêmes arguments que la fonction précédente et qui détermine si le chier a déjà été traité. Elle doit retourner : 0 si le chier n'apparait ni dans le chier de résultat ni dans le chier de log d'erreur 1 dans le cas contraire 3) Écrivez le script basé sur ces deux fonctions qui automatise le traitement de tous les chiers contenu dans le répertoire dont il reçoit le nom en paramètre. (Faites une boucle sur l'ensemble des chier du répertoire, déterminez alors si une action est à réaliser grâce à la fonction 2) et si c'est le cas utilisez la fonction 1) ) 7 Jeux du pendu Objectif : s'amuser en shell script. Le pendu est un jeu consistant à trouver un mot en devinant quelles sont les lettres qui le composent. Au début du jeu, les caractères du mot à trouver sont cachés et le joueur ne peut voir que le nombre total de caractères qui le compose. A chaque étape du jeu, le joueur propose un caractère. Si ce caractère apparait dans le mot, toutes les lettres correspondant à ce caractère sont découvertes (montrées au joueur). Si la lettre n'apparait pas dans le mot, le joueur perd une vie. Le joueur doit découvrir toutes les lettres du mot avant de perdre toutes ses vies. Le but de cet exercice est de programmer le jeux du pendu en shell script. Ce type de jeu est bien adapté à ce langage car il s'agit essentiellement de manipuler des chaines de caractères. Pour commencer, récupérez le chier ~perretb/public_html/i3fm/unix/liste.txt qui contient une liste de mots. Pour coder le jeux du pendu nous allons suivre le schéma suivant. Le programme va maintenir une liste des caractères cachés. Au début cette liste contient toutes les lettres de l'alphabet (caches="abcd...wxyz"). A partir de cette liste et du mot a trouver, nous allons dénir diverses fonctions : une fonction qui remplace les lettres cachées du mot à découvrir par un autre caractère (par exemple un tiret -) une fonction qui teste si le mot contient un caractère donné (pour déterminer si le joueur perd une vie) une fonction qui retire un caractère de la liste des caractères cachés une fonction qui teste si le mot ne contient aucune des lettres cachées (dans ce cas le joueur gagne) et nalement une fonction qui tire un mot au hasard dans la liste des mots. On va écrire ces diérentes étapes, l'une après l'autre. Testez chaque fonction après l'avoir écrite et assurez vous qu'elle fonctionne correctement dans des cas variés avant de passer à la fonction suivante. 1) Écrivez une fonction motauhasard qui ache un mot tiré au hasard dans le chier liste.txt (la variable RANDOM permet de générer des nombres aléatoires. Par exemple $(( RANDOM % nombdredelignes )) calcule un nombre au hasard compris entre 0 et nombrelignes 2) Écrivez une fonction affichemot qui prend deux arguments : le mot à trouver et la liste des lettres cachées. Cette fonction remplace dans le mot à trouver toutes les lettres de la liste des lettres cachées par des tirets et ache le résultat. 3) Écrivez un fonction decouvre qui prend deux arguments : la liste des caractères cachés et un caractère. Cette fonction supprime le caractère de la liste des caractères cachés et ache la nouvelle liste. 4

4) Écrivez une fonction testpresence qui prend deux paramètres : le mot à découvrir et un caractère. Cette fonction retourne 0 si le caractère est présent dans le mot à découvrir et 1 sinon. 5) Écrivez une fonction testgagne qui prend deux arguments : le mot à trouver et la liste des lettres cachées. Cette fonction retourne 0 si le mot ne contient aucun caractère caché et 1 sinon. 6) Vous pouvez maintenant écrire la partie principale du jeu en combinant les fonctions précédentes. Si vous êtes perdus, vous pouvez suivre le pseudo code donné sur la page suivante mais essayez d'abord de trouver par vous-même. 5

vie := 7 caches := "abcdefghijklmnopqrstuvwxyz" lemot := motauhasard() tant que ( vie > 0 ) faire affichemot() demander un caractère c à l'utilisateur caches := decouvre(caches,c) si testpresence(mot,c) == 0 si testgagne(mot,caches) Afficher("Gagné!") Quitter fin si sinon vie := vie - 1 fin si fin tant que Afficher("perdu!") 6