Travaux Pratiques Linux

Programming, Linux, Shell Scripting · lab

Browse all systèmes d'exploitation et cloud documents

Travaux Pratiques Linux

Le Shell: programmation et ecriture de scripts

08/05/2020

1. Introduction

Les scripts Shell vous permettent de :

Simplifier une proc dure complexe

Manipuler des scripts Init

D ploiement logiciel : installateur de binaire, avec compilation, avec d p ts de paquetages

Supervision de parc, Exploitation de journaux, T ches de maintenances p riodiques

Configuration, gestion, maintenance, surveillance denvironnements virtualis s

Gestion sp cifique la production :

Bases de donn es

Services Web

Services dinfra

Services de traitement (batch)

&

2. Cr ation dun script Shell :

Cr er un script shell revient utiliser un diteur de fichier tels que vi/vim, nano ou bien dautre

diteurs qui d pendent de votre distribution. L diteur le plus utilis par les administrateurs

syst me est vim. Ci-dessous, vous trouverez certaines commandes utiles de lutilisation de vim :

Trois modes : commandes, dition, derni re ligne

Num rotation des lignes : :set nu

D but du fichier : gg

Fin du fichier : G

Ligne 25 : 25G ou :25

Quitter sans sauver : :q!

Sauver : :w

Quitter et Sauver: :x ou Shift ZZ

T1 : Cr ez un fichier avec vim nomm script1test.sh et tapez le code suivant de votre premier

script :

#!/bin/bash

#les commentaires commence par '#'

#exemple des manipulations de la commande : test

#1- D claration d'une variable

MESSAGE="Bonjour 1ALINIFO"

#2- Affichage de la valeur

echo $MESSAGE

3. Invocation de linterpr teur

T2 : Invoquez ce script monscript.sh avec bash :

T3 : Renommez le fichier script1test.sh en script1test et invoquez avec bash :

Vous remarquez que lextension qui d nomme le script na aucune port e pour le shell.

NOTE

Le Shebang (# !/bin/bash) indique au syst me quel interpr teur doit utiliser pour lancer les

commandes. Si linterpr teur de commandes nest pas d clar , le shell courant prend en charge les

commandes du script.

4. Ex cution directe du script :

T4 : attribuez le droit dex cution au script et ex cutez comme suit :

R4 :

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..

T5 : Comment rendre le script accessible depuis nimporte quel emplacement ? voir figure

suivante :

R5 :&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

5. Les expressions conditionnelles et les structures de contr le

5.1. La commande test

La commande interne test ou [ ] permet de contr ler l'ex cution de votre script shell partir du code

de retour d'une expression. Comme nous l'avons d j vu, un code retour gal a 0 est consid r comme vrai

Advertisement

alors qu'un code retour non nul sera consid r comme faux. II est alors tr s simple de tester la bonne

ex cution d'une commande :

#!/bin/bash

classe="1ALINFO3"

if [ $classe = "1ALINFO3" ]

then

echo "Bonjour 1ALINFO3 de Vermeg !"

fi

Ou bien on pourra crire le m me code comme suit :

#!/bin/bash

classe="1ALINFO3"

if test $classe = "1ALINFO3"

then

echo "Bonjour 1ALINFO3 de Vermeg !"

fi

L' valuation d'expressions concernant le type ou les droits d'acc s des fichiers sont pr vus avec

l'utilisation d'options. Les tableaux suivants vous donnent quelques options.

Options

-a fichier ou -e fichier

-b fichier

-c fichier

-d fichier

-f fichier

-p fichier

-s fichier

-L fichier

fichierl -nt fichierS

fichierl -ot fichierS

fichierl -ef fichierS

Vraie si

le fichier existe

le fichier existe et est de type bloc

le fichier existe et est de type caract re

le fichier existe et c'est un r pertoire

le fichier existe et c'est un fichier r gulier

le fichier existe et c'est un tube nomme

le fichier existe et a une taille non nulle

le fichier existe et c'est un lien symbolique

fichierl est plus r cent que fichier2

fichierl est moins r cent que fichier2

les 2 fichiers ont le m me num ro d'inode (lien simple)

Options

-r fichier

-w fichier

-x fichier

-g fichier

-k fichier

-u fichier

-O fichier

Vraie si

le fichier est lisible

le fichier est modifiable

le fichier est ex cutable

le fichier poss de le bit set-gid

le fichier poss de le bit sticky

le fichier poss de le bit set-uid

le fichier a le propri taire du processus comme propri taire

Advertisement

-G fichier

le fichier a le groupe du processus comme groupe

D'autres options permettent de manipuler des chaines de caract res pour des comparaisons

lexicographiques (options = != < et >) et des comparaisons num riques (options -eq, -ne, -It, -le, -gt et -ge).

Vous trouverez celles-ci dans le tableau ci-dessous.

Options

-n chaine

-z chaine

chainel -eq chaineS

chainel -ne chaineS

chainel -gt chaineS

chainel -ge chaineS

chainel -It chaineS

chainel -le chaineS

chainel = chains

chainel != chaineS

chainel > chains

chainel < chaineS

Vraie si

la chaine est de longueur non nulle

la chaine est de longueur nulle

les 2 valeurs sont gales

les 2 valeurs sont diff rentes

la valeur chainel est la plus grande

la valeur chainel est plus grande ou gale

la valeur chainel est plus petite

la valeur chainel est plus petite ou gale

les 2 chaines sont gales

les 2 chaines sont diff rentes

chainel est la plus grande

chainel est la plus petite

II est possible de combiner ces expressions entres elles avec des parenth ses en utilisant l'operateur de

n gation " !" et les op rateurs logiques ET et OU.

5.2. Les structures de contr le

Vous trouverez ci-dessous un exemple pour chacune des structures de contr le utilisables dans le

bash.

La construction if

if [ -e UNIX5.tex -a -r UNIX5.tex ]

then

echo -e "Le fichier existe\n"

echo -e "Et il est lisible\n"

else

fi

echo -e "Le fichier n'existe pas\n"

Premier cas

if [ -f myfile ]

then echo "cas 1 --- Le fichier myfile existe."

else echo "cas1 --- Le fichier n'existe pas"

fi

Deuxi me cas

if [ ! -f myfile ]

then echo "cas2 --- Le fichier n'existe pas."

else echo "cas2 --- fichier existe"

fi

La construction case

case 'echo $SHELL' in

'/bin/bash') echo -e "Votre shell est le bash\n";;

Advertisement

'/bin/tcsh') echo -e "Votre shell est le tcsh\n";;

'/bin/csh') echo -e "Votre shell est le

csh\n";;

*) echo -e "Je ne connais pas votre shell\n";;

esac

La construction for

set a b c

for i in $*

do

done

echo $i

La construction select

La commande select est particuli rement bien adapt e pour r aliser des menus interactifs. En voici

un exemple :

PS3="Votre Ghoix: "

select COM in fin Is 'cat /etc/profile'

do

if [ "$C0M" = fin ]

then

echo "Vous avez choisi $REPLY"

exit 0

else

echo -e "Vous avez choisi $REPLY\n"

$C0M

fi

done

La construction while

1=0

while [ $1 -It 10 ]

do

echo $1 let I=$I\+1

done

La construction until

1=0

until [ $1 -gt 256 ]

do

echo $1 let I=$I\+2

done

le mot clef break

II permet de forcer la sortie d'une boucle for, while ou until. Le mot clef break peut prendre un

argument strictement sup rieur a 1 afin de sp cifier le nombre de boucles imbriqu es dont il faut sortir. Si

la valeur sp cifi e est sup rieure au nombre de boucles imbriqu es, on sort de toutes les boucles

imbriqu es.

le mot clef continue

II permet de passer a la prochaine it ration d'une boucle for, while ou until. Le mot clef continue peut

aussi prendre un argument strictement sup rieur a 1 afin de sp cifier le nombre d'it rations "sauter". Si la

valeur sp cifi e est sup rieure au nombre d'it rations possibles, la derni re it ration est toutefois ex cut e.

Le mot clef exit

II permet de stopper le programme en pr cisant en argument le code retour. Par convention, ce code

retour est un entier nul en cas de sortie normale du programme et non nul en cas de fin de programme avec

erreur.

5.3. Saisie sur la ligne de commande

Afin de realiser un script shell interactif, il est necessaire de pouvoir saisir des valeurs. La commande

interne au bash read interrompt le programme pour demander une saisie terminee par un retour chariot. La

commande peut etre suivie d'une variable pour stocker la valeur.

read A

- Alternance

Advertisement

echo $A

- Alternance

3 Calcul num rique

La commande interne let permet d'effectuer des calculs arithm tique dans le shell. Cependant

l'interpr teur de commande bash ne permet pas d'effectuer des calculs en virgule flottante. Pour ces

op rations, nous sommes oblig s de faire appel a une commande externe, la commande be. Cette

commande prend des donn es a calculer sur son entr e standard et affiche le r sultat sur sa sortie

standard. L'option "-1" permet de charger la biblioth que math matique.

$ 1=23

$ let J=$I\+100 $ echo $J $ 123

$ RES=<echo 3/41 be -lc $ echo $EES

$ .75000000000000000000

4 Gestion volu e de la ligne de commande

La syntaxe g n rale " commande [-options] arguments" est utilis e pour les commandes Unix.

Nous avons tudi dans un pr c dent T.P. comment obtenir les argument de la ligne de commande

($0, $1,...). II existe une commande qui permet une gestion plus volu e des arguments de la ligne de

commande : getopts.

Prenons l'exemple suivant :

while getopts ":ab:c" opt do

case $opt in

a) echo "Traitement de l'option -a";;

b) echo "Traitement de l'option -b"

echo "L'argument est $0PTARG";;

c) echo "Traitement de l'option -c"

?) echo "Usage: commande [-a] [-b arg] arguments"

exit 1;;

esac

done

shift $(($0PTIND-1))

echo "$1 est le premier argument apres les options..."

L'appel getopts dans la boucle while pr pare la boucle a accepter les options -a, -b et -c et

sp cifie que l'option -b doit traiter un argument ( :). Le : qui se trouve au d but permet de traiter la

saisie d'options invalides et place ? dans la variable lopt. Si une option prend un argument, la valeur

de celui-ci sera contenu dans IOPTARG

Pour chaque option sp cifi e sur la ligne de commande, une variable nomin e IOPTIND est

incr ment e. Par exemple, si vous sp cifiez 2 options (-ab), la variable vaudra 2. Cela explique le

d calage des arguments qui est effectu par la commande shift afin de retrouver les "vrais" arguments

de la commande avec les variables $1, $2, etc...

Exercices

Conversion Euros/Francs et Francs/Euros

Premi re partie

R alisez un script appel " Convertisseur" qui vous permettent de convertir en Euros une somme en

Francs pass e en argument. Le taux de conversion sera contenu dans un fichier nomme Taux sous la forme

: Taux :6.55957. Pensez a tester si ce fichier est existant et lisible par votre processus. Si ce n'est pas le cas,

votre script doit afficher une erreur et quitter en indiquant un code retour 1.

Seconde partie

Modifiez votre script afin de pouvoir traiter l'option -e qui permet d'inverser la conversion (Euros vers

Francs). En cas d'erreur de syntaxe, le script affiche l'usage du programme et quitte avec un code retour

egal a 2.

Derni re partie

Modifiez votre script afin de pouvoir traiter l'option -f FILE qui permet d'indiquer un fichier dans

lequel se trouve plusieurs sommes a convertir (une par ligne). Les r sultats des conversions seront places

dans un fichier nomme " Resultats".