le shell bash sous linux

34
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

Upload: samoudali20078023

Post on 26-Jun-2015

905 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Le Shell Bash Sous Linux

Table des matièresProgrammation en SHELL BASH sous Linux .......................................................................................3

1. Présentation ....................................................................................................................................32. Avant de commencer......................................................................................................................3

2.1. L’interpréteur .....................................................................................................................42.2. Le quoting..........................................................................................................................42.3. Les structures de contrôles ................................................................................................4

2.3.1. for..........................................................................................................................52.3.2. Fonctions...............................................................................................................52.3.3. If, Then Elif, Fi .....................................................................................................62.3.4. Let .........................................................................................................................62.3.5. Read ......................................................................................................................62.3.6. Select.....................................................................................................................72.3.7. test .........................................................................................................................72.3.8. Répéter jusqu’à .....................................................................................................82.3.9. Tant Que................................................................................................................8

2.4. Autres commandes ............................................................................................................82.5. ...........................................................................................................................................9

Utilisation de scripts shell BASH - Exercices ........................................................................................11

1. BASH - Programmation en SHELL.............................................................................................111.1. TP utilisation de la fonction TEST..................................................................................111.2. TP Utilisation de la fonction selon que (case).................................................................111.3. TP Utilisation de la fonction pour (for) ...........................................................................121.4. TP Etude de la fonction si (if) .........................................................................................121.5. TP Étude de la fonction répéter jusqu’à (until...do...done) .............................................131.6. TP Etude de la fonction tant que (while).........................................................................141.7. TP Etude de la fonction select .........................................................................................141.8. TP Création de fonction shell ..........................................................................................151.9. TP Traitement des options de la ligne de commande......................................................151.10. TP Étude des signaux ....................................................................................................161.11. TP Appel inter-processus et étude de signaux...............................................................161.12. TP de synthèse 1 - TP Etude des signaux......................................................................171.13. TP de synthèse 2 - Appel de scripts...............................................................................171.14. TP de synthèse 3 - Utilisation de commande externes ..................................................181.15. TP de synthèse à réaliser en binôme..............................................................................19

Utilisation de scripts shell BASH - Corrections ....................................................................................21

1. BASH - Programmation en SHELL.............................................................................................211.1. TP 1 - Utilisation de TEST..............................................................................................21

1

Page 2: Le Shell Bash Sous Linux

1.2. TP 2 - Utilisation de CASE .............................................................................................231.3. TP 3 - Utilisation de la structure for et do...until.............................................................241.4. TP 4 - utilisation de la structure si...................................................................................251.5. TP 5 - Utilisation de la structure répéter jusqu’à.............................................................261.6. TP 6 - Utilisation la structure tantque..............................................................................271.7. TP 7 - Utilisation de la fonction select ... ........................................................................281.8. TP 8 - Utilisation de fonctions.........................................................................................281.9. TP 9 - Utilisation de getopts et optind.............................................................................301.10. TP 10 - Appel et gestion inter processus .......................................................................31

2

Page 3: Le Shell Bash Sous Linux

Programmation en SHELL BASHsous LinuxAlix MASCRET

1. PrésentationLes documents suivants donnent quelques éléments de référence sur le développement de scripts enBASH. Prévoir de donner les éléments de cours nécessaires pour la réalisation des exercices.

2. Avant de commencerVous 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 commandessuivantes :

• 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 fichiersgroup 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 (<, >, >>), lefonctionnement des pipes.

3

Page 4: Le Shell Bash Sous Linux

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éteurDé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 quotingTout 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/bashnom="Pierrot"echo "Salut Pierrot"echo "Salut \"Pierrot\""echo "Salut $nom"echo "Salut \$nom"

4

Page 5: Le Shell Bash Sous Linux

Programmation en SHELL BASH sous Linux

2.3. Les structures de contrôles

case chaîne

inregex)commandes...;;...

esac

Exemple :

echo -n "Entrez un nombre :"read nombrecase $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

commandesdone

Exemple :

for $i in * dopr $i > $i.tmp

done

for $i in ‘cat liste‘ dols $i

done

for i in 1 2 3 doecho $i

done

5

Page 6: Le Shell Bash Sous Linux

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 expressionthen

intruction1...instructionN

elifthen....

else...

fi

Exemple :

if [ -f $1 ]thenecho "C’est un fichier"

elseecho "Je ne sais pas ce que c’est."

fi

2.3.4. Let

Initialisation (ajouter 1 à i)let i=i+1let "i = i + 1"

6

Page 7: Le Shell Bash Sous Linux

Programmation en SHELL BASH sous Linux

2.3.5. Read

Lecture d’une valeur au clavierecho -n "Entrez votre nom :"read nomecho $nom

2.3.6. Select

select nom [ in liste ; ]docommandes

done

Le numéro du choix est affecté à $REPLY, le nom du choix à $nom

select choix in \"Choix A" \"Choix B";

docase $REPLY in

1) echo "$choix --> $REPLY";;2) echo "$choix --> $REPLY";;*) echo "Vous avez tapé n’importe quoi !";;esac

done

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

Page 8: Le Shell Bash Sous Linux

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’à

untilCommande_Test

doCommandes

done

2.3.9. Tant Que

whileCommande_Test

doCommande

done

8

Page 9: Le Shell Bash Sous Linux

Programmation en SHELL BASH sous Linux

2.4. Autres commandesecho -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

Page 10: Le Shell Bash Sous Linux

Programmation en SHELL BASH sous Linux

10

Page 11: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH -ExercicesAlix 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 TESTEcrivez 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

Page 12: Le Shell Bash Sous Linux

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 lesvaleurs 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

Page 13: Le Shell Bash Sous Linux

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...done)-A- En utilisant la structure until...do...done, é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

Page 14: Le Shell Bash Sous Linux

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 doitboucler 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

Page 15: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Exercices

-B- Modifier le script afin de rajouter un Option. Cette option doit vous permettre de vous envoyer unmail. 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 multiplicationd’un nombre donné en paramètre. Exemple mul 4, donne la table de multiplication de 4. Vous afficherezles 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 325 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 exemple3). Ensuite il saisira des couples opérateur nombre (exemple + 3). Le programme réalisera les opérationsjusqu’à 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’archivagequi 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. Attentionarchive -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 -cfichier1 fichier2 fichier3

Remarque

15

Page 16: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Exercices

Pour archiver vous exploiterez la commande tar (uniquement sur les répertoires car il est inutiled’archiver un fichier). Pour compresser gzip.

1.10. TP Étude des signauxLe code ci-dessous permet d’intercepter le signal 2 (arrêt depuis le clavier). Tapez le et analysez sonfonctionnement.

## Utilisation de trap pour intercepter les signaux## Utiliser CTRL Ctrap "echo \"trap de l’interruption 2\"" 2

while truedo

sleep 2000echo "Je suis reveillé"

done

Deuxième exemple de commande qui évite l’arrêt d’un processus.

while true; do trap "echo Je suis toujours actif ..." 2 ; done

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 pere1 - Déclenche le processus enfant1

Attend (wait 10)Tue le processus enfant1

2 - Déclenche le processus enfant2Attend (wait 10)Tue le processus enfant2

Fin de tant que

16

Page 17: Le Shell Bash Sous Linux

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 leséquencement devienne ping pong pang pong ping....

1.12. TP de synthèse 1 - TP Etude des signauxVous 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 PIDcat $$ > seconPIDwhile true; echo $$; do read; done

Vous pourrez consulter avec profit les scripts de /etc/rc.d/init.d

1.13. TP de synthèse 2 - Appel de scriptsEcrire 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

Page 18: Le Shell Bash Sous Linux

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 desmessages 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 externesLe 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 demanuel 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; done

Exemple 2 : Transforme tous les caractères "_" en "-" et renomme les fichiers.

for i in ‘ls *‘; do j=‘echo $i |tr ’[_]’ ’[\-]’‘ ;mv $i $j; 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 *‘; do j=‘echo $i |tr ’tplin’ ’TPLIN’‘ ;mv $i $j; done

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; 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

Page 19: Le Shell Bash Sous Linux

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ômeVous 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 lacommande 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

Page 20: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Exercices

20

Page 21: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH -CorrectionsAlix 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 messageif [ -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 # alors c’est un fichierecho "$1 est un fichier"exit 0

fi

21

Page 22: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Corrections

if [ -d $1 ] ; then #c’est un répertoireecho "$1 est un répertoire"exit 0

fi

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 fichiersfor i in ‘ls‘ ; do

echo $idone

# Ne donner que les fichiers standardsj=0for i in ‘ls‘ ; do

if [ -f $i ]; thenj=‘expr $j + 1 ‘

fidoneecho "Il y a $j fichiers standards dans le répertoire"

# Ne donner que les répertoiresj=0for i in ‘ls‘ ; do

if [ -d $i ]; thenj=‘expr $j + 1 ‘

fidone

echo "Il y a $j répertoires dans le répertoire"

# Donner le nombre de fichiers, première solution# on utilise un indicej=0for i in ‘ls‘ ; do

j=‘expr $j + 1‘

22

Page 23: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Corrections

doneecho "Il y a $j fichiers dans le répertoire"

# Donner le nombre de fichiers deuxième solution# on utilise les commandes systèmesj=‘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 $saisiein1)

echo "Vous avez choisi l’option 1 Comptabilité" ;;2)

echo "Vous avez choisi l’option 2 Gestion Commerciale" ;;3)

echo "Vous avez choisi l’option 3 Paie" ;;

q|Q)echo "Vous avez choisi de quitter l’application" ;;

*) # Tous les autres casecho "Vous avez saisi un peu n’importe quoi" ;;

esac

23

Page 24: Le Shell Bash Sous Linux

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‘; dox=$iy=$xecho "Pour x valant $x, y vaut $y"

done

# Traitement de la fonction y= x puiss 2

for i in ‘cat inc‘; dox=$iy=‘expr $x \* $x‘echo "Pour x valant $x, y vaut $y"

done

#Deuxième partie (avec répéter)# fonction x = yecho -------- utilisation de until...x=-10

until [ $x -eq 10 ]; do # on regarde si x est égal = 10y=$xecho "Pour x valant $x, y vaut $y"x=‘expr $x + 1‘ # on incrémente

done

# fonction y = x puiss 2echo -------- utilisation de until...x=-10abs=10

24

Page 25: Le Shell Bash Sous Linux

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 = 10echo "Pour x valant $x, y vaut $y"x=‘expr $x + 1‘ #on incrémentey=‘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... borne moins, borne plus, par# Exemple: monSCRIPT -100 100 4 (pas de 4)

x=$1y=‘expr $x \* $x‘ # On calcule la première occurence

until [ $x -gt $2 ]; do # on regarde si x est égal = 10echo "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.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#---------------------------------------------------------clearecho "------------------------------------------------------------------------"echo "<1> Comptabilité"echo "<2> Gestion commerciale"echo "<3> Paie"

25

Page 26: Le Shell Bash Sous Linux

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 ]; thenecho "Vous avez choisi l’option 1 Comptabilité"

elif [ $saisie == 2 ] ; thenecho "Vous avez choisi l’option 2 Gestion Commerciale"

elif [ $saisie == 3 ] ; thenecho "Vous avez choisi l’option 3 Paie"

elif [ $saisie == q -o $saisie == Q ] ; thenecho "Vous avez choisi de quitter l’application"

elseecho "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 fichierread ligne

if [ "$ligne" == "" ] ;thenexit 0 #On a atteint la fin de fichier

#Attention il ne faut pas de lignes vides#dans le fichier

fiset -- $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 afficheecho -e "$1 \t $2" #-e pour avoir le caractère de tabulation

fidone

26

Page 27: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Corrections

1.5. TP 5 - Utilisation de la structure répéter jusqu’à

clearsaisie=xxxset -- $saisieuntil [ $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 commandeeval $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.6. TP 6 - Utilisation la structure tantque...

reponse=xxxwhile [ $reponse != q -a $reponse != Q ]; do

clearecho "-------- 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 in1) 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 !";;esacecho -n "Tapez [ENTER] pour continuer"read

27

Page 28: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Corrections

done

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 in1) 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

done

1.8. TP 8 - Utilisation de fonctions

#Utilisation de fonctions

#Première partie : traitement d’une table de multiplication

affTABLE0 () {i=1while [ $i -le 10 ] ; do

echo -e "$1 * $i \t = ‘expr $1 \* $i‘"

28

Page 29: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - 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 fonctionaffTABLE1 () {i=$2while [ $i -le $3 ] ; do

echo -e "$1 * $i \t = ‘expr $1 \* $i‘"i=‘expr $i + 1‘

done}

#Ici le deuxième programme principalaffTABLE1 $1 $2 $3

#Troisième partie la calculatrice#Troisième partie on modifie la fontioncalcule () {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 principalclearecho "C’est parti ............saisissez un nombre"read nombre1 #On lit le premier nombre

29

Page 30: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Corrections

echo -n "Entrez vos opérations (exemple + 3) "masque=\\ #Utilisé pour déspécialiser les caractèresread op nombre2while [ $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éfaut)

echo $nombre1 # On affiche le résultatread op nombre2

doneecho "= $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 ]; thenecho "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 ]; thenecho "Le fichier $2 ne semble pas exister"

fielif [ $# -eq 3 ] ; then

if [ ! -f $3 ]; thenecho "Le fichier $2 ne semble pas exister"

fi

30

Page 31: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Corrections

else #il y a un problème sur la ligne de commandeclearecho "Vous avez commis une erreur sur la ligne de saisie"exit 0

fi

#On récupère le nombre d’options passéesfor i in $@ ; do

getopts tc option # On récupère la première option t ou c

if [ $option == ’t’ ] ; # Ici c’est pour archiverrthen

for i in $@ ; dogetopts c option # On regarde s’il faut décompresserdoneif [ $option == ’c’ ] ; then #il faut également compresserelseecho "ici compléter"

fi

elif [ $option == ’u’ ] ; thenfor i in $@ ; dogetopts d option # On regarde s’il faut décompresserdoneif [ $option == ’d’ ] ; thenecho "ici compléter"

elseecho "ici compléter"

fifi

done

1.10. TP 10 - Appel et gestion inter processus

################################################## Ici commence le programme principal#################################################

31

Page 32: Le Shell Bash Sous Linux

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 processuskill -9 ‘cat $1‘

}

#On se fait une petite fonction pour le wait#Pour l’appeler wait x ou wait est un entier_wait() {i=0while [ $i -lt $1 ]; do

i=‘expr $i + 1‘done}

while true; doecho "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 recommanceecho "On lance pong"./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

Page 33: Le Shell Bash Sous Linux

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 #on garde le pidecho $$echo "On est dans ping"sleep 500 #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 ./pongecho $$ > enf2 #on garde le pidecho $$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

Page 34: Le Shell Bash Sous Linux

Utilisation de scripts shell BASH - Corrections

34