You are on page 1of 22

Chapitre 2: Programmation Shell

A. NAANAA

Programmation Shell
Objectifs:
Connatre 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.

A. NAANAA

Programmation Shell
Points importants:
Automatiser les tches administratives avec des

scripts shell 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. NAANAA

Les variables
Variables spciales du Shell
$0 $1...$9 $* $@ $? $# $$
A. NAANAA

Nom de la procdure Valeur des paramtres de la procdure Chane quivalente $1,...,$9 Liste complte sous la forme "$1",..."$9" Code de retour de la dernire commande excute Nombre de paramtres transmis l'appel Numro de processus Numro dernier processus tournant en arrire-plan 4

$!

Les variables
Affectations La commande permettant d'affecter une valeur une variable utilise l'oprateur '=': var=chane Permet d'affecter la valeur de chane la variable var. Exemple: var=1 var='ceci est un exemple' var="ceci est un autre exemple" var1=$var2 var=$1 var2=`expr $var1 + 1`
Rq: typeset -i x; x=6*10; echo $x;
A. NAANAA

Les variables
Affichage
Pour faire rfrence au contenu d'une variable, on la

prfixe par le signe "$" echo $var


Pour effacer le contenu d'une variable, on utilise la

commande unset unset var


NB: readonly x;x=10;unset x!

Pour exporter une variable, on utilise la commande

export Ex: export x=10; dans un script shell


A. NAANAA

Les variables
Le shell utilise des variables pour tenir compte des paramtres de configuration spcifiques des utilisateurs appels variables d'environnement
$HOME: contient le nom du rpertoire par dfaut $MAIL: contient le nom absolu d'un fichier o

l'utilisateur recevra ces messages


$PATH: indique une liste de rpertoires qui

contiennent les commandes excuter .:/bin: /usr/bin


$PWD: affiche le chemin absolu jusqu' le rpertoire

courant.

A. NAANAA

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: /etc/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.

A. NAANAA

Les fichiers de configuration


Les fichiers lus chaque lancement de shell sont : /etc/bashrc commun tous les utilisateurs (sil existe) ~/.bashrc spcifique chaque utilisateur. Les fichiers de bashrc servent gnralement stocker les alias et les fonctions Le fichier /etc/bash_logout, est excut la fin de la session de tous les utilisateurs Le fichier ~/.bash _logout 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. Le fichier gnral est dans /etc/inputrc, ls fichiers personnels dans ~/.inputrc

A. NAANAA

Affichage et Lecture
L'affichage d'une chane de caractre ou d'une variable est effectu par la commande echo
echo "exemple" echo le script shell $0 est rdig par $LOGNAME echo $PWD

La lecture de donne partir de l'entre standard se fait par la commande read.


echo -n "introduire votre message" ; read message

l'appui sur la touche "Enter" termine la lecture.

A. NAANAA

10

Les instructions de test


Les fichiers: test -f f1: vrai si f1 est un fichier ordinaire test -d f1: vrai si f1 est un rpertoire test -r f1: vrai si f1 est accessible en lecture test -s f1: vrai si f1 a une taille suprieure zro Idem pour -b,-e,w et x Les chanes de caractres: test -n $ch1: vrai si la chane ch1 a une longueur non nulle test $ch1=$ch2: vrai si les chaines ch1 et ch2 sont gales test $ch1!=$ch2: vrai si les chaines ch1 et ch2 sont diffrentes
A. NAANAA

11

Les instructions de test


Les entires:
test $n1 -eq $n2: vrai si n1 est gal n2 test $n1 -ne $n2 : vrai si n1 est diffrent de n2 test $n1 -gt $n2: vrai si n1 est strictement suprieur n2 idem pour ge, -lt et le
Exemple: mon_unix=`uname`; echo$mon_unix; Interprter: 1.machine=`unamea|cutd""f5` 2.machine=$(unamea|cutd""f5)

A. NAANAA

12

Oprateurs logique & arithmtique


Les oprateurslogique, ! (non), -a (et) et -o (ou) peuvent tre utiliss. NB: l'oprateur -a est prioritaire par rapport -o.
Exemple:testd$1a!\(n$2o$3eq$4\) testd$1aw$1&&echo"directory+writepermission" ["$1"lt"$2"]&&echo"$1estinfrieure$2"

Les oprateurs arithmtiques:


expr $a < $b expr $a > $b expr $a = $b

expr $a <= $b expr $a >= $b expr $a!= $b

.
A. NAANAA

13

Calculs arithmtiques
$expr $expr $expr $expr $expr $a $a $a $a $a + $b - $b \* $b / $b % $b

Remarque: $expr $a: $b Compare la chane a la chane b et s'arrte ds que les chanes diffrente ou la fin de la chane a, elle renvoie alors le nombre de caractre en commun si les chanes concident jusqu' la fin de a et 0 sinon.

A. NAANAA

14

Les scripts shell


Un script shell est une liste d'instructions contenues dans un fichier: #!bin/bash #ceci est un commentaire echo "premier script"

Pour pouvoir excuter ces instructions, il faut que:


La premire ligne doit contenir!#/bin/bash Le fichier doit tre excutable (chmod +x)

Rq: Si toutes ces conditions ne sont pas remplies, il est toujours possible de forcer l'excution du script avec la commande bash, sh... $sh mon_script
A. NAANAA

15

Les scripts shell


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...$9. 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.

#!bin/sh echo"monscriptest$0" echo"ilya$#paramtresenentre" echo"lepremierparamtreest$1"

A. NAANAA

16

Les scripts shell (les boucles)


Test if
if <condition> then <commande1> <commande2> ... else <commande1> fi Exemple1: #!/bin/sh if test -f monfichier.txt then echo " le fichier existe " fi Exemple2: #!/bin/sh if test $# -eq 0 then echo " aucun paramtre ! " fi
A. NAANAA

17

Les scripts shell (les boucles)


Test case
Ce test permet de spcifier les commandes excuter pour chacune des valeurs prises par la variable passe en argument
case <variable> in valeur1) commande1 ;; valeur2) commande2 ;; valeur3) commande3 ;; ... esac Exemple: pour tester la valeur du premier paramtre #!/bin/sh case $1 in 1) echo " un ";; 2) echo " deux ";; 3) echo " trois ";; esac
A. NAANAA

18

Les scripts shell (les boucles)


Boucle for
Cette boucle sert pour rpter les traitements un nombre de fois connu
for <variable> in <liste> do commande1 commande2 ... done Exemple 1: pour afficher les jours de la semaine #!/bin/sh for jour in lundi mardi mercredi jeudi vendredi samedi dimanche do echo $jour done Exemple 2: pour afficher les noms des utilisateurs #!/bin/sh for i in `cat /etc/passwd | cut -d: -f1` do A. NAANAA echo $i done

19

Les scripts shell (les boucles)


Boucle while
Cette boucle sert pour rpter les traitements un nombre de fois inconnu a priori. Le test de continuit se fait au dbut de la boucle. La boucle continue tant que la condition est vraie.
while <condition> do <commande1> <commande2> ... Done

Pour faire le test de lecture dune valeur jusqu ce que lutilisateur entre la valeur 1 :
Exemple 1: #!/bin/sh i=0 while [ $i -ne "1" ] do read i done
A. NAANAA

20

Les scripts shell (les boucles)


Boucle while
Exemple 2: #!/bin/sh while echoe"votrechane\c" readnom testz"$nom" do echo"pasdesaisie" done echo"vousavezsaisi:$nom"

A. NAANAA

21

Exercices
Exercice 1: Afficher une table de multiplication #!/bin/sh foriin123456789 expr$i\*$1 done Exercice 2: Compter jusqu' 100 #!/bin/bash i=0 while[$ine100]do i=`expr$i+1` echo$i done

A. NAANAA

22

You might also like