1. BASH - Programmation en SHELL...21



Documents pareils
TP1 - Prise en main de l environnement Unix.

Outils pour la pratique

Aide-Mémoire unix. 9 février 2009

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

Linux et le Shell. Francois BAYART. Atelier du samedi 20 Novembre

Premiers pas en Linux


Bon ben voilà c est fait!

Introduction aux Systèmes et aux Réseaux

TP 4 de familiarisation avec Unix

C.M. 1 & 2 : Prise en main de Linux

«Astrophysique et instrumentations associées» Cours UNIX Benoît Semelin

1 Démarrage de Marionnet

TP 1 Prise en main de l environnement Unix

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

Environnements informatiques

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

La Comptabilité UNIX System V Acctcom

Année Cours Unix-Shell. par. Karam ALLALI. Ecole Spéciale d Informatique

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

Projet Administration Réseaux

Atelier individuel. Linux 101. Frédérick Lefebvre & Maxime Boissonneault frederick.lefebvre@calculquebec.ca U. Laval - Janv. 2014

Algorithmique et Programmation, IMA

Shell Bash Niveau débutant

SERVEUR DE SAUVEGARDE POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

Installation d ORACLE 10g sous Debian Etch

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Introduction au Système d Exploitation Unix/Linux

sshgate Patrick Guiran Chef de projet support

Guide d'installation de la base de données ORACLE 10g ( ) pour linux FEDORA CORE 4.

Installation de Zabbix

Programmation système en C/C++

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

Polycopié Cours Système d Exploitation I. Programme : Filière SMI S3

PROXY SQUID-SQARD. procédure

Première partie. Qu est-ce qu un script?

Table des matières Hakim Benameurlaine 1

Client windows Nagios Event Log

TP 1. Prise en main du langage Python

CONFIGURATION DU SERVEUR DE MAILS EXIM. par. G.Haberer, A.Peuch, P.Saade

Formation Technicien Supérieur de Support en Informatique T2SI. Le module LINUX. Session J04 Version 01

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

Premiers pas. Shell? Les processus vu comme des filtres. commandes

Introduction à MATLAB R

Séance n o 5 : Alternatives, gestion des utilisateurs et des processus

Cloner un disque dur

Cours Unix 1. Présentation d UNIX. Plan du cours 1

TP administration système

1. Structure d'un programme FORTRAN 95

Sauvegarde sous MAC avec serveur Samba

ASR4 Réseaux Département Informatique, IUT Bordeaux 1. DHCP Prénom : Nom : Groupe :

Cours Programmation Système

Programmation système I Les entrées/sorties

Le langage C. Séance n 4

Travaux Pratiques sur GRID 5000

Architecture de la plateforme SBC

Chapitre IX : Virtualisation

Cours de Systèmes d Exploitation

Introduction aux Systèmes et aux Réseaux

TP1 : Initiation à l algorithmique (1 séance)

1 Configuration réseau des PC de la salle TP

Système et réseaux (SR1) Gestion des utilisateurs

Classe et groupe : 1P 3 SEN TRI. Ubuntu : serveur Contrôleur de Domaine (PDC) avec SAMBA

D r o i t s D r o i t s Q u i z z : i n t e r n e t t e x t e

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

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

Serveur de sauvegardes incrémental

TP LINUX : MISE EN RÉSEAU D UN SERVEUR LINUX

Le prototype de la fonction main()

Installation d'un serveur FTP géré par une base de données MySQL

1 Mesure de la performance d un système temps réel : la gigue

Initiation à la programmation en Python

Introduction...3. Objectif...3. Manipulations...3. La Sauvegarde...4. Les différents types...4. Planification...4. Les outils...5

Monter automatiquement des disques distants ou locaux avec automount/autofs

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Introduction à l Administration Systèmes et Réseaux

Les Boitiers de Vote Electroniques (Clickers)

IFT Systèmes d exploitation - TP n 1-20%

Oracle 11g. Installation et administration. Claude Duvallet 1/36

LEs processus coopèrent souvent pour traiter un même problème. Ces

Programmation C++ (débutant)/instructions for, while et do...while

Tutoriel Création d une source Cydia et compilation des packages sous Linux

TP, première séquence d exercices.

INF 321 : mémento de la syntaxe de Java

Licence Sciences et Technologies Examen janvier 2010

Année Universitaire ième année IMAC Mardi 6 janvier Cloud computing Travaux Pratiques

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

Algorithmique et programmation : les bases (VBA) Corrigé

Programmation C. Apprendre à développer des programmes simples dans le langage C

Sauvegarde automatique des données de GEPI

Le système GNU/Linux IUP NTIC /11/05

SOFI Gestion+ Version 5.4. Echanges de données informatiques Spicers Sofi gestion+ Groupements. SOFI Informatique. Actualisé le

Exercice sur les Dockers

Corrigé des TD 1 à 5

Complément au mémoire de diplôme

Atelier Le gestionnaire de fichier

TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

Transcription:

Table des matières Programmation en SHELL BASH sous Linux...3 1. Présentation...3 2. Avant de commencer...3 2.1. L interpréteur...4 2.2. Le quoting...4 2.3. Les structures de contrôles...4 2.3.1. for...5 2.3.2. Fonctions...5 2.3.3. If, Then Elif, Fi...6 2.3.4. Let...6 2.3.5. Read...6 2.3.6. Select...7 2.3.7. test...7 2.3.8. Répéter jusqu à...8 2.3.9. Tant Que...8 2.4. Autres commandes...8 2.5....9 Utilisation de scripts shell BASH - Exercices...11 1. BASH - Programmation en SHELL...11 1.1. TP utilisation de la fonction TEST...11 1.2. TP Utilisation de la fonction selon que (case)...11 1.3. TP Utilisation de la fonction pour (for)...12 1.4. TP Etude de la fonction si (if)...12 1.5. TP Étude de la fonction répéter jusqu à (until...do...)...13 1.6. TP Etude de la fonction tant que (while)...14 1.7. TP Etude de la fonction select...14 1.8. TP Création de fonction shell...15 1.9. TP Traitement des options de la ligne de commande...15 1.10. TP Étude des signaux...16 1.11. TP Appel inter-processus et étude de signaux...16 1.12. TP de synthèse 1 - TP Etude des signaux...17 1.13. TP de synthèse 2 - Appel de scripts...17 1.14. TP de synthèse 3 - Utilisation de commande externes...18 1.15. TP de synthèse à réaliser en binôme...19 Utilisation de scripts shell BASH - Corrections...21 1. BASH - Programmation en SHELL...21 1.1. TP 1 - Utilisation de TEST...21 1

1.2. TP 2 - Utilisation de CASE...23 1.3. TP 3 - Utilisation de la structure for et do...until...24 1.4. TP 4 - utilisation de la structure si...25 1.5. TP 5 - Utilisation de la structure répéter jusqu à...26 1.6. TP 6 - Utilisation la structure tantque...27 1.7. TP 7 - Utilisation de la fonction select......28 1.8. TP 8 - Utilisation de fonctions...28 1.9. TP 9 - Utilisation de getopts et optind...30 1.10. TP 10 - Appel et gestion inter processus...31 2

Programmation en SHELL BASH sous Linux Alix MASCRET 1. Présentation Les documents suivants donnent quelques éléments de référence sur le développement de scripts en BASH. Prévoir de donner les éléments de cours nécessaires pour la réalisation des exercices. 2. Avant de commencer Vous devez avoir quelques connaissances sur Linux. Si ce n est pas le cas consultez : http://www.linux-france.org/article/debutant/debutant-linux.html. Vous devez savoir au minimum comment est constitué le SGF de Linux et connaître les commandes suivantes : ouvrir/fermer une session, changer son mot de passe (passwd) w, who, id ls, cd, mkdir, rmdir, rm, cp, mv, pwd, ln wc, tail, head, sort, more, cat, less, tar, gzip, grep, lpr chmod, chown, chgroup, umask, adduser, userdel, connaître l emplacement et la structure des fichiers group et passwd which, locate, find clear, date, echo, df, du, top, kill, killall, alias connaître les fichiers standards (stdin, stdout, stderr), les opérateurs de redirections (<, >, >>), le fonctionnement des pipes. 3

Programmation en SHELL BASH sous Linux set, ps, hostname, les principales variables environnement et les principaux fichiers "~/.bash_*". Déclarer une variable environnement, exporter cette variable. connaître les fichiers.bash_history,.bash_profile,.bashrc,.bash_logout La commande "man" 2.1. L interpréteur Déclarez en entête du script le nom et l emplacement de l interpréteur. #!/bin/bash Rendez ensuite votre script exécutable avec la commande : chmod u+x NomDeVotreScript 2.2. Le quoting Tout ce qui est placé entre "" est lu littéralement sauf (accent grave), $ et " Tout ce qui est placé entre (accent aigu) est lu littéralement, sauf un autre accent aigu. Pour déspécialiser un caractère utiliser le \ (back slashe) Esaayez par exemple le code suivant : #!/usr/bash nom="pierrot" echo "Salut Pierrot" echo "Salut \"Pierrot\"" echo "Salut $nom" echo "Salut \$nom" 4

Programmation en SHELL BASH sous Linux 2.3. Les structures de contrôles case chaîne in regex) commandes... ;;... esac Exemple : echo -n "Entrez un nombre :" read nombre case $nombre in 1) echo "Vous avez tapé 1";; 2) echo "Vous avez tapé 2;; *) echo "Vous n avez tapé ni 1 ni 2";; esac 2.3.1. for for x [ in list ] do commandes Exemple : for $i in * do pr $i > $i.tmp for $i in cat liste do ls $i for i in 1 2 3 do echo $i 5

Programmation en SHELL BASH sous Linux 2.3.2. Fonctions function commande {...} On accède aux paramètres avec $1...$n function somme { resultat = expr $1 + $2 } Attention aux espaces. 2.3.3. If, Then Elif, Fi if expression then intruction1... instructionn elif then... else... fi Exemple : if [ -f $1 ] then echo "C est un fichier" else echo "Je ne sais pas ce que c est." fi 2.3.4. Let Initialisation (ajouter 1 à i) let i=i+1 let "i = i + 1" 6

Programmation en SHELL BASH sous Linux 2.3.5. Read Lecture d une valeur au clavier echo -n "Entrez votre nom :" read nom echo $nom 2.3.6. Select select nom [ in liste ; ] do commandes Le numéro du choix est affecté à $REPLY, le nom du choix à $nom select choix in \ "Choix A" \ "Choix B"; do case $REPLY in 1) echo "$choix --> $REPLY";; 2) echo "$choix --> $REPLY";; *) echo "Vous avez tapé n importe quoi!";; esac 2.3.7. test test expression ou alors [ expression ]. Retourne 0 si Vrai, une autre valeur dans les autres cas. Exemple : if test 3 -eq 3... if [ 3 -eq 3 ]... if test $1 == $2... if [ $1 == $2 ]... Test sur les fichiers 7

Programmation en SHELL BASH sous Linux -d, si c est un répertoire -e, si le fichier existe -f, si le fichier existe et si c est un fichier standard Test sur les chaînes s1 == s2, si les chaînes s1 et s2 sont identiques s1!= s2, si les chaînes sont différentes. Test sur les entiers n1 -eq n2, si n1 est égal à n2 opérateurs -ne, -eq, -gt, -lt, -le -ge 2.3.8. Répéter jusqu à until Commande_Test do Commandes 2.3.9. Tant Que while Commande_Test do Commande 8

Programmation en SHELL BASH sous Linux 2.4. Autres commandes echo -n désactive le retour de chariot de fin de chaîne echo -e active l interprétation des séquences d échappement (\a bell). Exemple : echo -e foo \a 2.5. Quand on lance un script : Les paramètres sont passés dans $1, $2...$n $@, donne la liste des paramètres $#, donne le nombre de paramètres $$, donne le numéro (PID) du script $0, Donne le nom du script $?, Donne la valeur de retour d un script ou d une fonction 9

Programmation en SHELL BASH sous Linux 10

Utilisation de scripts shell BASH - Exercices Alix MASCRET Séquence de TP sur la programmation en SHELL BASH sous Linux. 1. BASH - Programmation en SHELL 1.1. TP utilisation de la fonction TEST Ecrivez un script qui dit si le paramètre passé est : un fichier un répertoire n existe pas Ecrivez un script qui n affiche que les répertoires Ecrivez un script qui n affiche que les fichiers Ecrivez un script qui donne le nombre de fichiers et de répertoires 11

Utilisation de scripts shell BASH - Exercices 1.2. TP Utilisation de la fonction selon que (case) En utilisant la strucure case, écrire un script qui : affiche un menu demande à l utilisateur de saisir une option du menu affiche à l utilisateur l option qu il a choisi Exemple de ce qui doit s afficher à l écran : *********** Menu général ************ <1> Comptabilité <2> Gestion commerciale <3> Paie <9> Quitter ************************************** 1.3. TP Utilisation de la fonction pour (for) En utilisant la structure for, écrire un programme qui donne les valeurs de y d une fonction pour les valeurs de x allant de -10 à 10 avec un incrément de 1. Réalisez le traitement pour les fonctions y=x, y = x puiss2 Réécrivez les programmes avec la strucure répéter... jusqu à Adapter le script afin que les bornes -x, +x soient passées en paramètres au script. Modifiez le script de façon à ce que l on puisse passer en paramètres l incrément. 1.4. TP Etude de la fonction si (if) -A- En utilisant la strucure if, écrire un script qui : affiche un menu 12

Utilisation de scripts shell BASH - Exercices demande à l utilisateur de saisir une option du menu affiche à l utilisateur l option qu il a choisi Exemple de ce qui doit s afficher à l écran : *********** Menu général ************ <1> Comptabilité <2> Gestion commerciale <3> Paie <9> Quitter ************************************** -B- Vous allez utiliser un fichier dans lequel vous stockerez les informations suivantes : premier 3 deuxième 10 troisième 25 quatrième 2 cinquième 12 Construisez un script qui permet de n afficher que les enregistrements dont la valeur est supérieure à 10. 1.5. TP Étude de la fonction répéter jusqu à (until...do...) -A- En utilisant la structure until...do..., écrire un script qui : demande à un utilisateur de saisir une commande exécute la commande ou affiche un message d erreur si la commande ne s est pas déroulée. répète cette opération tant que l utilisateur le désire. Exemple de ce qui doit s afficher à l écran : ******************************************************* 13

Utilisation de scripts shell BASH - Exercices Saisisez une commande, commande <Q> pour quitter. ******************************************************* 1.6. TP Etude de la fonction tant que (while) En utilisant la structure while, écrire un script qui : Tant que l utilisateur n a pas tapé 9 affiche un menu demande à l utilisateur de saisir une option du menu affiche à l utilisateur le résultat de sa commande Exemple de ce qui doit s afficher à l écran : *********** Menu général ******************************* <1> Afficher la date (date) <2> Afficher le nombre de personnes connectées (who) <3> Afficher la liste des processus (ps) <9> Quitter ********************************************************* 1.7. TP Etude de la fonction select -A- Vous allez à l aide de la fonction select réaliser un menu à 4 options pour un utilisateur. Le script doit boucler tant que l utilisateur n a pas choisi de quitter. Option 1 : Afficher la liste des utilisateur connectés Option 2 : Afficher la liste des processus Option 3 : Afficher à l utilisateur son nom, son UID, son GID, son TTY1 Option 4 : Terminer 14

Utilisation de scripts shell BASH - Exercices -B- Modifier le script afin de rajouter un Option. Cette option doit vous permettre de vous envoyer un mail. Le contenu du mail sera le résultat d une commande. Vous utiliserez la commande : mail VotreCompte < lacommande. Exemple : mail mlx < who. Les commandes sont celles saisies dans les choix 1, 2 ou 3 1.8. TP Création de fonction shell -A- En utilisant les structures que vous connaissez, écrire un script qui affiche la table de multiplication d un nombre donné en paramètre. Exemple mul 4, donne la table de multiplication de 4. Vous afficherez les résultats pour un multiplicateur allant de 1 à 10. L affichage de la table de multiplication sera réalisé par une fonction afftable(). -B- Modifiez le script afin que les bornes du multiplicateur soient passés en paramètres: exemple mul 3 25 35. On veut la table de multiplication de 3*25 jusqu à 3*35 -C- Modifier le programme de façon à écrire une calculatrice. L utilisateur saisi un nombre (par exemple 3). Ensuite il saisira des couples opérateur nombre (exemple + 3). Le programme réalisera les opérations jusqu à ce que l utilisateur tape l opérateur "=" et affichera le résultat final. 1.9. TP Traitement des options de la ligne de commande -A-Vous utiliserez la fonction getopts pour vérifier la saisie de l utilisateur. Réaliser un script d archivage qui utilisera les options : -a (archive) -d (désarchive) -c (compresse) -x (décompresse) Le fichier ou le répertoire à archiver sera passé en paramètre : exemple archive -a -c travail. Attention archive -a -d est invalide. -B-Modifier le script en utilisant des fonctions. Vous factoriserez au maximum ce qui est répétitif. -C- Modifiez le script afin de pouvoir passer plusieurs fichiers à compresser. Exemple archive -a -c fichier1 fichier2 fichier3 Remarque 15

Utilisation de scripts shell BASH - Exercices Pour archiver vous exploiterez la commande tar (uniquement sur les répertoires car il est inutile d archiver un fichier). Pour compresser gzip. 1.10. TP Étude des signaux Le code ci-dessous permet d intercepter le signal 2 (arrêt depuis le clavier). Tapez le et analysez son fonctionnement. ## Utilisation de trap pour intercepter les signaux ## Utiliser CTRL C trap "echo \"trap de l interruption 2\"" 2 while true do sleep 2000 echo "Je suis reveillé" Deuxième exemple de commande qui évite l arrêt d un processus. while true; do trap "echo Je suis toujours actif..." 2 ; 1.11. TP Appel inter-processus et étude de signaux -A- Ecrire un script "pere" qui aura en charge le déclenchement de deux scripts enfants. Le script enfant1 écrit sans arrêt sur la console le mot "ping" Le script enfant2 écrit sans arrêt sur la console le mot "pong" Le script père fonctionne ainsi : Tant que l on ne met pas fin au processus pere 1 - Déclenche le processus enfant1 Attend (wait 10) Tue le processus enfant1 2 - Déclenche le processus enfant2 Attend (wait 10) Tue le processus enfant2 Fin de tant que 16

Utilisation de scripts shell BASH - Exercices -B- Créez un troisème script enfant qui fera "pang". Modifier votre script "père" de façon à ce que le séquencement devienne ping pong pang pong ping... 1.12. TP de synthèse 1 - TP Etude des signaux Vous allez utiliser deux scripts "premier" et "second". Le premier doit permettre le pilotage du second. "Premier" permet : l activation d un script "second" exemple : premier start son arrêt, exemple : premier stop l affichage de son status, exemple : premier status Cela affichera si le script est actif ou non, et si oui son PID Le code du script "second" est le suivant : #!/bin/bash #On stocke le N de PID cat $$ > seconpid while true; echo $$; do read; Vous pourrez consulter avec profit les scripts de /etc/rc.d/init.d 1.13. TP de synthèse 2 - Appel de scripts Ecrire un script qui déclenche d autres scripts en fonction du choix d un utilisateur. Exemple de menu : ******************************** Menu général ****************************** <1> La table des processus (ps) <2> Le nombre de fichiers d un répertoire (ls NomduRépertoire wc -l) <3> La place occupée par les fichiers sur les disques (df) <9> Quitter 17

Utilisation de scripts shell BASH - Exercices *************************************************************************** Chaque option demande l exécution d un script. Vous afficherez le résultat de la commande plus un des messages suivants, en fonction du code retour : "Tout s est bien passé" "Il y a eu une erreur d exécution" Pour la ligne 2, vous devrez demander quel répertoire. 1.14. TP de synthèse 3 - Utilisation de commande externes Le shell permet fréquemment l utilisation de commandes externes (grep, wc, tail, awk, gawk, head...) Vous allez, à l aide des deux exemples ci-dessous écrire un script qui remplace toutes les chaines "GIF" d un fichier en "gif". La commande "tr" fonctionne sur des caracères, la commande sed sur des chaînes. Utilisez les pages de manuel pour en savoir plus. Analysez la différence des résultats Exemple 1 : Renomme tous les fichiers avec des miniscules. for i in ls ; do j= echo $i tr [A-Z] [a-z] ;echo $j; Exemple 2 : Transforme tous les caractères "_" en "-" et renomme les fichiers. for i in ls * ; do j= echo $i tr [_] [\-] ;mv $i $j; Exemple 3 : Transforme tous les caractères t ou p ou l ou i ou n en majuscule et renomme les fichiers. for i in ls * ; do j= echo $i tr tplin TPLIN ;mv $i $j; Exemple 4 : Renomme tous les fichiers dont le nom contient la chaîne "lin". for i in ls *lin* ; do j= echo $i sed s/lin/lin/ ;mv $i $j; Ecrivez un script "rp" qui accepte trois paramètres : Le nom du fichier à traiter La chaîne à traiter La chaîne de remplacement 18

Utilisation de scripts shell BASH - Exercices Exemple : rp cv bien parfait Remplace dans le fichier "cv" toutes les chaînes "bien" par la chaîne "parfait" 1.15. TP de synthèse à réaliser en binôme Vous allez écrire une application de gestion d étudiants. Vous allez avoir 3 fichiers : un fichier étudiants (nom, prénom, date de naissance) un fichier matière (matière, coefficient) un fichier note (élève matière note), ce fichier doit être trié par élève et par matière, vous utiliserez la commande sort pour cela. L application devra permettre : d ajouter, modifier, supprimer un élève d ajouter, modifier supprimer une matière de saisir des notes, d en modifier ou d en supprimer d afficher la moyenne d un élève d afficher les moyennes de tous les élèves. 19

Utilisation de scripts shell BASH - Exercices 20

Utilisation de scripts shell BASH - Corrections Alix MASCRET Séquences de TP sur la programmation en SHELL BASH sous Linux Éléments de corrigé pour les exercices. 1. BASH - Programmation en SHELL 1.1. TP 1 - Utilisation de TEST #------------------------------------------------------- #TP 1 première partie #Ecrire un script qui dit si le fichier passé #en paramètre et un fichier, un répertoire ou autre chose #------------------------------------------------------- # Si le paramètre est nul on envoie un message if [ -z $1 ] ; then # voir aussi -n echo "Vous n avez pas entré de paramètres" echo "Le mode d utilisation du script est $0 NomDuFichier" exit 0 fi if [ -f $1 ] ; then echo "$1 est un fichier" exit 0 fi # alors c est un fichier 21

Utilisation de scripts shell BASH - Corrections if [ -d $1 ] ; then echo "$1 est un répertoire" exit 0 fi #c est un répertoire echo "Il semble que $1 ne soit ni un fichier ni un répetoire ou alors n existe pas." #------------------------------------------------------- # TP 1 deuxième partie # On utilisera la commande ls qui retourne les fichiers #------------------------------------------------------- #Donner la liste des fichiers fichiers for i in ls ; do echo $i # Ne donner que les fichiers standards j=0 for i in ls ; do if [ -f $i ]; then j= expr $j + 1 fi echo "Il y a $j fichiers standards dans le répertoire" # Ne donner que les répertoires j=0 for i in ls ; do if [ -d $i ]; then j= expr $j + 1 fi echo "Il y a $j répertoires dans le répertoire" # Donner le nombre de fichiers, première solution # on utilise un indice j=0 for i in ls ; do j= expr $j + 1 22

Utilisation de scripts shell BASH - Corrections echo "Il y a $j fichiers dans le répertoire" # Donner le nombre de fichiers deuxième solution # on utilise les commandes systèmes j= ls wc -l echo "Il y a $j fichiers dans le répertoire" 1.2. TP 2 - Utilisation de CASE clear echo "------------------------------------------------------------------------ " echo "<1> Comptabilité" echo "<2> Gestion commerciale" echo "<3> Paie" echo "" echo "" echo "" echo "Taper une option du menu 1, 2 ou 3, <q> pour quitter" read saisie case $saisie in 1) 2) 3) q Q) echo "Vous avez choisi l option 1 Comptabilité" ;; echo "Vous avez choisi l option 2 Gestion Commerciale" ;; echo "Vous avez choisi l option 3 Paie" ;; echo "Vous avez choisi de quitter l application" ;; esac *) # Tous les autres cas echo "Vous avez saisi un peu n importe quoi" ;; 23

Utilisation de scripts shell BASH - Corrections 1.3. TP 3 - Utilisation de la structure for et do...until #Première partie (avec for) # Traitement de la fonction x=y # pour x allant de -10 à 10 avec un incrément de 1 # On stockera dans un fichier inc toutes les valeurs # comprises entre -10 et 10 for i in cat inc ; do x=$i y=$x echo "Pour x valant $x, y vaut $y" # Traitement de la fonction y= x puiss 2 for i in cat inc ; do x=$i y= expr $x \* $x echo "Pour x valant $x, y vaut $y" #Deuxième partie (avec répéter) # fonction x = y echo -------- utilisation de until... x=-10 until [ $x -eq 10 ]; do # on regarde si x est égal = 10 y=$x echo "Pour x valant $x, y vaut $y" x= expr $x + 1 # on incrémente # fonction y = x puiss 2 echo -------- utilisation de until... x=-10 abs=10 24

Utilisation de scripts shell BASH - Corrections y= expr $x \* $x # On calcule la première occurence until [ $x -gt 10 ]; do # on regarde si x est égal = 10 echo "Pour x valant $x, y vaut $y" x= expr $x + 1 #on incrémente y= expr $x \* $x #on recalcule y #La suite du TP n est plus que la reprise de cette dernière partie # on traite $1 $2 $3 $4... borne moins, borne plus, par # Exemple: monscript -100 100 4 (pas de 4) x=$1 y= expr $x \* $x # On calcule la première occurence until [ $x -gt $2 ]; do # on regarde si x est égal = 10 echo "Pour x valant $x, y vaut $y" x= expr $x + $3 #on incrémente selon le pas souhaité y= expr $x \* $x #on recalcule y 1.4. TP 4 - utilisation de la structure si #---------------------------------------------------------- # Alix MASCRET éléments de corrigé # Programmation shell # Utilisation de la structure si # utiliser -a pour "et", -o pour "ou",! pour non # Donner les éléments sur la commande set -- pour éclater # les mots d une ligne # Donner les éléments pour réaliser la lecture d un fichier #--------------------------------------------------------- clear echo "------------------------------------------------------------------------ " echo "<1> Comptabilité" echo "<2> Gestion commerciale" echo "<3> Paie" 25

Utilisation de scripts shell BASH - Corrections echo "" echo "" echo "" echo "Taper un chiffre une option du menu, <q> pour quitter" read saisie if [ $saisie == 1 ]; then echo "Vous avez choisi l option 1 Comptabilité" elif [ $saisie == 2 ] ; then echo "Vous avez choisi l option 2 Gestion Commerciale" elif [ $saisie == 3 ] ; then echo "Vous avez choisi l option 3 Paie" elif [ $saisie == q -o $saisie == Q ] ; then echo "Vous avez choisi de quitter l application" else echo "Vous avez tapé n importe quoi!!!" echo $ \a # on beep fi #Deuxième partie traitement d un fichier cat donnees while true; do # on dump le fichier read ligne if [ "$ligne" == "" ] ;then exit 0 #On a atteint la fin de fichier #Attention il ne faut pas de lignes vides #dans le fichier fi set -- $ligne #On split les valeurs de la ligne lue #dans des variables $1, $2... #voir man bash pour la commande set #il ne reste plus qu à afficher if [ $2 -ge 10 ]; then #si supérieur ou egal on affiche echo -e "$1 \t $2" #-e pour avoir le caractère de tabulation fi 26

Utilisation de scripts shell BASH - Corrections 1.5. TP 5 - Utilisation de la structure répéter jusqu à clear saisie=xxx set -- $saisie until [ $1 == q -o $1 == Q ]; do echo "Entrez une commande" read -r saisie #récupérer toute la ligne avec les paramètres # $saisie #Première solution : Exécution de la commande eval $saisie #Deuxième solution (préférable) # exec $saisie #Troisième solution mais quitte le shell # echo $saisie #Pour debogguer set -- $saisie #on split la ligne de commande #pour éviter les msg d erreurs sur le test 1.6. TP 6 - Utilisation la structure tantque... reponse=xxx while [ $reponse!= q -a $reponse!= Q ]; do clear echo "-------- Menu général ---------" echo -e "\n" echo "<1> Comptabilité" echo "<2> Gestion commerciale" echo "<3> Paie" echo -e "\n" echo "-------------------------------" echo -n "Choisissez une option, <q> pour terminer " read reponse case $reponse in 1) echo "Vous avez choisi la Compta" ;; 2) echo "Vous avez choisi la Gestion commerciale" ;; 3) echo "Vous avez choisi la Paie";; q Q) echo "Vous allez quitter l application";; *) echo "Vous avez tapé n importe quoi!";; esac echo -n "Tapez [ENTER] pour continuer" read 27

Utilisation de scripts shell BASH - Corrections 1.7. TP 7 - Utilisation de la fonction select... select choix in \ "Affiche la listes des utilisateurs connectés" \ "Affiche la liste des processus"\ "Affiche les informations vous concernant"\ "QUITTER" do case $REPLY in 1) who ;; 2) ps ax ;; 3) echo -e "Bonjour $USER, voici les informations \n id ";; 4) echo "Vous allez quitter l application" exit 0 ;; *) echo "Vous avez tapé n importe quoi!";; esac 1.8. TP 8 - Utilisation de fonctions #Utilisation de fonctions #Première partie : traitement d une table de multiplication afftable0 () { i=1 while [ $i -le 10 ] ; do echo -e "$1 * $i \t = expr $1 \* $i " 28

Utilisation de scripts shell BASH - Corrections } i= expr $i + 1 #Ici le premier programme principal afftable0 $1 # On passe le paramètre à la fonction #Deuxième partie on modifie la fonction afftable1 () { i=$2 while [ $i -le $3 ] ; do echo -e "$1 * $i \t = expr $1 \* $i " i= expr $i + 1 } #Ici le deuxième programme principal afftable1 $1 $2 $3 #Troisième partie la calculatrice #Troisième partie on modifie la fontion calcule () { echo "---------------> $1 --- $2 --- $3" case $2 in "\+") nombre1= expr $nombre1 + $nombre2 ;; "\-") nombre1= expr $nombre1 - $nombre2 ;; "\/") nombre1= expr $nombre1 / $nombre2 ;; #Attention à la division par 0 "\*") nombre1= expr $nombre1 \* $nombre2 ;; *) echo "Erreur de saisie" exit 0;; esac } #Ici le programme principal clear echo "C est parti...saisissez un nombre" read nombre1 #On lit le premier nombre 29

Utilisation de scripts shell BASH - Corrections echo -n "Entrez vos opérations (exemple + 3) " masque=\\ #Utilisé pour déspécialiser les caractères read op nombre2 while [ $op!= = ] ; do #On lit l opérateur et le second nombre #Il y a un pb avec le caractère * #qu à cela ne tienne on le masque #en les déspécialisant calcule $nombre1 $masque$op $nombre2 #l Opérateur est masqué #Cela aurait également posé un pb pour le case # * correspond à tous les cas non traités (par défau echo $nombre1 # On affiche le résultat read op nombre2 echo "= $nombre1" echo "Terminé..." 1.9. TP 9 - Utilisation de getopts et optind #Utilisation de getopts et optind #On ne traite pas les incompatibilités ou erreurs # de saisie, ce n est pas l opjet du TP if [ -z $1 ]; then echo "tar/compress $0 -t -c fichier " echo "untar/décompresse $0 -u -d fichier " exit 0 fi #On regarde si le fichier existe, il est en deuxième position #s il n y a qu une option de passée, sinon il est en troisième #position sur la ligne de commande. if [ $# -eq 2 ]; then if [! -f $2 ]; then echo "Le fichier $2 ne semble pas exister" fi elif [ $# -eq 3 ] ; then if [! -f $3 ]; then echo "Le fichier $2 ne semble pas exister" fi 30

Utilisation de scripts shell BASH - Corrections else fi #il y a un problème sur la ligne de commande clear echo "Vous avez commis une erreur sur la ligne de saisie" exit 0 #On récupère le nombre d options passées for i in $@ ; do getopts tc option # On récupère la première option t ou c if [ $option == t ] ; # Ici c est pour archiverr then for i in $@ ; do getopts c option # On regarde s il faut décompresser if [ $option == c ] ; then #il faut également compresser else echo "ici compléter" fi elif [ $option == u ] ; then for i in $@ ; do getopts d option # On regarde s il faut décompresser if [ $option == d ] ; then echo "ici compléter" else echo "ici compléter" fi fi 1.10. TP 10 - Appel et gestion inter processus ################################################# # Ici commence le programme principal ################################################# 31

Utilisation de scripts shell BASH - Corrections # On crée une fonction qui récupère le PID # du script enfant _pid() { echo -n "On kill le processus N cat $1 " echo "avec la commande \"kill -9 cat $1 \"" # On tue le processus kill -9 cat $1 } #On se fait une petite fonction pour le wait #Pour l appeler wait x ou wait est un entier _wait() { i=0 while [ $i -lt $1 ]; do i= expr $i + 1 } while true; do echo "On lance ping"./ping & _wait 100 _pid enf1 #On passe en paramètre le nom du fichier #dans lequel est stocké le PID #On aurait pu utiliser la table des processus #On lance pong et on recommance echo "On lance pong"./pong & _wait 100 _pid enf2 #Appel et gestion inter processus #On va utiliser le n de processus retourné par $$ #Ce n de processus sera stocké dans un fichier #enf1 pour le script enfant 1 #enf2 pour le script enfant 2 ### Code du processus ping 32

Utilisation de scripts shell BASH - Corrections #!/bin/bash #script enfant 1 pour le TP sur les inter processus #Lancer en utilisant./ping sinon gare avec la commande réseau ping echo $$ > enf1 echo $$ echo "On est dans ping" sleep 500 #on garde le pid #Pour garder en mémoire le processus # pour le lancer en tâche de fond./ping & ### Code du processus pong #!/bin/bash #script enfant 2 pour le TP sur les inter processus #Lancer en utilisant./pong echo $$ > enf2 #on garde le pid echo $$ echo "On est dans pong" sleep 500 #Pour garder le processus en mémoire # pour le lancer en tâche de fond taper./pong & La deuxième partie ne pose aucune difficulté supplémentaire. 33

Utilisation de scripts shell BASH - Corrections 34