Vous êtes sur la page 1sur 7

Plan

INTRODUCTION
A. Lenvironnement bash
B. Les fichiers de configuration
a)La famille bashrc
b) Script shell
c ) Les scripts
D) Passage de paramtres un script
a)Les expressions logiques
E. Les boucles
a) Test case
b)Boucle for
c) Boucles while
F. Les paramtres dentre dun script
G. Calculs
H.QUELQUES EXERCICES
CONCLUSION
Introduction
Le shell est un interprteur de commandes. Plus qu'une simple couche isolante entre
le noyau du
systme d'exploitation et l'utilisateur, il est aussi un langage de programmation
puissant. Un
programme shell, appel un script, est un outil facile utiliser pour construire des
applications en
<< regroupant >> des appels systme, outils, utilitaires et binaires compils.
Virtuellement, le
rpertoire entier des commandes UNIX, des utilitaires et des outils sont disponible
partir d'un
script shell. Si ce n'tait pas suffisant, les commandes shell internes, telles que les
constructions
de tests et de boucles, donnent une puissance et une flexibilit supplmentaires aux
scripts. Les
scripts shell conviennent exceptionnellement bien pour les tches d'administration du
systme et
pour d'autres routines rptitives ne rclamant pas les particularits d'un langage de
programme
structur complet. Ce rsum permettra d' initier un apprenant la programmation
shell. Ainsi
avant de programmer quelques notions seront d' abord expliques savoir l' objectif,
points
importants, environnement...
Objectifs
Connatre l'intrepreteur de commandes Bash
Connatre les bases de la programmation du shell.
Matriser le principe des scripts shell pour comprendre les scripts systme.

Savoir programmer des expressions logiques et arithmtiques ainsi que des


boucles.
Points importants
Automatiser les tches administratives avec des scripts
bash est indispensable et trs efficace.
Une bonne utilisation de Linux est indissociable des scripts
Mots cls
$*, $#, $0, $1, $2, $!, $$, $?, ~/.profile, ~/.bashrc,
~/.bash_logout, ~/.inputrc, /bin/bash, /etc/bash_logout,
/etc/bashrc, /etc/inputrc, /etc/profile, bash, case, do,
done, else, env, esac, export, expr, fi, for, if, PATH,
select, set, test, then, unset, while

A. Lenvironnement bash
a) Les variables en bash
Pour affecter un contenu une variable, on utilise la commande = de la manire
suivante :
Attention ne pas mettre despace avant et aprs le signe = !!!
Pour faire rfrence au contenu dune variable, on la prfixe par le signe
$ .
Pour effacer le contenu dune variable, on utilise la commande unset.
: unset ma_variable
Le shell utilise des variables pour tenir compte des paramtres de configuration
spcifiques des
utilisateurs appels variables denvironnement.
Les variables HOME, DISPLAY, PWD en font partie.
echo $HOME
/usr/home/quentiny
Lors de lutilisation dun programme, le shell utilise la variable denvironnement PATH
pour
retrouver le chemin daccs ce programme.
On peut afficher le contenu de cette variable par la commande echo :
!
echo $PATH
exemple:
Pour quune variable soit visible de tous les shells (donc de toutes les commandes
lances depuis
le shell courant), il faut lexporter par la commande export.
export MANPATH=/usr/share/docs
Lors du dmarrage dune session shell, la plupart des variables denvironnement
sont initialises
et exportes partir des diffrents fichiers de configuration, tels que les fichiers
bashrc et
profile.
La commande env permet de dmarrer un shell avec des variables denvironnement
dja
positionnes des valeurs donnes. Ces variables denvironnement ont une dure
de vie gale
celle du shell dmarr.

Par exemple, pour lancer la commande


variable denvironnement ma_variable la valeur env ma_variable=ma_valeur
ma_commande la
a dure de vie et la visibilit de ma_variable dexcution de ma_commande.

B) Les fichiers de configuration


Il y a plusieurs types de fichiers de configuration, ceux qui sont lus au moment de la
connexion
(login) et ceux qui sont lus chaque lancement dun shell.
Les fichiers lus au moment de la connexion au systme sont :
- ~/.bash_profile, commun tous les utilisateurs (sil existe) ;
- ~/.bash_profile ou ventuellement ~/.bash_login ou ~/.profile/, spcifiques
chaque
utilisateur.
Ils servent gnralement dcrire lenvironnement de lutilisateur.
Les fichiers lus chaque lancement de shell sont :
- /etc/bashrc commun tous les utilisateurs (sil existe);
- ~/.bashrc spcifique chaque utilisateur.

a) La famille bashrc
Les fichiers de la famille bashrc sont lus lanc (ex commandes xterm ou bash).
Ils servent gnralement stocker les alias et les fonctions utilises communement.
On peut dmarrer le shell bash avec diffrentes options lui indiquant les
fichiers de
configuration lire au dmarrage :
bash login : force la lecture des fichiers de connexion famille profile ;
bash norc : pas de lecture des fichiers bashrc
bash noprofile : pas de lecture des fichiers profile
Attention, toutes les nouvelles sessions de bash, puisquelles sont des
processus fils, hritent des variables dfinies dans les fichiers profile lors
de la connexion.
Le fichier /etc/bash_logout, sil est prsent, bash lu avant la deconnexion tous les
utilisateurs.
Le fichier ~/.bash_logout, sil est prsent, est excut la fin de la session
bash spcifique un utilisateur.
Le fichier inputrc permet de reconfigurer le clavier pour ajuster le fonctionnement des
touches
comme par exemple la touche deffacement arrire. Le fichier gnral est dans
/etc/inputrc, les
fichiers personnels dans ~/.inputrc.

C. Les scripts
a) Script shell
Un script shell est une liste dinstructions contenues dans un fichier.
Exemple:
Ouvrant un terminal ensuite utilisant un diteur; en prcisant le nom de votre script;
en voici un
exemple de capture(dans mon cas, le nom de mon script est: bon)
ensuite suivant la formule en crivant votre script dans le fichier comme ceci(dans
cet exemple
un script permettant de saluer les amies:
#!/bin/bash
# Un petit script bon

echo 'bonjour les amies'


Pour pouvoir excuter ces instructions, deux conditions doivent tre remplies :
la premire ligne doit contenir #!/bin/bash (pour un shell script utilisant bash);
le fichier doit tre excutable (ex en utilisant la commande chmod +x) et lisible (ex
avec
les permissions 755)
[root@allier~] # chmod +x mon_script
[root@allier~] # ./mon_script
Si toutes ces conditions ne sont pas remplies, il est toujours possible de forcer
lexcution du
script avec la commande bash.
[root@allier~] # bash mon_script
voici le resultat concret:

D) Passage de paramtres un script


Les variables passes au script sur la ligne de commande sont accessibles dans le
script par les
variables rserves $1 pour le premier argument, $2 pour le deuxime et ainsi de
suite.
noter quil existe un oprateur shift qui dcale ces paramtres : la valeur contenue
dans $2
passe dans $1, celle contenue dans $3 passe dans $2 et ainsi de suite. Cela permet
essentiellement dutiliser plus de 9 paramtres en entre.

Dautres variables rserves sont accessibles lintrieur dun


script :
$0 : nom du script ;
$* : liste des paramtres ;
$# : nombre de paramtres ;
$$ : numro du processus en cours
$? : valeur de retour de la dernire commande.
Exemple de script utilisant les paramtres
#!/bin/bash
# un autre script
echo "mon script est $0"
echo "il y a eu $# paramtres en entre"
echo "le premier paramtre est $1"
exemple de capture d cran:
le resultat donne ceci:
considrant maintenant deux paramtres tout en affichant le nombre de paramtre
(s) et le nom
du programme:
nous aurons au resultat:

a. Les expressions logiques


Les expressions logiques sont values laide de la fonction test, qui peut
galement scrire
[ ].
Le rsultat de l ' valuation est stock dans la variable $? qui contient :
0 si le rsultat est vrai;
une valeur diffrent de 0 si le resultat est est faux.
Par exemple Pour vrifier si le fichier /bin/bash existe :

test -f /bin/bash
ou
[ -f /bin/bash ]
Pour vrifier si le fichier ~/bin/mon_script est excutable :
test -x ~/bin/mon_script
ou
[ -x /bin/mon_script ]
Les expressions logiques peuvent tre combines par des oprateurs logiques &&
(ET/AND) et ||
(OU/OR). Il est galement possible d utiliser des connecteurs -a (ET/AND) et -o
(OU/OR).
Exemple:
Pour vrifier si les fichiers /etc/profile et /etc/bashrc existent :
test -f /etc/profile -a test -f /etc/bashrc
ou
test -f /etc/profile && test -f /etc/bashrc
ou
[ -f /etc/profile -a -f /etc/bashrc ]

Quelques options de la commande test :


-f : vrifie si le fichier est un fichier standard ;
-d : vrifie si le fichier est un rpertoire ;
-b : vrifie si le fichier est de type bloc ;
-e : vrifie si le fichier existe indpendamment de son type ;
-r : vrifie si le fichier est lisible ;
-w : vrifie si le fichier est inscriptible ;
-x : vrifie si le fichier est excutable.
Dautres options seront donnes pour le traitement spcifique des nombres.

E. Les boucles
a) Test if
Cette boucle sert pour les tests et branchements.
Syntaxe (la partie else... est optionnelle) :
if <condition> then
<commande1>
<commande2>
...
else
<commande1>
<commande2>
...
fi
exemple:
resultat l cran:
#!/bin/sh
if test -f monfichier.txt then
echo " le fichier existe "
fi
b) Test case
Ce test permet de spcifier les commandes excuter valeurs prises par la variable
passe en

argument.
Syntaxe :
case <variable> in
valeur1) commande1 ;;
valeur2) commande2 ;;
valeur3) commande3 ;;
...
esac
exemple:
resultat la sortie:

c) Boucle for
Cette boucle sert pour rpter les traitements un nombre de fois connu.
Syntaxe:
for <variable> in <liste> do
commande1
commande2
commande3
...
done
par exemple pour afficher les jours de la semaine :
for jour in lundi mardi mercredi jeudi vendredi samedi dimanche
do
echo $jour
done

d) Boucles while
Cette boucle sert rpter les traitements un nombre de fois inconnu priori. Le test
de
continuit se fait au dbut de la boucle. La boucle continue tant que la condition est
vraie.
Syntaxe :
while <condition> do
<commande1>
<commande2>
...
done
Pour faire le test de lecture dune valeur jusqu ce que lutilisateur entre la
valeur 1 :
#!/bin/sh
i=0
while [ $i -ne "1" ] do
read i
done
Il existe une autre boucle, qui utilise le mot cl until la place de while. Elle diffre
dans le
traitement de la condition : la boucle est excute jusqu ce que la condition soit
vraie. Le test
est donc effectu en fin de boucle et la boucle est toujours excute au moins une
fois.
F. Les paramtres dentre dun script

La lecture dune valeur peut se faire par le passage de paramtres sur la ligne de
commande (cf.
prcdemment lutilisation des variables $1, $2, etc.) ou en lisant une entre au
clavier depuis le
script avec la commande read.
Pour lire le nom dune personne dans la variable nom et afficher son contenu :
#!/bin/sh
echo 'Entrez votre nom'
read nom
Lentre au clavier lue avec la commande read peut ensuite traiter avec la
commande case vue
prcdemment.
#!/bin/sh
echo ''entrez votre choix''
1) echo " menu un ";;
2) echo " menu deux ";;
3) echo " menu trois ";
esac

G. Calculs
Il est possible de comparer des nombres en utilisant la commande test, vue
prcdemment, avec les options suivantes :
-lt pour infrieur (<) ;
-gt pour suprieur (>) ;
-le pour infrieur ou gal (<=) ;
-ge pour suprieur ou gal (>=) ;
-eq pour gal (=) ;
-ne pour diffrent de (!=).
Pour tester le nombre de paramtres en entre :
exemple:
on obtiendra au resultat:
La commande expr permet deffectuer les quatre oprations arithmtiques de base,
avec les
oprateurs suivants :
+ pour laddition ;
- pour la soustraction ;
\* pour la multiplication ;
/ pour la division.
Par exemple: la commande expr 1 + 2 renvoie 3 .