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
Publicité
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
Publicité
-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";;
Publicité
'/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
Publicité
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".