0% ont trouvé ce document utile (0 vote)
0 vues11 pages

Programmation Shell

Le document présente le shell UNIX, un interpréteur de commandes qui permet d'exécuter des commandes et de créer des scripts. Il aborde les variables, les méta-caractères, les types de variables, ainsi que les structures de contrôle comme les boucles et les conditions dans les scripts. Enfin, il fournit des exemples pratiques et une bibliographie pour approfondir le sujet.
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues11 pages

Programmation Shell

Le document présente le shell UNIX, un interpréteur de commandes qui permet d'exécuter des commandes et de créer des scripts. Il aborde les variables, les méta-caractères, les types de variables, ainsi que les structures de contrôle comme les boucles et les conditions dans les scripts. Enfin, il fournit des exemples pratiques et une bibliographie pour approfondir le sujet.
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Systèmes d’exploitation :

6. Programmation Shell

A.U 2012/2013 Ramzi Mahmoudi 185

Systèmes d’exploitation:
Unix – Le shell (1)

1 Introduction

Le shell (littéralement coquille autour du noyau d'UNIX) est l'interpréteur de commandes d'UNIX.

Tout a la fois :
- il exécute en mode interactif les commandes émises par l'utilisateur,
-il propose un langage de programmation interprète permettant de générer de nouvelles commandes ou
procédures cataloguées ("scripts shell").

Le shell ne fait pas partie du noyau d'UNIX et n'est pas résident en mémoire principale. Ainsi, on peut
disposer facilement de plusieurs interpréteurs de commandes : Bourne-shell, C-shell, Kornshell,...

Dans tout shell d'UNIX, un blanc est un espace ou un caractère de tabulation.


Un séparateur est un blanc . Un mot est une chaine de caractères entre deux séparateurs.

Tout ce qui est entre deux ' est considère comme un seul mot.

A.U 2012/2013 Ramzi Mahmoudi 186

1
Systèmes d’exploitation:
Unix – Le shell (2)

2 Les variables

Nom de variable : une suite de caractères lettres, chiffres et _


ex.: a=IS chemin=/users/eleves/sys_isbs

Valeur de variable : $a ou ${a} désigne la valeur de la variable a


${a}c désigne la valeur de a suivie de c.
ex.:$ a=IS
$echo $a
$IS

On utilise trois caractères génériques :


* toute sous-chaine, même vide,
? tout caractère,
[...] tous les caractères d'un intervalle.

Toute fin de ligne commençant par # est un commentaire


ex.: ls - l *.c # edite les noms de fichiers d'extension .c

A.U 2012/2013 Ramzi Mahmoudi 187

Systèmes d’exploitation:
Unix – Le shell (2-1)

2 Les variables

Méta-caractères : < * ? | & , \ ont un sens spécial.

ex.: a="bijou * caillou "


b=chou ; c=caillou ; r="$a $b";echo $r

Précédés de \, les méta-caractères perdent leur signification particulière

ex.: echo \* ; echo \\ echo abc\*\*\*d

les délimiteurs de chaînes :

oDans une chaine délimitée par des " , les caractères $, \, ', ` sont des caractères spéciaux.
oDans une telle chaine, un caractère " doit être précède de \
oDans une chaine délimitée par des ' , tous les caractères perdent leur aspect spécial

A.U 2012/2013 Ramzi Mahmoudi 188

2
Systèmes d’exploitation:
Unix – Le shell (2-2)

2 Les variables

Types de variables :
la commande typeset [-filrux ] [variable [= valeur]] permet de typer une variable et/ou de lui affecter une
valeur:
-f : variable est une fonction
-i : variable est de type entier
-l : majuscules transformées en minuscules
-r : variable accessible seulement en lecture
-u : minuscules transformées en majuscules
-x : variable exportée

A.U 2012/2013 Ramzi Mahmoudi 189

Systèmes d’exploitation:
Unix – Le shell (2-3)

2 Les variables

Exemples :
$ typeset -r v=abc
$ echo $v
abc
$ typeset v=hier
/bin/ksh v is read only
$ w=3+5
$ echo $w
3+5
$ typeset -i w
$ echo $w
8
$ typeset +r v (deprotection de v)
$ v=123
$ echo $v
123

A.U 2012/2013 Ramzi Mahmoudi 190

3
Systèmes d’exploitation:
Unix – Le shell (2-4)

2 Les variables

Règles de substitution : elles utilisent les { }

${#variable} : longueur de la variable


$ X=abc
$ print ${#X}
3
${variable :- mot} : valeur de variable si elle est definie et non nulle, sinon valeur de mot
$ X=abc
$ print ${X-:cde}
abc
$ unset X
$ print ${X:-cde}
cde
${variable := mot} : valeur de variable si elle est definie et non nulle, sinon variable prend la de mot
${variable :? mot} : valeur de variable si elle est definie et non nulle, sinon valeur de mot

A.U 2012/2013 Ramzi Mahmoudi 191

Systèmes d’exploitation:
Unix – Le shell (2-5)

2 Les variables

Variables prédéfinies: gérées automatiquement par le shell :

$# nombre de paramètres d'une commande (ceux-ci étant désignes par $1 a $9)
$* la liste des paramètres $1 $2 ...
$$ le numéro du processus en cours (très utile dans la suite)
$! le n° du dernier processus lance en arrière plan
$? le code de retour de la dernière commande exécutée

($0 le nom de la commande elle-même).


A.U 2012/2013 Ramzi Mahmoudi 192

4
Systèmes d’exploitation:
Unix – Le shell (2-6)

2 Les variables

Variables d'environnement prédéfinies :

HOME l'argument par défaut pour la commande cd


LOGNAME le nom de l'utilisateur (sous SYSTEM V) ou USER (sous systeme BSD)
PATH la liste des répertoires a chercher pour exécuter une commande
PS1 le prompt principal
PS2 le prompt secondaire
IFS la liste des séparateurs de mots pour le shell (inter fields separators)
SHELL le shell courant
TERM le type de terminal
TZ le fuseau horaire (time zone)

A.U 2012/2013 Ramzi Mahmoudi 193

Systèmes d’exploitation:
Unix – Le shell (3-1)

3 Les scripts

L'interpréteur de commandes est un fichier exécutable se trouvant dans /bin.


 Le shell est donc lui-même une commande.

Ainsi, pour disposer d'une nouvelle procédure cataloguée ( "script shell"), on saisit dans un
fichier (par exemple ici fic) une liste de commandes avec un éditeur (exemple nedit).

Pour exécuter ce fichier, on a deux solutions:


sh fic [arg] ou mieux chmod u+x fic
fic [arg]

Le langage de commandes du shell dispose des structures classiques if, for, while, until.

A.U 2012/2013 Ramzi Mahmoudi 194

5
Systèmes d’exploitation:
Unix – Le shell (3-2)

3 Les scripts

BOUCLE FOR

for var [in mot1 [mot2 ...]]


do liste_de_commandes
Done

var prend les valeurs mot1, mot2, ... et exécute la liste de commandes pour chaque valeur

ex.: for i do grep $i /users/eleves/sys_isbs/tp


done
# on range ce script dans le fichier EX1 qu'on rend exécutable
# ici, la liste des valeurs est vide; par défaut,
# elle est prise égale à $*, la liste de paramètres de commande

$ EX1 IS BS
# affichera les lignes de /users/eleves/sys_isbs/tp contenant IS ou BS

A.U 2012/2013 Ramzi Mahmoudi 195

Systèmes d’exploitation:
Unix – Le shell (3-3)

3 Les scripts

BOUCLE WHILE

while liste_de_commandes
do liste_de_commandes
done

On boucle tant que la dernière commande de la liste renvoie 0 (vrai).

ex.: while test $# -ne 0 # tant qu'il y a des paramètres...


do echo $1 #...on affiche le premier
shift # on décale les paramètres
done

# on range ce script dans le fichier EX2 qu'on rend exécutable


EX2 toto titi # affiche toto titi

A.U 2012/2013 Ramzi Mahmoudi 196

6
Systèmes d’exploitation:
Unix – Le shell (3-4)

3 Les scripts

BOUCLE UNTIL

until liste_de_commandes
do liste_de_commandes
done

On boucle jusqu'a ce que la dernière commande de la liste renvoie 0 (vrai).

ex.: until test -f fic


do sleep 50 #attendre 50 s.
done

A.U 2012/2013 Ramzi Mahmoudi 197

Systèmes d’exploitation:
Unix – Le shell (3-5)

3 Les scripts

CHOIX IF

if liste_de_commandes
then liste_de_commandes
[elif liste_de_commandes
then liste_de_commandes ]
[else liste de commandes ]
fi

On execute "then" si la derniere commande de la liste de "if" retourne 0 (vrai).

ex.: if test -f "$1"


then echo ‘fichier $1 trouve’
else echo ‘pas de fichier de nom $1’
fi

A.U 2012/2013 Ramzi Mahmoudi 198

7
Systèmes d’exploitation:
Unix – Le shell (3-6)

3 Les scripts

SELECTION CASE

case vise a éviter les imbrications de if :

ex.: # fichier ajout


case $# in
1) cat >> $1;;
2) cat >> $2 <$1;;
*) echo "syntaxe : ajout [origine] destination";;

ajout fich #ajoute en fin de fichier jusqu'a <CTRL-D>


ajout f1 f2 # f1 copie en fin de f2

A.U 2012/2013 Ramzi Mahmoudi 199

Systèmes d’exploitation:
Unix – Le shell (3-7)

3 Les scripts

SELECTION CASE

On peut utiliser comme parametre, ou affecter a une variable, la sortie standard d'une commande placée entre ` `

exemples 1 : for i in `ls`


do echo " "$i
done

2 : c=`pwd` # voir commande pwd


ls $c # affiche le catalogue de travail

3 : set `date` ; echo $3 $2 $6


# set range dans les variables prédéfinies $1, $2, etc....
# il s'affiche jour, mois année

A.U 2012/2013 Ramzi Mahmoudi 200

8
Systèmes d’exploitation:
Unix – Le shell (3-8)

3 Les scripts

EXEC : (réalise des redirections d'E/S)

exec 1 > [Link] # redirige la sortie standard vers le fichier [Link]


exec < fic # redirige l'entrée standard sur le fichier fic
.......
exec < /dev/tty # rétablit l'entrée standard
exec 5<>[Link] # le fichier [Link] est ouvert en lecture-écriture avec le descripteur 5
print -u5 "Tout va bien"
cat < &5 # lecture a partir du fichier de descripteur 5
exec 5 < &- # fermeture du fichier de descripteur 5

A.U 2012/2013 Ramzi Mahmoudi 201

Systèmes d’exploitation:
Unix – Le shell (3-9)

3 Les scripts

LET

let "expression arithmétique" ou ((expression arithmétique))


exemples :
((X=-7))
((Y=-X+2))
echo $Y

Toutes les opérations arithmétiques de C sont permises avec let

A.U 2012/2013 Ramzi Mahmoudi 202

9
Systèmes d’exploitation:
Unix – Le shell (3-10)

3 Les scripts

READ

echo "Votre nom ? \c"


read name
echo "Bonjour $name, ca va ?"
print "this is a play again" | read X Y Z
print $X
this
print $Y
is
print $Z
a play again

A.U 2012/2013 Ramzi Mahmoudi 203

Système d’exploitation :

~ Prog. Shell~
Travaux Pratiques (4)

A.U 2012/2013 Ramzi Mahmoudi 204

10
Systèmes d’exploitation:
BIBLIOGRAPHIE

A. TANENBAUM, Systemes d’exploitation, Prentice Hall, 1999


A.B. FONTAINE, Ph. HAMMES, UNIX Systeme V, Masson, 1993
J.L. NEBUT , UNIX pour l'utilisateur, Technip, 1990
J.M. RIFFLET , La programmation sous UNIX, Mac Graw-Hill, 1992

A.U 2012/2013 Ramzi Mahmoudi 205

11

Vous aimerez peut-être aussi