Vous êtes sur la page 1sur 29

Unix/Linux V

1re anne DUT


Universit de Marne La valle

Des scripts Shell

premier script

Les variables en shell


Dclaration
Saisie
Oprations mathmatiques
Les variables denvironnements
Les variables des paramtres

Conditionnelles
If
If then else
Sinon si

Les tests

Les Boucles
while : boucler "tant que"
for : boucler sur une liste de valeurs

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

la programmation shell. De quoi sagit-il ?


Imaginez un mini-langage de programmation intgr Linux.
Ce nest pas un langage aussi complet que peuvent ltre le C, le
C++ ou le Java par exemple, mais cela permet dautomatiser la
plupart de vos tches. Voici un aperu de ce quon peut faire
avec :
Sauvegarde de vos donnes
Surveillance de la charge de votre machine
Systme de gestion personnalis de vos tlchargements
...etc

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Pourquoi pas le C ?
Le gros avantage des scripts shell, cest quils sont
totalement intgrs Linux : il ny a rien installer et rien
compiler. Et surtout : vous avez trs peu de nouvelles choses
apprendre. En effet, toutes les commandes que lon utilise dans
les scripts shells sont des commandes du systme que vous
connaissez dj : ls, cut, grep, sort

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

shell: Un interprteur de commandes


Les fonctionnalits offertes par linvite de commande peuvent
varier en fonction du shell que lon utilise.
Les principaux sont
sh : Bourne Shell. Lanctre de tous les shells.
bash : Bourne Again Shell. Une amlioration du Bourne
Shell, disponible par dfaut sous Linux et Mac OS X.
ksh : Korn Shell. Un shell puissant prsent sur les Unix
propritaires, mais aussi disponible en version libre,
compatible avec bash.
csh : C Shell. Un shell utilisant une syntaxe proche du C.
tcsh : Tenex C Shell. Amlioration du C Shell.
zsh : Z Shell. Shell assez rcent reprenant les meilleures
ides de bash, ksh et tcsh.
1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

A quoi sert un shell


Shell : programme qui gre linvite de commandes. Cest donc
le programme qui attend que vous rentriez des commandes :
Se souvenir quelles taient les dernires commandes tapes
Auto-compltion dune commande ou dun nom de fichier
lorsque vous appuyez sur Tab
Grer les processus (envoi en arrire-plan, mise en pause
avec Ctrl + Z ...).
Rediriger et chaner les commandes (les fameux symboles
>, <, | ...)

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Avec quel shell crire nos scripts alors ? bash


On le trouve par dfaut sous Linux et Mac OS X (cela
couvre assez de monde !).
Il rend lcriture de scripts plus simple que sh.
Il est plus rpandu que ksh et zsh sous Linux.
En clair, le bash est un bon compromis entre sh (le plus
compatible) et ksh/zsh (plus puissants).

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Commenons par crer un nouveau fichier pour notre


script : gedit essai.sh fichier vide
La premire chose faire dans un script shell est
dindiquer... quel shell est utilis : Rajouter dans essai.sh
la ligne
# !/bin/bash
le #! est appel le sha-bang
Aprs le sha-bang, nous pouvons commencer coder.
Le principe : Ecrire les commandes que vous souhaitez
excuter. Ce sont les mmes que celles que vous tapiez dans
linvite de commandes !
Exple :
# !/bin/bash
ls
1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Donner les droits dexec au script


chmod +x essai.sh
Excuter le script, en tapant ./ devant le nom du script
./essai.sh
Que fait le script ? Il fait juste un ls, donc il affiche la liste des
fichiers dans le rpertoire.
On peut vouloir prciser en plus le rep courant :
# !/bin/bash
pwd
ls

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Crer sa propre commande :


Actuellement, le script doit tre lanc via ./essai.sh et vous
devez tre dans le bon rpertoire.
Comment font les autres programmes pour pouvoir tre
excuts depuis nimporte quel rpertoire sans ./ devant ? Ils
sont placs dans un des rep. du PATH.
Def : Le PATH est une variable systme qui indique o sont les
programmes exec. Si vous tapez echo $PATH , vous aurez la
liste de ces rep. dplacer ou copier le script dans un de ces
rep, (/bin, ou /usr/bin, ou /usr/local/bin).
Rq : Il faut tre root pour pouvoir faire a.

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Dclaration
Saisie
Oprations mathmatiques
Les variables denvironnements
Les variables des paramtres

Comme dans tous les langages de programmation, on trouve en


bash ce quon appelle des variables.
stocker temporairement des informations en mmoire. Cest
en fait la base de la programmation.
Les variables en bash sont particulires. Il faut tre trs
rigoureux lorsquon les utilise diffrent du C

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Dclaration
Saisie
Oprations mathmatiques
Les variables denvironnements
Les variables des paramtres

Variables :
Un nom
Une valeur
Exple
message=Bonjour tout le monde
Rq :Pas despace autour de "="
Executons ! ! ! ./var.sh

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Dclaration
Saisie
Oprations mathmatiques
Les variables denvironnements
Les variables des paramtres

echo : afficher une variable


Exple
echo "Salut tout le monde"
echo -e "Message\n Autre ligne"
./varaffich.sh

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Dclaration
Saisie
Oprations mathmatiques
Les variables denvironnements
Les variables des paramtres

Les quotes
Les apostrophes (simples quotes)
./simplequote.sh
Les guillemets " " (doubles quotes)
./doublequote.sh
Les accents graves (back quotes)
./backquote.sh

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Dclaration
Saisie
Oprations mathmatiques
Les variables denvironnements
Les variables des paramtres

read
Demander au user de saisir du texte avec la commande read. La
faon la plus simple de lutiliser est dindiquer le nom de la
variable dans laquelle le message saisi sera stock :
./read1.sh
La commande read propose plusieurs options intressantes.
-p : afficher un message de prompt ./readp.sh
-n : limiter le nombre de caractres ./readn.sh
-s : ne pas afficher le texte saisi ./reads.sh

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Dclaration
Saisie
Oprations mathmatiques
Les variables denvironnements
Les variables des paramtres

En bash, les var. sont toutes des chanes de caractres


Incapable de manipuler des nombres pas oprations ! !
la commande let
./calcul1.sh
Les oprations :
Laddition : +
La soustraction :
La multiplication :
La division : /
La puissance :
Le modulo : %
1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Dclaration
Saisie
Oprations mathmatiques
Les variables denvironnements
Les variables des paramtres

Les var. que cres dans scripts bash nexistent que dans ces
scripts. ie. une variable dfinie dans un pgme A ne sera pas
utilisable dans un pgme B.
Les var. denvironnement :var. utilisables nimporte quel pgme.
On parle aussi parfois de var. globales. Afficher toutes celles
actuellement en mmoire avec la commande env.
Quelques variables denvironnement
SHELL : type de shell est en cours dutilisation (sh, bash,
ksh...)
PATH : une liste rep qui contiennent des exec que vous
souhaitez pouvoir lancer sans indiquer leur rep.
EDITOR :Editeur de txt par dfaut
HOME : position du dossier home
PWD : Dossier courant
Rq : En majuscule
1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Dclaration
Saisie
Oprations mathmatiques
Les variables denvironnements
Les variables des paramtres

Les scripts bash acceptent des paramtres


./varparam.sh param1 param2 param3
$# : contient le nombre de param.
$0 : contient le nom du script excut (ici
"./varparam.sh")
$1 : contient 1r param.

$9 : contient 9m param.

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

If
If then else
Sinon si

Syntaxe
if [ test ]
then
echo "true"
fi
Rq : lespace dans [ test ]
./if1.sh

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

If
If then else
Sinon si

Syntaxe
if [ test ]
then
echo "true"
else
echo "false"
fi
./if2.sh param1

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

If
If then else
Sinon si

Syntaxe
if [
then
echo
elif
echo
elif
echo
else
echo
fi

test ]
"premier test a t verif"
[ autre_test ]
"second test a t verif"
[ encore_autre_test ]
"troisime test a t verif"
"Aucun des tests prec. na t vrifi"

./if3.sh param1
1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Test sur les chanes de car.


Test sur les nombres
Test sur les fichiers

3 types de tests diffrents en bash :


1

Tests sur des chanes de caractres

Tests sur des nombres

Tests sur des fichiers

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Test sur les chanes de car.


Test sur les nombres
Test sur les fichiers

$chaine1 = $chaine2
teste si 2 chanes sont identiques. B 6= b (sensible la
casse...)
$chaine1 != $chaine2
Teste si 2 chanes sont 6=
-z$chaine
Teste si 1 chanes est vide
-n$chaine
Teste si 1 chanes est non vide
./test1.sh param1 param2
Exo :Ecrire un script qui teste lexistence dun paramtre
1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Test sur les chanes de car.


Test sur les nombres
Test sur les fichiers

$num1 -eq $num2 Teste si les nombres sont gaux(equal)


"=" compare les caractres.
$num1 -ne $num2 Teste si les nombres sont diff(non equal)
" !=" compare les caractres.
$num1 -lt $num2 Teste si num1 est < num2 (lower than)
$num1 -le $num2 Teste si num1 est <= num2 (lower or
equal)
$num1 -gt $num2 Teste si num1 est > num2 (greater than)
$num1 -ge $num2 Teste si num1 est >= num2 (greater or
equal)
./test2.sh param1

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Test sur les chanes de car.


Test sur les nombres
Test sur les fichiers

-e $nomfich Teste si le fich. existe


-d $nomfich Teste si le fich. est un rep.
-f $nomfich Teste si le fich. est un... fich. Un vrai fich. pas
un dossier.
-L $nomfich Teste si fich est un lien symbolique
-r $nomfich Teste si fich est lisible (r)
$fich1 -nt $fich2 Teste si fich1 est plus rcent que fich2
(newer than) | $fich1 -ot $fich2 (older than)
EXO Ecrire un script qui demande au user de rentrer le nom
dun rep et de verifier si cest bien un rep

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

Test sur les chanes de car.


Test sur les nombres
Test sur les fichiers

Effectuer plusieurs tests la fois


Dans un if, il est possible de faire plusieurs tests la fois.
Si un test est vrai ET quun autre test est vrai : &&
Si un test est vrai OU quun autre test est vrai :||
Rq :encadrer chaque condition par des crochets
EXO Ecrire un script qui vrifie quil a au moins un param et la
valeur du 1r param est asticot

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

while : boucler "tant que"


for : boucler sur une liste de valeurs

Syntaxe
while [ test ]
do
echo Action en boucle
done

while [ test ]; do
echo Action en
boucle done

./while1.sh

1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

while : boucler "tant que"


for : boucler sur une liste de valeurs

La boucle for permet de parcourir une liste de valeurs, et de


boucler autant de fois quil y a de valeurs.
Syntaxe
for variable in valeur1 valeur2 valeur3
do
echo "La variable vaut $variable"
done
./for1.sh
Rq : La liste des valeurs na pas besoin dtre dfinie
directement dans le code :
./for2.sh
EXO : Script qui renomme tous les fichiers trouvs
1re anne DUT

Unix/Linux V

Des scripts Shell


premier script
Les variables en shell
Conditionnelles
Les tests
Les Boucles

while : boucler "tant que"


for : boucler sur une liste de valeurs

Un cas plus classique du for


for i in seq 1 10;
do
echo $i
done
./for3.sh
Pour faire des sauts de 2 faire for i in seq 1 2 10;

1re anne DUT

Unix/Linux V