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...done) .............................................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

bash_history. Le quoting Tout ce qui est placé entre "" est lu littéralement sauf ‘ (accent grave) . 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 .1.bash_logout • La commande "man" 2.2.bash_*".. les principales variables environnement et les principaux fichiers "~/. L’interpréteur Déclarez en entête du script le nom et l’emplacement de l’interpréteur. . sauf un autre accent aigu.bashrc. #!/bin/bash Rendez ensuite votre script exécutable avec la commande : chmod u+x NomDeVotreScript 2. exporter cette variable. Déclarer une variable environnement. connaître les fichiers . .Programmation en SHELL BASH sous Linux • set. ps.bash_profile. $ et " Tout ce qui est placé entre ’ (accent aigu) est lu littéralement. hostname.

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".Programmation en SHELL BASH sous Linux 2. esac 2.tmp done for $i in ‘cat liste‘ do ls $i done for i in 1 2 3 do echo $i done 5 .. Les structures de contrôles case chaîne in regex) commandes . for for x [ in list ] do commandes done Exemple : for $i in * do pr $i > $i.3.1. ... .3..

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

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

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

. Exemple : echo -e ’foo \a ’ 2.. 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). paramètres sont passés dans $1. $$.4. Quand on lance un script : Les $@. $0.Programmation en SHELL BASH sous Linux 2.5. $#. $2.$n donne la liste des paramètres donne le nombre de paramètres donne le numéro (PID) du script 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 .

1. BASH .1.Utilisation de scripts shell BASH Exercices Alix MASCRET Séquence de TP sur la programmation en SHELL BASH sous Linux. 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 .Programmation en SHELL 1.

+x soient passées en paramètres au script. y = x puiss2 Réécrivez les programmes avec la strucure répéter .4. écrire un script qui : affiche un menu • 12 .2. Modifiez le script de façon à ce que l’on puisse passer en paramètres l’incrément. TP Etude de la fonction si (if) -A.3.En utilisant la strucure if. é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. 1.. TP Utilisation de la fonction pour (for) En utilisant la structure for..Utilisation de scripts shell BASH .Exercices 1. é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. TP Utilisation de la fonction selon que (case) En utilisant la strucure case. • • • • Réalisez le traitement pour les fonctions y=x. jusqu’à Adapter le script afin que les bornes -x.

1.Utilisation de scripts shell BASH ....En utilisant la structure until..do..5.done.. TP Étude de la fonction répéter jusqu’à (until.do.done) -A..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.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. répète cette opération tant que l’utilisateur le désire.. é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. • • • Exemple de ce qui doit s’afficher à l’écran : ******************************************************* 13 .

son GID. TP Etude de la fonction tant que (while) En utilisant la structure while.Utilisation de scripts shell BASH . Le script doit boucler tant que l’utilisateur n’a pas choisi de quitter.Exercices Saisisez une commande. é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. son UID. son TTY1 Option 4 : Terminer 14 .7. TP Etude de la fonction select -A. ******************************************************* 1.6. commande <Q> pour quitter. • • • • Option 1 : Afficher la liste des utilisateur connectés Option 2 : Afficher la liste des processus Option 3 : Afficher à l’utilisateur son nom.Vous allez à l’aide de la fonction select réaliser un menu à 4 options pour un utilisateur.

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

TP Étude des signaux Le code ci-dessous permet d’intercepter le signal 2 (arrêt depuis le clavier). while true.Utilisation de scripts shell BASH .Déclenche le processus enfant1 Attend (wait 10) Tue le processus enfant1 2 . Pour compresser gzip. TP Appel inter-processus et étude de signaux -A. Tapez le et analysez son fonctionnement..10.11.Ecrire un script "pere" qui aura en charge le déclenchement de deux scripts enfants. ## 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é" done Deuxième exemple de commande qui évite l’arrêt d’un processus.Déclenche le processus enfant2 Attend (wait 10) Tue le processus enfant2 Fin de tant que 16 . do trap "echo Je suis toujours actif .Exercices Pour archiver vous exploiterez la commande tar (uniquement sur les répertoires car il est inutile d’archiver un fichier). 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 ." 2 . 1. done 1..

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

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

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

Utilisation de scripts shell BASH .Exercices 20 .

Programmation en SHELL 1. un répertoire ou autre chose #------------------------------------------------------# Si le paramètre est nul on envoie un message if [ -z $1 ] .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. BASH . then echo "$1 est un fichier" exit 0 fi # alors c’est un fichier 21 . 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 ] .Utilisation de TEST #------------------------------------------------------#TP 1 première partie #Ecrire un script qui dit si le fichier passé #en paramètre et un fichier.1. 1. TP 1 .

then j=‘expr $j + 1 ‘ fi done echo "Il y a $j répertoires dans le répertoire" # Donner le nombre de fichiers. do echo $i done # Ne donner que les fichiers standards j=0 for i in ‘ls‘ . then j=‘expr $j + 1 ‘ fi done echo "Il y a $j fichiers standards dans le répertoire" # Ne donner que les répertoires j=0 for i in ‘ls‘ . première solution # on utilise un indice j=0 for i in ‘ls‘ . do if [ -d $i ]. do if [ -f $i ].Utilisation de scripts shell BASH .Corrections if [ -d $1 ] . do j=‘expr $j + 1‘ 22 . 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‘ .

Corrections done 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. TP 2 . 23 ..Utilisation de scripts shell BASH .. <q> pour quitter" read saisie case $saisie in 1) echo "Vous avez choisi l’option 1 Comptabilité" . 3) echo "Vous avez choisi l’option 3 Paie" . 2 ou 3. *) esac # Tous les autres cas echo "Vous avez saisi un peu n’importe quoi" .Utilisation de CASE clear echo " echo echo echo echo echo echo echo "-----------------------------------------------------------------------"<1> Comptabilité" "<2> Gestion commerciale" "<3> Paie" "" "" "" "Taper une option du menu 1. 2) echo "Vous avez choisi l’option 2 Gestion Commerciale" ...2. q|Q) echo "Vous avez choisi de quitter l’application" ..

utilisation de until.utilisation de until.3. do x=$i y=$x echo "Pour x valant $x.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‘. y vaut $y" done #Deuxième partie (avec répéter) # fonction x = y echo -------.. do # on regarde si x est égal = 10 y=$x echo "Pour x valant $x..Corrections 1. x=-10 abs=10 24 ..Utilisation de scripts shell BASH .Utilisation de la structure for et do. x=-10 until [ $x -eq 10 ].. do x=$i y=‘expr $x \* $x‘ echo "Pour x valant $x. y vaut $y" done # Traitement de la fonction y= x puiss 2 for i in ‘cat inc‘.. y vaut $y" x=‘expr $x + 1‘ # on incrémente done # fonction y = x puiss 2 echo -------.. TP 3 .

. 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 done 1.utilisation de la structure si #---------------------------------------------------------# Alix MASCRET éléments de corrigé # Programmation shell # Utilisation de la structure si # utiliser -a pour "et".4. borne moins.. -o pour "ou".Utilisation de scripts shell BASH . ! pour non # Donner les éléments sur la commande set -. TP 4 .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 .Corrections y=‘expr $x \* $x‘ # On calcule la première occurence until [ $x -gt 10 ]. 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 ]. borne plus. 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 done #La suite du TP n’est plus que la reprise de cette dernière partie # on traite $1 $2 $3 $4.

. then echo "Vous avez choisi l’option 2 Gestion Commerciale" elif [ $saisie == 3 ] . then #si supérieur ou egal on affiche echo -e "$1 \t $2" #-e pour avoir le caractère de tabulation fi done 26 .. then echo "Vous avez choisi l’option 1 Comptabilité" elif [ $saisie == 2 ] . then echo "Vous avez choisi l’option 3 Paie" elif [ $saisie == q -o $saisie == Q ] . $2. #voir man bash pour la commande set #il ne reste plus qu’à afficher if [ $2 -ge 10 ].Utilisation de scripts shell BASH . <q> pour quitter" read saisie if [ $saisie == 1 ].$ligne #On split les valeurs de la ligne lue #dans des variables $1. do # on dump le fichier read ligne if [ "$ligne" == "" ] .Corrections echo echo echo echo "" "" "" "Taper un chiffre une option du menu.then exit 0 #On a atteint la fin de fichier #Attention il ne faut pas de lignes vides #dans le fichier fi set -. 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.

Corrections 1.Utilisation la structure tantque.5. 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 done 1.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...6.Utilisation de la structure répéter jusqu’à clear saisie=xxx set -. <q> pour terminer " read reponse case $reponse in 1) echo "Vous avez choisi la Compta" . reponse=xxx while [ $reponse != q -a $reponse != Q ]. esac echo -n "Tapez [ENTER] pour continuer" read 27 .$saisie until [ $1 == q -o $1 == Q ]..Utilisation de scripts shell BASH . *) echo "Vous avez tapé n’importe quoi !". TP 5 . do clear echo "-------.. 3) echo "Vous avez choisi la Paie". 2) echo "Vous avez choisi la Gestion commerciale" .. q|Q) echo "Vous allez quitter l’application"... TP 6 .

4) echo "Vous allez quitter l’application" exit 0 .Utilisation de la fonction select .Corrections done 1. TP 7 ..Utilisation de fonctions #Utilisation de fonctions #Première partie : traitement d’une table de multiplication affTABLE0 () { i=1 while [ $i -le 10 ] .. esac done 1.. voici les informations \n ‘id‘". 3) echo -e "Bonjour $USER ... *) echo "Vous avez tapé n’importe quoi !".. 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 .8.. do echo -e "$1 * $i \t = ‘expr $1 \* $i‘" 28 . 2) ps ax . TP 8 .Utilisation de scripts shell BASH .7.

esac } #Ici le programme principal clear echo "C’est parti .... "\/") nombre1=‘expr $nombre1 / $nombre2‘. "\-") nombre1=‘expr $nombre1 .......$nombre2‘. *) echo "Erreur de saisie" exit 0.Corrections i=‘expr $i + 1‘ done } #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 ] .Utilisation de scripts shell BASH ...$3" case $2 in "\+") nombre1=‘expr $nombre1 + $nombre2‘. #Attention à la division par 0 "\*") nombre1=‘expr $nombre1 \* $nombre2‘..saisissez un nombre" read nombre1 #On lit le premier nombre 29 . do echo -e "$1 * $i \t = ‘expr $1 \* $i‘" i=‘expr $i + 1‘ done } #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 --..

then if [ ! -f $2 ].9.... 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 done echo "= $nombre1" echo "Terminé .Utilisation de getopts et optind #Utilisation de getopts et optind #On ne traite pas les incompatibilités ou erreurs # de saisie.... il est en deuxième position #s’il n’y a qu’une option de passée.. then echo "Le fichier $2 ne semble pas exister" fi 30 . TP 9 .Corrections echo -n "Entrez vos opérations (exemple + 3) " masque=\\ #Utilisé pour déspécialiser les caractères read op nombre2 while [ $op != ’=’ ] ." 1. ce n’est pas l’opjet du TP if [ -z $1 ]. then echo "Le fichier $2 ne semble pas exister" fi elif [ $# -eq 3 ] . then if [ ! -f $3 ]. 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. sinon il est en troisième #position sur la ligne de commande.. if [ $# -eq 2 ]...Utilisation de scripts shell BASH ..

then echo "ici compléter" else echo "ici compléter" fi fi done 1. # Ici c’est pour archiverr then for i in $@ .Corrections else #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 fi #On récupère le nombre d’options passées for i in $@ .Utilisation de scripts shell BASH . do getopts c option # On regarde s’il faut décompresser done if [ $option == ’c’ ] . then #il faut également compresser else echo "ici compléter" fi elif [ $option == ’u’ ] .10. do getopts d option # On regarde s’il faut décompresser done if [ $option == ’d’ ] .Appel et gestion inter processus ################################################# # Ici commence le programme principal ################################################# 31 . then for i in $@ . do getopts tc option # On récupère la première option t ou c if [ $option == ’t’ ] . TP 10 .

/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" . do echo "On lance ping" ./pong & _wait 100 _pid enf2 done #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 . do i=‘expr $i + 1‘ done } while true.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 ].

/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 . 33 .Utilisation de scripts shell BASH ./pong & La deuxième partie ne pose aucune difficulté supplémentaire./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 .Corrections #!/bin/bash #script enfant 1 pour le TP sur les inter processus #Lancer en utilisant ./ping & ### Code du processus pong #!/bin/bash #script enfant 2 pour le TP sur les inter processus #Lancer en utilisant .

Utilisation de scripts shell BASH .Corrections 34 .

Sign up to vote on this title
UsefulNot useful