Académique Documents
Professionnel Documents
Culture Documents
Mohamed CHERRADI
Ingénieur d’Etat en Informatique
Email: mcherradi.ensah@gmail.com
Programmation Shell
Plan
3
1. Introduction
2. Qu’est-ce que le shell ?
3. Qu'est-ce qu'un script shell ?
4. Structure script shell.
5. Exécution d'un script
6. Les variables
7. La commande d’entrées-sorties read
8. La commande readonly
9. Arguments ligne de commande
10. Structures de contrôle conditionnelles & repetitive
11. Les Tableaux
12. Les fonctions
Introduction
4
Shebang
Le script débute généralement par l'indication de son interpréteur
écrite sur la première ligne : Shebang.
Le shebang, représenté par #!, est un en-tête d'un fichier texte qui
indique au système d'exploitation que ce fichier n'est pas un fichier
binaire mais un script.
Cette ligne précise l'interpréteur permettant d'exécuter ce script.
#! /bin/bash
Pour utiliser par exemple tcsh, alors il faut écrire :
#! /bin/tcsh
Structure script shell
9
Commentaires
Les lignes commençant avec un # (à l'exception de #!) sont des
commentaires et ne seront pas exécutées.
La commande echo
La commande echo permet d'afficher l'expression donnée en
paramètre. Cette dernière peut être :
Soit une variable
Soit une chaîne
Soit une expression composée de chaines et de variables.
Exemples:
echo "Bonjour... "
echo "Comment allez-vous ?"
Structure script shell
11
La commande echo
l'option -n empêche le passage à la ligne
Exemple:
echo -n "Nous sommes le " ; date
// le ; sert de séparateur des commandes sur la ligne
La séquence de caractères \t permet d'insérer une tabulation. Pour que cette dernière soit
reconnue, il est nécessaire d'utiliser l'option -e.
Exemple:
echo -e "\t une tabulation avec echo"
Il est possible d'insérer une nouvelle ligne avec la séquence de caractères \n. Pour que la cette
séquence soit reconnue, utilisez l'option -e
Exemple:
echo -e "ligne 0 \n ligne 1 \n ligne 2"
Structure script shell
12
Exemple:
script0.sh
Exécution d'un script
13
L'addition : +
La soustraction : −
La multiplication : ∗
La division : /
La puissance : ∗∗
Le modulo : %
Les variables
18
la liste des répertoires dans lequel aller chercher les exécutables des
Les quotes
Les apostrophes ‘: une chaîne de caractères mise entre simple quotes ne sera pas
interprétée par le shell
Les guillemets " : seuls les métacaractères ($) sont interprétés, les autres ne seront
pas interprétés.
Les accents graves `: un texte entre quotes inversés est considéré comme une
commande à exécuter.
Exemples :
echo ‘ceci est une chaine de caractères non interprétée‘
echo "pwd"
echo " Le répertoire courant de l'utilisateur $user est `pwd` "
Les variables
22
Exemple :
CONTENU=$(ls)
ou
CONTENU=`ls`
La commande d’entrées-sorties read
23
L'instruction read permet de créer des scripts interactifs, read lit une
ligne en provenance de l'entrée standard (par défaut le clavier) et
alimente à partir de cette dernière des variables. read attend que
l‟utilisateur entre une valeur.
Syntaxe: read nom_variable1 nom_variable2 …
Exemple d’un script shell utilisant read:
#! /bin/bash
echo "Salut... Entrer une valeur svp"
read valeur
echo "Merci, la valeur que vous avez tapé est: $valeur"
La commande d’entrées-sorties read
24
Les options
L'option -t timeout permet d'indiquer un délai maximum
d’attente avant que read ne retourne une erreur.
Exemple:
#! /bin/sh
echo "entrer une valeur:"
read -t 5 valeur
La commande d’entrées-sorties read
25
Les options
-n nchars: Cette option indique à read le nombre de caractères à
lire.
Exemple:
#!/bin/bash
echo "entrer une valeur:"
read -n 10 valeur
La commande readonly
26
Les paramètres formels (arguments) d'un script sont $1 $2 $3... ce sont des paramètres
positionnels
$1 : contient 1er param.
···
$9 : contient 9éme param
Lesparamètres d’une ligne de commande
28
Exemple:
#! /bin/bash
# affiche_param.sh
echo "Le 1er paramètre est : $1"
echo "Le 3ème paramètre est : $3"
echo "Le 10ème paramètre est : ${10} "
echo "Le 15ème paramètre est : ${15} "
Il suffit alors d'invoquer le script en lui passant un certain nombre de paramètres :
./affiche_param.sh un 2 trois 4 5 6 7 8 9 dix 11 12 13 14 quinze 16 17
Le 1er paramètre est : un
Le 3ème paramètre est : trois
Le 10ème paramètre est : dix
Le 15ème paramètre est : quinze
Structures de contrôle conditionnelles
29
Opérateurs de comparaison
3 types de tests différents en bash :
Opérateurs de comparaison
if [ $a -eq $b ] teste l'égalité des entiers contenues dans les variables $a et $b. Si tel
est le cas, renvoie vrai et faux sinon.
if [ $a -ne $b ] teste si les deux opérandes entiers sont différents
if [ $a -lt $b ] teste si $a est strictement plus petit que $b (ce sont des entiers) (-le pour
inferieur ou egal).
if [ $a -ge $b ] teste si $a est supérieur ou égal á $b (ce sont des entiers) (-gt
pour strictement supérieur ) .
if [ $a = $b ] teste si les deux opérandes chaînes de caractères sont égaux
if [ $a != $b ] teste si les deux opérandes chaînes de caractères sont différents .
if [ -n $a ] teste si la chaîne $a n‟est vide.
if [ -z $a ] teste si chaîne $a est vide
if [ -e $HOME/fich] teste si le fichier $HOME/fich existe
if [ -L truc ] teste si truc est un lien symbolique
Structures de contrôle conditionnelles
33
Opérateurs de comparaison
if [ -f fich ] teste si fich est un fichier régulier
if [ -d dir ] teste si dir est un répertoire
if [ -r fich] Teste si fich est accessible en lecture.
if [ -w fich] Teste si fich est accessible en écriture.
if [ -x fich] Teste si fich est accessible en exécution.
if [ -s fich] Teste si fich est non vide
if [$fich1 -nt $fich2] Teste si fich1 est plus récent que fich2.($fich1 -ot $fich2 (older
than))
Structures de contrôle conditionnelles
34
Exemple1: Exemple2:
#! /bin/bash #! /bin/bash
read x read x
if [ $x-eq 5 ] || [ $x-eq 4 ] if [ $x -lt 127 ] && [ $x -gt 0 ]
then then
echo ok echo "La variable x est comprise
fi entre 0 et 127"
fi
Structures de contrôle conditionnelles
37
Syntaxe:
case chaine in
motif_1) instruction1;;
motif_2) instruction2;;
...
motif_k) instructionk;;
esac
Structures de contrôle conditionnelles
38
Syntaxe:
for variable in ‟valeur1‟ ‟valeur2‟ ‟valeur3‟
do
echo "La variable vaut $variable"
done
Structures de contrôle conditionnelles
40
Initialisation du tableau
Chaque case (ou valeur) présente dans un tableau sera initialisée de
la façon suivante : nom_tableau[Numéro]=valeur
tab[0]="bonjour";
// Mettre la valeur "bonjour" dans la case numéro "0" (la première) du tableau "tab«
Tableaux
45
Créer un tableau
Quatre méthodes pour créer un tableau:
La création d'un tableau indicé peut se faire simplement par
initialisation, en fournissant ses éléments entre parenthèses :
tableau_indi=( "un" "deux" "trois" "quatre" )
Créer un tableau
Avec la commande declare et l'option -a
Avec la commande read :les valeurs sont données via le terminal par
l'utilisateur.
read -a nom-tableau
Tableaux
47
Lecture simple
Pour lire les valeurs et les différentes cases d'un tableau, il nous faut
faire de la même manière que pour une variable simple mais en
spécifiant le numéro de la case voulue, comme suivant : ${tab[indice]}
exemple : echo ${tab[1]}
Tous les éléments d'un tableau sont accessibles avec la syntaxe :
${tab[*]}
Le nombre d'éléments d'un tableau est accessible par la syntaxe :
${#nomtableau[*]}.
Il est possible de récupérer le numéro des cases qui ont été utilisées
dans un tableau avec la syntaxe :${!nom-tableau[*]}
Tableaux
48
Exemple:
#!/bin/bash for mot in ${tableau[*]}
array=([2]=nom1 nom2 [6]=nom3) #1
do
for mot in ${array[*]}
do echo $mot;
echo $mot; done
done
tb=(nom1 nom2 nom3)
for mot in ${tb[*]}
do
echo $mot;
done
declare -a tab=(nom1 nom2 nom3)
for mot in ${tab[*]}
do
echo $mot;
done
read -a tableau
Les Fonctions
50
Déclaration:
Pour déclarer une fonction, on utilise la syntaxe suivante:
maFonction() {
instructions
}
Appel et paramètres:
Pour appeler une fonction, on utilise la syntaxe suivante:
maFonction param_1 param_2 ... param_n
return :
la commande qui permet de retourner le code d'erreur d'une fonction
dans un script (une valeur entre 0 et 255). Cette commande met fin à
l'exécution de la fonction.
Exemple:
#! /bin/bash
Function fonct() {
if [ -e $1 ]
then
./exempleFonct.sh
echo "le fichier existe"
return 0
else
return 1
fi
}
fonct fich1