Vous êtes sur la page 1sur 27

Introduction

Variables
Instructions

Création de scripts
Jean-Baptiste Vioix
(jb.vioix@free.fr)
LE2I - ENESAD

http://jb.vioix.free.fr 1-27
Introduction
Variables
Instructions

Introduction à la création de script

Diverses opérations nécessitent de nombreuses commandes


répétitives.
Pour éviter une saisie fastidieuse, on les regroupe dans des
fichiers qui seront interprétés par le shell.
Ces scripts peuvent accepter des paramètres lors du lancement
afin de modifier le résultat.
Les scripts sont des fichiers textes qui peuvent être éxécutés.
La première ligne contient #!/bin/bash pour indiquer que
l’interpréteur est bash.
Les commentaires sont précédées de #

http://jb.vioix.free.fr 2-27
Introduction Définitions
Variables Prédéfinies
Instructions Tableaux

Définition et accès

L’utilisateur peut définir des variables à l’aide du symbole =


Pour accéder au contenu d’une variable, on fait précéder son
nom de $
Exemple :
[iqs@pc]$ val=5
[iqs@pc]$ echo val
val
[iqs@pc]$ echo $val
5

Le symbole = est un symbole d’affectation (”On affecte la


valeur 5 à val”).

http://jb.vioix.free.fr 3-27
Introduction Définitions
Variables Prédéfinies
Instructions Tableaux

Variables prédéfinies

Pour faciliter la création de scripts, un certain nombre de


variables sont prédéfinies.
Les paramètres sont référencés par les variables 1, 2, ... (on y
accède avec $1, $2, ...)
La variable * contient la liste des paramètres d’appel (on y
accède avec $*).
La variable # contient le nombre de paramètres d’appel (on y
accède avec $#).
La variable ? (accès $ ?) contient le code de retour de la
dernière commande (0 pour un succès, sinon un autre chiffre).

http://jb.vioix.free.fr 4-27
Introduction Définitions
Variables Prédéfinies
Instructions Tableaux

Tableaux

bash permet de définir des variables de type tableau


On ne peut définir que des tableaux mono-dimensionnels de
chaı̂nes de caractères (mots).
Les éléments sont séparés par des espaces.
Le premier élément a l’indice 0.

http://jb.vioix.free.fr 5-27
Introduction Définitions
Variables Prédéfinies
Instructions Tableaux

Tableaux
Pour remplir un tableau avec une liste de mots, on les encadre
des () . On peut aussi utiliser le résultat d’une commande.
TabMots=(une liste de mots)
TabLs= (‘ls‘)
Pour accéder au contenu d’une case, on doit utiliser $ comme
pour une variable, mais il doit être protégé par { } .
[iqs@pc]$ echo ${TabMots[1]}
liste
L’ensemble des éléments est désigné par * :
[iqs@pc]$ echo ${TabMots[*]}
une liste de mots
Le nombre d’éléments est accessible avec # :
[iqs@pc]$ echo ${#TabMots[*]}
4
http://jb.vioix.free.fr 6-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Calculs d’expression

Des opérations arithmétiques peuvent être effectuées sur les


variables.
On utilise la commande expr.

[iqs@pc]$ expr 1 + 2
3

Les opérations possibles sont :


Addition et soustraction : $a + $b et $a - $b
Produit : $a \* $b
Quotient : $a / $b
Modulo : $a % $b

http://jb.vioix.free.fr 7-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Tests

La commande test permet d’effectuer des tests booléen sur


des variables.
La syntaxe est la suivante test expression ou
[ expression ] , test renvoie 0 si le résultat est vrai, 1
sinon.

http://jb.vioix.free.fr 8-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Tests sur les valeurs entières

Les principaux tests sur des valeurs entières sont :


a -eq b retourne vrai si a=b.
a -ne b retourne vrai si a6=b.
a -ge b retourne vrai si a≥b.
a -gt b retourne vrai si a>b.
a -le b retourne vrai si a≤b.
a -lt b retourne vrai si a<b.

http://jb.vioix.free.fr 9-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Tests sur les chaı̂nes de caractères

Les principaux tests sur des chaı̂nes de caractères sont :


str1 = str2 retourne vrai si str1 et str2 sont identiques.
str1 != str2 retourne vrai si str1 est différente de str2.
str retourne vrai si str n’est pas nulle.
-n str retourne vrai si la longueur de str est supérieure à zéro.
-z str retourne vrai si la longueur de str est égale à zéro.

http://jb.vioix.free.fr 10-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Tests sur les fichiers

Les principaux tests sur les fichiers sont :


-d fic retourne vrai si fic est un répertoire.
-f fic retourne vrai si fic est un fichier.
-r fic retourne vrai si fic peut être lu.
-w fic retourne vrai si fic peut être écrit.
-x fic retourne vrai si fic peut être exécuté.
-s fic retourne vrai si la taille de fic est non nulle.

http://jb.vioix.free.fr 11-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Alternatives simples

L’alternative la plus simple est de la forme : ”si...alors...sinon”


La syntaxe est la suivante :
if <ListeDeCommandes1>; then
<ListeDeCommandes2>
else
<ListeDeCommandes3>
fi

La <ListeDeCommandes2> est exécutée si


<ListeDeCommandes1> (souvent un test) renvoie 0, sinon
c’est la <ListeDeCommandes3> qui est exécutée.

http://jb.vioix.free.fr 12-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Alternatives simples

Une commande UNIX réussie renvoie 0 ; si elle échoue, elle


renvoie 1.
On peut omettre la seconde partie de l’alternative.
On peut quitter un script à l’aide de la commande exit <n>,
où <n> est un chiffre.
Généralement, on suit les conventions ci-dessus.

http://jb.vioix.free.fr 13-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Alternatives simples

Plusieurs alternatives peuvent être groupées :


if <ListeDeCommandes1>; then
<ListeDeCommandes2>
else if <ListeDeCommandes3>; then
<ListeDeCommandes4>
else if <ListeDeCommandes5>; then
<ListeDeCommandes6>
...
fi
fi
fi

http://jb.vioix.free.fr 14-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Alternatives simples

Cette notation se simplifie à l’aide de la syntaxe suivante :


if <ListeDeCommandes1>; then
<ListeDeCommandes2>
elif <ListeDeCommandes3>; then
<ListeDeCommandes4>
elif <ListeDeCommandes5>; then
<ListeDeCommandes6>
fi

http://jb.vioix.free.fr 15-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Choix multiples
Lorsque le choix correspond à plusieurs alternatives,
l’instruction case permet de créer des choix d’une manière
plus simple que la structure précédente.
case <str> in

<str1>))
<ListeDeCommandes1>;;
<str2>))
<ListeDeCommandes2>;;
...
*))
<ListeDeCommandesD>;;
esac

http://jb.vioix.free.fr 16-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Choix multiples

Si la chaine <str> correspond à la chaine <str1>, on exécute


la <ListeDeCommandes1>.
Si la chaine <str> correspond à la chaine <str2>, on exécute
la <ListeDeCommandes2>, etc...
Dans les autres cas, la <ListeDeCommandesD> est exécuté.
Les chaines <str1>... peuvent être des expressions régulières.

http://jb.vioix.free.fr 17-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Exemples

Teste si la variable val (qui vaut 10) est supérieure à 5.

#!/bin/bash
val=10
if [ $val -ge 5 ]; then
echo "Valeur supérieure à 5"
else
echo "Valeur inférieure à 5"
fi

Usage : test ou ./test

http://jb.vioix.free.fr 18-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Exemples

Teste si la variable passée en paramètre est supérieure à 5.


#!/bin/bash
if [ $1 -ge 5 ]; then
echo "Valeur supérieure à 5"
else
echo "Valeur inférieure à 5"
fi

Usage : test 5 ou ./test 5

http://jb.vioix.free.fr 19-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Exemples

Teste si la variable passée en paramètre existe et si elle est


supérieure à 5.

#!/bin/bash
if [ $# -ne 1 ]; then
echo "usage : $0 valeur "; exit 1;
fi
if [ $1 -ge 5 ]; then
echo "Valeur supérieure à 5"
else
echo "Valeur inférieure à 5"
fi

http://jb.vioix.free.fr 20-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Instructions itératives

Le langage de script permet de répéter un bloc d’instructions.


Les instructions sont comprises entre les instructions do et
done.
Deux cas se présentent : le nombre de répétitions est fixé
avant l’exécution OU le nombre de répétitions est fixé par une
condition (d’arrêt ou de répétition).

http://jb.vioix.free.fr 21-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Instructions itératives

L’instruction for permet de répéter le bloc d’instruction pour


un nombre fini d’éléments :
for <variable> in <list>
do
<instructions>
done

La liste peut avoir différentes syntaxes :


Liste exhaustive : 1 2 3 4 5
Variable, par exemple pour tous les arguments : $*
Tableau : ${tab[*]}
Résultats d’une commande : ‘ls‘

http://jb.vioix.free.fr 22-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Instructions itératives
Deux fonctions permettent de construire des boucles non
bornées.
La fonction while permet de répéter un bloc d’instruction
tant que le test est VRAI :
while <test>
do
<instructions>
done
La fonction until permet de répéter un bloc d’instruction
jusqu’à ce que le test soit VRAI :
until <test>
do
<instructions>
done
http://jb.vioix.free.fr 23-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Exemples

Décompte de 9 à 0 avec une boucle for

#!/bin/bash
for val in 9 8 7 6 5 4 3 2 1 0
do
echo $val
done

http://jb.vioix.free.fr 24-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Exemples

Décompte de 9 à 0 avec une boucle while

#!/bin/bash
val=10
while [ $val -ne 0 ]
do
val=‘expr $val - 1‘
echo $val
done

http://jb.vioix.free.fr 25-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Exemples

Décompte de 9 à 0 avec une boucle until

#!/bin/bash
val=10
until [ $val -eq 0 ]
do
val=‘expr $val - 1‘
echo $val
done

http://jb.vioix.free.fr 26-27
Introduction Calculs d’expression
Variables Instructions conditionnelles
Instructions Instructions itératives

Récursivité

Un script shell peut s’appeler lui-même.


Comme pour tous les appels récursifs, on doit veiller à prévoir
une condition d’arrêt de la récursivité.

http://jb.vioix.free.fr 27-27