Vous êtes sur la page 1sur 10

ISET MEDENINE

[2011-2012]

TP3 : les shells


Matire

AS2

Classe

TI1 A & B

Enseignantes

R. BEN AZZOUN
S.BEN CHAABAN

1. Dfinition
Sous Unix, on appelle shell linterprteur de commandes qui fait office d'interface entre
l'utilisateur et le systme dexploitation. Les shells sont des interprteurs : cela signifie que
chaque commande saisie par lutilisateur (ou lue partir dun fichier) est syntaxiquement
vrifie puis excute.
Un shell est un interprteur de commande en mode texte. Il peut sutiliser en mode interactif
ou pour excuter des programmes crits dans le langage de programmation du shell (appels
shell scripts).
Exemples :

sh (Bourne shell)

bash (Bourne again shell)

csh (C shell)

ksh (Korn shell)

Un shell possde un double aspect :

un aspect environnement de travail

un aspect langage de programmation.

2. Un environnement de travail
En premier lieu, un shell doit fournir un environnement de travail agrable et puissant. Par
exemple, bash permet le rappel des commandes prcdentes (gestion de lhistorique), la
modification en ligne du texte de la commande courante, la gestion des travaux lancs en
arrire-plan (ajout de & la fin du commande), linitialisation adquate de variables de
configuration et la cration de raccourcis de commandes.
En mode interactif, bash affiche lcran une chane dappel (appele galement prompt ou
invite), qui se termine par dfaut par le caractre # suivi dun caractre espace pour
ladministrateur systme (utilisateur root) et par le caractre $ suivi dun caractre espace
pour les autres utilisateurs.

ISET MEDENINE

[2011-2012]

3. Un langage de programmation
Les shells ne sont pas seulement des interprteurs de commandes mais galement de
vritables langages de programmation. Un shell comme bash intgre :

les notions de variable, doprateur arithmtique, de structure de contrle, de


fonction, prsentes dans tout langage de programmation classique, mais aussi

des oprateurs spcifiques (ex : | et ;)

Remarque : Loprateur |, appel tube, est un oprateur caractristique des shells et connecte
la sortie dune commande lentre de la commande suivante.

4. Shell utilis
La manire la plus simple de connatre le shell que lon utilise est dexcuter la commande
unix ps qui liste les processus de lutilisateur

5. Mtacaractres du shell
Certains caractres, appels mtacaractres, sont interprts spcialement par le shell avant
de lancer la commande entre par lutilisateur.
Les mtacaractres permettent donc de spcifier facilement des ensembles de fichiers, sans
avoir rentrer tous leurs noms. Voici les plus utiliss :
*: remplac par nimporte quelle suite de caractres
?: remplac par un seul caractre quelconque
[ ]:remplac par lun des caractres mentionns entre les crochets. On peut spcifier un
intervalle avec le tiret - (Exemple :[a-z]spcifie lensemble des lettres minuscules).

6. Initialisation dun shell


Lors de leur dmarrage, les shell excutent des fichiers de configuration (gnralement sous
/etc, modifiable par l'administrateur systme et utilis chaque fois qu'un shell est lanc) qui
peuvent contenir des commandes quelconques et sont gnralement utiliss pour dfinir des
variables denvironnement et des alias.

csh excute le fichier ~/.cshrc (le rc signifie run command)

sh excute ~/.profile

bash excute ~/.bash_profile ou dfaut ~/.profile.

ISET MEDENINE

[2011-2012]

Rappelons que les fichiers dont le nom commence par un point ne sont pas affichs par la
commande ls (sauf si on emploie loption -a) ; les fichiers dinitialisation sont donc
invisibles.

7. Variables denvironnement
Le systme UNIX dfini pour chaque processus une liste de variables denvironnement, qui
permettent de dfinir certains paramtres : rpertoires dinstallation des utilitaires, type de
terminal, etc. Chaque programme peut accder ces variables pour obtenir des informations
sur la configuration du systme.
La commande set permet dafficher la liste des variables d'environnement et de leurs valeurs.
Voici quelques variables caractristiques :

HOME : Rpertoire de base d'un utilisateur (dynamique)

LOGNAME : Login de l'utilisateur en session (dynamique)

PATH : Ensemble des chemins de recherche des applications lances

PS1 : Prompt

PWD : Rpertoire courant (dynamique)

SHELL : Nom du shell courant (dynamique)

~ : Rpertoire de base d'un utilisateur (dynamique)


Remarque : pour dsigner la valeur d'une variable, on utilise son nom prcd d'un $.

8. Fichiers shell ou scripts


Lorsquun traitement ncessite lexcution de plusieurs commandes, il est prfrable de les
sauvegarder dans un fichier plutt que de les retaper au clavier chaque fois que le traitement
doit tre lanc. Ce type de fichier est appel fichier de commandes ou fichier shell ou encore
script shell.
Un script peut tre une simple liste de commandes. La premire ligne du script doit prciser
linterprteur utilis, elle commence par les deux caractres #!, suivis du chemin de
linterprteur.
Voici un exemple simple :
#!/bin/bash
# liste
echo Contenu du repertoire courant
ls -l

ISET MEDENINE

[2011-2012]

Ce script affiche la liste dtaille des fichiers du rpertoire courant.


Il doit tre entr laide dun diteur de texte, enregistr dans un fichier (nomm par
exemple liste), puis rendu excutable grce la commande chmod a+x liste (a designe
all ;users+groups+others)
La deuxime ligne sagit dun commentaire (inutile dans le fonctionnement de script) qui
comporte le nom du fichier.
Pour lancer lexcution dun fichier shell, on peut utiliser la commande :
bash nom_fich

ou

. /nom_fich

9. Utilisation des variables


Une variable est identifie par un nom, c'est--dire une suite de lettres ou de chiffres. Les
lettres majuscules et minuscules sont diffrencies.
Les variables peuvent tre classes en trois groupes :

les variables utilisateur (dfinies par lutilisateur lors de lecriture du script)

les variables prdfinies du shell (ex : PS1, PATH, REPLY, IFS)

les variables prdfinies de commandes unix (ex : TERM).

En gnral, les noms des variables utilisateur sont en lettres minuscules tandis que les noms
des variables prdfinies (du shell ou de commandes unix) sont en majuscules.
Lutilisateur peut affecter une valeur une variable en utilisant

loprateur daffectation =

la commande interne read

a) Affectation directe
Syntaxe: nom=[valeur]
Il est impratif que le nom de la variable, le symbole = et la valeur affecter ne forment
quune seule chane de caractres. Plusieurs affectations peuvent tre prsentes dans la mme
ligne de commande.
Pour accder au contenu (valeur) de variable on utilise le caractre $ suivi du nom de variable
Exemple :
> x=coucou
> echo x est : $x
x est coucou

ISET MEDENINE

[2011-2012]

b) Affectation par lecture


Elle seffectue l'aide de la commande interne read. Celle-ci lit une ligne entire sur lentre
standard (le clavier).
Syntaxe: read [ var1 ... ]
Exemple:
> read a b

bonjour Monsieur
> echo $b
Monsieur
Lorsque la commande interne read est utilise sans argument, la ligne lue est enregistre dans
la variable prdfinie du shell REPLY .
Exemple:
> read
bonjour tout le monde
> echo $REPLY
bonjour tout le monde
Loption p de read affiche une chane dappel avant deffectuer la lecture ; la syntaxe
utiliser est : read p chane_d_appel [ var ]
Exemple:
> read -p "Entrez votre prenom : " prenom
Entrez votre prenom : Eric
> echo $prenom
Eric
Remarque : Sil y a moins de variables que de mots dans la ligne lue, le shell affecte le
premier mot la premire variable, le deuxime mot la deuxime variable, etc., la dernire
variable reoit tous les mots restants.
c) Variable en lecture seule
Pour dfinir une variable dont la valeur ne doit pas tre modifie (appele constante dans
dautres langages de programmation), on utilise la syntaxe :
declare r nom=valeur

ISET MEDENINE

[2011-2012]

10.Commande interne set


La commande interne set affecte une valeur un ou plusieurs paramtres de position en
numrotant ses arguments suivant leur position. La numrotation commence 1.
Syntaxe: set arg1 arg2 arg3
Exemple:
> set alpha beta gamma
Pour obtenir la valeur dun paramtre de position, il suffit de placer le caractre $ devant son
numro ; ainsi, $1 permet dobtenir la valeur du premier paramtre de position, $2 la valeur
du deuxime et ainsi de suite.
Exemple :
>

echo $3 $2

alpha beta
Pour supprimer une ou plusieurs variables, on utilise la commande interne unset ou set - Syntaxe : unset var
Remarques :
on peut rcuprer galement des items de la ligne de commande via les codes $0, $1, $2,
$3, ... dans l'ordre de frappe et incluant le nom de la commande.
Exemple :
> ls -l /home
> echo $3
/home

=> $0 : ls

$1 : -l

$2 : /home

La Rcupration de la liste complte des items avec $*.


la Rcupration du nombre d'items avec $#.
La Rcupration du rsultat d'excution de la dernire commande via le code $?.
(0 indique "Pas d'erreur d'excution".)

11.Substitution de commandes
Syntaxe : $( cmd )
Une commande cmd entoure par une paire de parenthses () prcdes d'un caractre $ est
excute par le shell puis la chane $( cmd ) est remplace par les rsultats de la commande
cmd crits sur la sortie standard (lcran). Ces rsultats peuvent alors tre affects une
variable ou bien servir initialiser des paramtres de position.
6

ISET MEDENINE

[2011-2012]

> pwd
/home/sanchis

=> rsultat crit par pwd sur la sortie standard

> repert=$(pwd)

=> la chane /home/sanchis remplace la chane $(pwd)

> echo mon repertoire est $repert


mon repertoire est /home/sanchis

12.Les structures itratives


il existe des classiques instructions de structuration comme if, case, for et while quon peut les
utiliser dans les scripts shell.

If
if commande

case
case variable in

For
for variable in liste

while
while commande

then

v1) ... ;;

do

do

...

v2) ... ;;

...

...

done

done

else
..

vn) ;;

fi

esac

13.Les tests dans le shell


UNIX propose une procdure de TEST pour programmer une condition (avec la commande
test suivie de la condition)
Tests sur les caractristiques des fichiers.

test -f fichier : Vrai si fichier ordinaire

test -d fichier : Vrai si fichier rpertoire

test -r fichier : Vrai si fichier est accessible en lecture

test -w fichier : Vrai si fichier est accessible en criture.

test -x fichier : Vrai si fichier est excutable.

test -s fichier : Vrai si fichier non nul

tests de comparaison entre deux expressions de type chaine de caractres :

test E1 = E2 : E1 gal E2

test E1 != E2 : E1 diffrent de E2

tests de comparaison sur expressions numriques :

test E1 -eq E2 : E1 gal E2

test E1 -ne E2 : E1 diffrent de E2

test E1 -ge E2 : E1 plus grand ou gal E2


7

ISET MEDENINE

[2011-2012]

test E1 gt E2 : E1 strictement plus grand quE2

test E1 -le

test E1 -lt E2 : E1 strictement plus petit quE2

E2 : E1 plus petit ou gal E2

tests des boolens :

test (E) : E est vrai

test !E : E est faux

test E1 -a E2 : E1 et E2

test E1 -o E2 : E1 ou E2

Exercices dapplications
Exercice 1
Ecrire un script shell nomm ladate qui affiche la date du systme.
Exercice 2
Ecrire un programme shell deuxfois qui affiche le message "Entrez un mot : ", lit le mot saisi
par l'utilisateur puis affiche ce mot deux fois sur la mme ligne.
Exercice 3
Crer un script shell nomm "change" qui affichera la date de dernire modification d'un
fichier puis la modifiera avec l'heure actuelle et enfin raffichera la date de dernire
modification du fichier. Cette procdure acceptera 1 paramtre qui sera le nom du fichier.
Exercice 4
Ecrire un programme shell untrois qui demande l'utilisateur de saisir une suite de mots
constitue d'au moins trois mots et qui affiche sur la mme ligne le premier et le troisime
mot saisis.
Exemple :
> untrois Entrez une suite de mots : un petit coucou de Rodez
un coucou

Exercice 5
copier le script suivant dans un fichier copier et l'excuter avec copier /home fich et
interprter le rsultat

ISET MEDENINE

[2011-2012]

#!/bin/bash
# copie
echo "Nom du programme : $0"
echo "Nb d'arguments : $#"
echo "Source : $1"
echo "Destination : $2"

Exercice 6
Ecrire le script suivant dans un fichier ecrase et l'excuter avec la commande :
ecrase bonjour coucou. Interprter le rsultat
# !/bin/bash
echo '$1' est $1
set hello
echo '$1' est $1

Exercice 7
En utilisant la substitution de commande, crire un fichier shell mach qui permet
d'afficher le nom d'utilisateur avec lequel vous travaillez et votre rpertoire courant.

Exercice 8
Ecrire un script shell nomm heure dans le quel vous affichez la date sous la forme suivante:
La date du jour est: jour mois anne
Lheure actuelle est: heure

Exercice 9
Crer un script shell nomm "nombreJours" qui affichera le nombre de jours du mois
courant.
"nombreJours" affichera pour mars 2012 le message "31 jours en mars 2012".

Exercice 10
Crer un script shell nomm cration ralisant la cration d'un rpertoire "Exo3"
contenant 5 fichiers nomms "Un" "cinq". Chaque fichier contient une seule ligne:

ISET MEDENINE

[2011-2012]

"Un" contient "Premire ligne"


"Deux" contient "Deuxime ligne"
...
"cinq" contient "cinquime ligne"

Vrifier que le rpertoire crer n'existe pas dj auquel cas il ne sera pas recr mais les fichiers si.

Exercice 11
Crer un script permettant d'afficher la liste des fichiers du rpertoire /etc accessibles en
lecture puis la liste des fichiers accessibles en criture.
Exercice 12
Crer un script nomm "table" permettant d'afficher des tables de multiplication.
"table 5 10" aura pour rsultat l'affichage:
0x5=0
1x5=5
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
5 x 5 = 25
6 x 5 = 30
7 x 5 = 35
8 x 5 = 40
9 x 5 = 45
10 x 5 = 50

10