0% ont trouvé ce document utile (0 vote)
60 vues18 pages

Introduction à la Programmation Shell Linux

Ce document présente une introduction à la programmation Shell sous Linux, en expliquant son utilité pour automatiser des tâches courantes. Il décrit les différents types de shells disponibles, notamment sh et bash, et fournit des instructions sur l'écriture et l'exécution de scripts shell. Le document souligne l'importance du sha-bang pour spécifier le shell utilisé dans un script et donne des exemples pratiques de création et d'exécution de scripts simples.

Transféré par

mouadsajim03
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
60 vues18 pages

Introduction à la Programmation Shell Linux

Ce document présente une introduction à la programmation Shell sous Linux, en expliquant son utilité pour automatiser des tâches courantes. Il décrit les différents types de shells disponibles, notamment sh et bash, et fournit des instructions sur l'écriture et l'exécution de scripts shell. Le document souligne l'importance du sha-bang pour spécifier le shell utilisé dans un script et donne des exemples pratiques de création et d'exécution de scripts simples.

Transféré par

mouadsajim03
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université cadi Ayyad Année scolaire

2009/2010
Faculté des Sciences et techniques Génie informatique -
IRISI
Marrakech Systèmes
d’exploitations

I à L
P S

M. BOUDGUIG
F.S.T.G Marrakech
[email protected]

Page 1 Mohammed Boudguig

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Introduction
Il s'agit en fait d’un mini-langage de programmation intégré
é é à Linux. Ce n'est pas un
langage aussi complet que peuvent l'être le C, le C++ ou le Java par exemple, mais cela
permet d'automatiser la plupart de vos tâches.
Voici un aperçu de ce qu'on peut faire avec :
* Sauvegarde de vos données
* Surveillance de la charge de votre machine
* Système de gestion personnalisé de vos téléchargements
etc.

On aurait très bien pu faire tout cela en écrivant un programme en C par exemple.
Le gros avantage des scripts shell, c'est que ce langage est totalement intégré à Linux :
il n'y a rien à installer et rien à compiler. Et surtout : vous avez très peu de nouvelles
choses à apprendre. En effet, toutes les commandes que l'on utilise dans les scripts shells
sont des commandes du système que vous connaissez déjà : ls, cut, grep, sort...
2
[email protected]

1
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Différents environnements console:les shell
La différence est moins tape-à-l'oeil que dans le mode graphique (où on voit de suite que
les menus ne sont pas à la même place par exemple).
La console a toujours un fond noir et un texte blanc (au moins au départ).
En revanche, les fonctionnalités offertes par l'invité de commande peuvent varier en
fonction du shell que l'on utilise.
Les différents environnements console sont appelés des shellshell.
Voici les noms de quelques-uns des principaux shell qui existent :
sh : Bourne Shell. L'ancêtre de tous les shells.
bash : Bourne Again Shell.
Shell Une amélioration du Bourne Shell
Shell, disponible par défaut sous
Linux et Mac OS X.
ksh : Korn Shell. Un shell puissant assez présent sur les Unix propriétaires, mais aussi
disponible en version libre, compatible avec bash.
csh : C Shell. Un shell utilisant une syntaxe proche du langage C.
tcsh : Tenex C Shell. Amélioration du C Shell.
Zsh : Z Shell. Shell assez récent reprenant les meilleures idées de bash, ksh et tcsh.
3
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Différents environnements console:les shell
Il y en a quelques autres mais vous avez là les principaux.
Que faut-il savoir ? Tout d'abord que l'ancêtre de tous les shell
est le sh (Bourne
Bourne Shell).
Shell
C'est le plus vieux. Il est installé sur tous les OS basés sur Unix.
Il est néanmoins pauvre en fonctionnalités par rapport aux autres
shells.
Le bash (Bourne Again Shell) est le shell par défaut de la plupart
des distributions Linux,mais aussi celui du terminal de Mac OS X.
Il y a fort à tenter que cc'est
est celui que vous utilisez en ce moment
sous Linux.
Le bash est une amélioration du sh.
Voici dans les grandes lignes comment ont évolué les shells.
Chacun hérite de la plupart des fonctionnalités de son ancêtre :

4
[email protected]

2
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Différents environnements console:les shell
A quoi peut bien servir le sh aujourd'hui alors,si bash est par défaut sous Linux?
Sh reste toujours plus répandu que bash. En fait, vous pouvez être sûr que tous
les OS basés sur Unix possèdent sh, mais ils n'ont pas tous forcément bash.
D'autres OS basés sur Unix, notamment les OS propriétaires (AIX et Solaris...),
utilisent souvent d'autres types de shell. Le ksh par exemple y est très répandu.
A quoi sert un shell ?
Le shell est en fait le programme qui gère l'invite de commandes. C'est donc le programme
qui attend que
q q vous rentriez des commandes.
C'est aussi le programme qui est capable par exemple de :
- Se souvenir quelles étaient les dernières commandes tapées (vous remontez dans votre
historique en appuyant sur la flèche vers le haut ou en faisant une recherche avec un
Ctrl + R).
- Auto-compléter une commande ou un nom de fichier lorsque vous appuyez sur Tab.

5
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
A quoi sert un shell ?
- Gérer les processus (envoi en arrière-plan, mise en pause avec Ctrl + Z...).
- Rediriger et chaîner les commandes (les fameux symboles >, <, |...).
- Définir des alias (par exemple ll signifie chez moi ls -lArth).
Bref, le shell fournit toutes les fonctionnalités de base pour pouvoir lancer des commandes.
Souvenez-vous, nous avions modifié un fichier .bashrc dans un des premiers chapitres
(celui où nous avons appris à utiliser nano). Le bashrc est le fichier de configuration du
bash, que Linux vous fait utiliser par défaut. Chaque personne peut avoir son bashrc pour
personnaliser son invite de commande, ses alias, etc.
Installer
I t ll un nouveau shell
h ll
Pour le moment, vous devriez avoir sh et bash installés sur votre système. Si vous voulez
essayer un autre shell comme ksh, vous pouvez le télécharger comme n'importe quel
paquet : ... pour installer ksh par exemple.
samir@samir-desktop:~$ apt-get install ksh
Une fois installé, il faut demander à l'utiliser pour votre samir@samir-desktop:~$ chsh
compte utilisateur.Tapez pour cela :
6
[email protected]

3
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Installer un nouveau shell
Une fois
f installé,
llé ill faut
f demander
d d à l'utiliser
l' l pour votre compte utilisateur.
l
Tapez pour cela : samir@samir-desktop:~$ chsh
chsh signifie "Change Shell".
On vous demandera où se trouve le programme qui gère le shell.
Vous devriez indiquer /bin/ksh pour ksh, /bin/sh pour sh, /bin/bash pour bash, etc.
Quelle importance a tout ceci lorsqu'on réalise un script shell ?
Si on parle de cela, c'est parce qu'un script shell dépend d'un shell précis.
En gros, le langage n'est pas tout à fait le même selon si vous utilisez sh, bash, ksh, etc.
Il est possible d'écrire des scripts sh par exemple. Ceux-là, on est sûr qu'ils fonctionnent
partout car tout le monde possède un shell "sh".
Toutefois, c'est le plus vieux shell, et écrire des scripts en sh est possible mais pas
facile ou ergonomique.

Avec quel shell va-t-on écrire nos scripts alors ?

7
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Installer un nouveau shell
Avec quel shell va-t-on écrire
é nos scripts alors ?
Il est conseillé d'étudier le bash dans ce cours car :
On le trouve par défaut sous Linux et Mac OS X (cela couvre assez de monde !).
Il rend l'écriture de scripts plus simple que sh.
Il est plus répandu que ksh et zsh sous Linux.
En clair, le bash est un bon compromis entre sh (le plus compatible) et
ksh/zsh (plus puissants).
Notre premier script
Nous allons commencer par écrire un premier script bash tout simple.
Il ne sera pas révolutionnaire, mais il va nous permettre de voir les bases de la création
d'un script et comment celui-ci s'exécute. Cela vous sera donc essentiel pour la suite.
Création du fichier
Commençons par créer un nouveau fichier pour notre script.
Le plus simple est d'ouvrir vim en lui donnant le nom du samir@samir-desktop:~$ vim essai.sh
nouveau fichier à créer :
8
[email protected]

4
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
samir@samir-desktop:~$ vim essai.sh
Notre premier script
Si essai.sh n'existe pas, il sera créé (ce qui sera le cas ici).
On a donné ici l'extension ".sh" à mon fichier. On le fait souvent par convention pour
indiquer que c'est un script shell, mais ce n'est pas une obligation.
Certains scripts shell n'ont d'ailleurs pas d'extension du tout (on aurais pu appeler notre
script "essai" tout court donc).
Indiquer le nom du shell utilisé par le script
Vim est maintenant ouvert et vous avez un fichier vide sous les yeux.
La première chose à faire dans un script shell est d'indiquer... quel shell est utilisé.
En effet, comme on l’amentionné plus tôt, la syntaxe du langage change un peu selon si on
utilise "sh", "bash", "ksh", etc.
En ce qui nous concerne, nous souhaitons utiliser la syntaxe de bash qui est le plus
répandu sous Linux et qui est plus complet que sh.
Nous indiquons où se trouve le programme bash :
#!/bin/bash

9
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Indiquer le nom du shell utilisé par le script
#!/bin/bash
Le #! est appelé le sha-bang.
/bin/bash peut être remplacé par /bin/sh si vous souhaitez coder pour sh, /bin/ksh pour
ksh, etc.
Bien que non indispensable, cette ligne permet de s'assurer que le script est bien exécuté
avec le bon shell.
En l'absence de cette ligne, c'est le shell de l'utilisateur qui sera chargé.
Cela pose un problème : si votre script est écrit pour bash et que la personne qui l'exécute
utilise ksh, il y a de fortes chances que le script ne fonctionne pas correctement !
La ligne du sha-bang permet donc de "charger" le bon shell avant l'exécution du script.
Vous devrez la mettre au tout début de chacun de vos scripts à partir de maintenant.

10
[email protected]

5
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Exécution de commandes
#!/bin/bash
Après le sha-bang, nous pouvons commencer à coder.
Le principe est très simple : il vous suffit d'écrire les commandes que vous souhaitez
exécuter. Ce sont les mêmes que celles que vous tapiez dans l'invite de commandes !
ls : pour lister les fichiers du répertoire
cd : pour changer de répertoire
mkdir : pour créer un répertoire
grep : pour rechercher un mot
sort : pour trier des mots
etc.
Bref, tout ce que vous avez appris, vous pouvez le réutiliser ici !
Allez, on va commencer par quelque chose de très simple : un ls.
On va donc créer un script bash qui va juste se contenter d'afficher le contenu du dossier
courant : C’est tout.
#!/bin/bash
ls
11
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Les commentaires
#!/bin/bash
Notez que vous pouvez aussi ajouter des commentaires dans votre script.
Les commentaires sont des lignes qui ne seront pas exécutées mais qui permettent
d'expliquer ce que fait votre script.
Tous les commentaires commencent par un #.
Par exemple :
#!/bin/bash
# Affichage de la liste des fichiers
ls

Exécuter le script bash


Nous avons écrit un petit script sans prétention de 2-3 lignes. Notre mission maintenant est
d'arriver à l'exécuter.
Commencez par enregistrer votre fichier et à fermer votre éditeur (sous Vim, il suffit de
taper ":wq" ou encore ":x").
Vous retrouvez alors l'invite de commandes.
12
[email protected]

6
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Donner les droits d'exécution au script
#!/bin/bash
Si vous faites un ls -l pour voir votre fichier qui vient d'être créé, vous obtenez ça :
samir@samir-desktop:~$ ls –l
total 4
-rw-r--r– 1samir samir 17 2009-12-01 14:33 essai.sh

Ce qui nous intéresse ici, ce sont les droits sur le fichier : -rw-r--r--
Si vous vous souvenez un petit peu de ce cours sur les droits, vous devriez vous rendre
compte que notre script peut être lu par tout le monde (r), écrit uniquement par nous (w),
et n'est p
pas exécutable (pas
(p de x). )
Or, pour exécuter un script, il faut que le fichier ait le droit "exécutable".
Le plus simple pour donner ce droit est d'écrire : samir@samir-desktop:~$ chmod +x essai.sh
Vous pouvez vérifier que le droit a bien été donné :
samir@samir-desktop:~$ ls –l
total 4
-rwxr-xr–x 1samir samir 17 2009-12-01 14:33 essai.sh
13
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
#!/bin/bash
Exécution du script
Le script s'exécute maintenant comme n'importe quel programme, en tapant "./" devant le
nom du script : samir@samir-desktop:~$ ./essai.sh
essai.sh

Que fait le script ? Il fait juste un ls, donc il affiche la liste des fichiers dans le répertoire
(ici, il y avait seulement "essai.sh" dans mon répertoire)
Bien entendu, ce script est inutile. Il était plus simple de taper "ls" directement.
Cependant, on va pouvoir faire beaucoup mieux que ça dans les prochains chapitres.
Vous pouvez déjà modifier votre script pour qu'il vous donne auparavant #!/bin/bash
aussi le nom du répertoire dans lequel vous vous trouvez : pwdd
Les commandes seront exécutées l'une après l'autre : ls
samir@samir-desktop:~$ ./essai.sh
/home/samir/scripts
essai.sh

14
[email protected]

7
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
#!/bin/bash
Exécution de débuggage
Plus tard, vous ferez probablement de gros scripts et vous risquez de rencontrer des bugs.
Il faut donc dès à présent que vous sachiez comment débugger un script.
Il faut l'exécuter comme ceci : samir@samir-desktop:~$ bash -x essai.sh
On appelle en fait directement le programme bash et on lui ajoute en paramètre un -x
(pour lancer le mode débuggage) et le nom de notre script à débugger.
Le shell affiche alors le détail de l'exécution de votre script, ce qui peut vous aider à
retrouver la cause de vos erreurs : samir@samir-desktop:~$ bash -x essai.sh
+ pwd
/h
/home/samir/scripts
/ i/ i t
+ ls
essai.sh
Créer sa propre commande
Actuellement, le script doit être lancé via ./essai.sh et vous devez être dans le bon
répertoire (ou alors vous devez taper le chemin en entier, comme
/home/samir/scripts/essai.sh).
15
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell #!/bin/bash
Créer sa propre commande
Actuellement, le script doit être lancé via ./essai.sh et vous devez être dans le bon
répertoire (ou alors vous devez taper le chemin en entier, comme
/home/samir/scripts/essai.sh).
Comment font les autres programmes pour pouvoir être exécutés depuis n'importe quel
répertoire sans "./" devant ?
Ils sont placés dans un des répertoires du PATH. Le PATH est une variable système qui
indique où sont les programmes exécutables sur votre ordinateur.
Si vous tapez echo $PATH, vous aurez la liste de ces répertoires "spéciaux".
Il vous
ous suffit
su t dodoncc de dép
déplacer
ace ou copier
cop e votre
ot e script
sc pt da
danss u
un de ces répertoires,
épe to es, co
comme
e
/bin, ou /usr/bin, ou /usr/local/bin (ou un autre répertoire du PATH).
Notez qu'il faut être root pour pouvoir faire ça.
Une fois que c'est fait, vous pourrez alors taper simplement essai.sh pour exécuter votre
programme, et ce quel que soit le répertoire dans lequel samir@samir-desktop:~$ essai.sh
vous vous trouvez ! /home/samir/scripts
essai.sh
16
[email protected]

8
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell #!/bin/bash
Afficher et manipuler des variables
Résumons ce que nous savons :
• Le bash est le programme qui gère l'invite de commande de la console sous Linux.
C'est aussi un langage de programmation. On parle de "shell".
• D'autres shells existent, tels sh, ksh, zsh... Bash sera utilisé car c'est le shell par défaut
sous la plupart des distributions Linux.
• Toutes les commandes que vous avez appris à taper dans la console depuis le début du
cours peuvent être utilisées pour réaliser des scripts shell : grep, cut, ls, pwd...
Les scripts shell ne sont donc qu'un assemblage de ces commandes !
Comme dans tous les langages
g g de programmation,
p g , on trouve en bash ce q
qu'on appelle
pp des
variables. Elles nous permettent de stocker temporairement des informations en mémoire.
C'est en fait la base de la programmation.
Les variables en bash sont assez particulières. Il faut être très rigoureux lorsqu'on les
utilise. Si vous avez fait du C ou d'autres langages de programmation, vous allez être un
peu surpris de leur mode de fonctionnement, soyons donc attentif.

17
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Déclarer une variable samir@samir-desktop:~$ vim variables.sh

Nous allons créer un nouveau script que nous appellerons variables.sh :


La première ligne de tous nos scripts doit indiquer quel shell est utilisé, comme nous l'avons
appris tout à l'heure. Commençons donc par écrire : #!/bin/bash
Cela indique que nous allons programmer en bash.
Maintenant, définissons une variable.
Toute variable a un nom et une valeur : message='Bonjour tout le monde'
Dans le cas présent :
La variable a pour nom message
... et pour valeur 'Bonjour
Bonjour tout le monde
monde‘
Si vous voulez insérer une apostrophe dans la valeur de la variable, il faut la faire précéder
d'un antislash \. En effet, comme les apostrophes servent à délimiter le contenu,
on est obligé d'utiliser un caractère d'échappement (comme on les appelle) pour pouvoir
vraiment insérer une apostrophe : message=‘Bonjour c\'est moi’
Bien, reprenons notre script. #!/bin/bash
Il devrait maintenant ressembler à cela : message='Bonjour tout le monde'
18
[email protected]

9
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Déclarer une variable
Exécutez-le pour voir ce qui se passe (après avoir samir@samir-desktop:~$
@ d k $ ./variables.sh
/ bl h
Modifié les droits pour le rendre exécutable bien sûr) : $
Il ne se passe rien !
Qu'est-ce que le script fait alors ?
Il met en mémoire le message Bonjour tout le monde, et c'est tout !
Rien ne s'affiche à l'écran !
Pour afficher une variable, il va falloir utiliser une commande dont on a pas encore parlé...
echo : afficher une variable
Avant de commencer à parler de variables, il y a une commande qu’on va traiter : echo.
Son principe est très simple : elle affiche dans la console le message demandé.
Un exemple : samir@samir-desktop:~$ echo Salut tout le monde
Salut tout le monde
Si vous voulez insérer des retours à la ligne, il faudra $ echo -e "Message\nAutre ligne"
activer le paramètre -e et utiliser le symbole \n : Message
Autre ligne
19
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
1 #!/bin/bash
echo : afficher une variable
2
Pour afficher une variable, on va réutiliser son nom 3 message='Bonjour tout le monde'
précédé du symbole dollar "$" : 4 echo $message

Comparez les lignes 3 et 4 : lorsqu'on déclare la variable à la ligne 3, on ne doit pas mettre
de $ devant. En revanche, lorsqu'on l'affiche à la ligne 4, on doit cette fois mettre un $ !
Cette fois ci après exécution on reçoit : Bonjour tout le monde

Maintenant, supposons que l'on veuille 1 #!/bin/bash


afficher du texte et la variable à la fois. 2
O serait
On it tenté
t té d'é
d'écrire
i : 3 message=
message='Bonjour
Bonjour tout le monde
monde'
4 echo 'Le message est : $message'
Résultat: Le message est : $message

Pour bien comprendre ce qui se passe, intéressons-nous au fonctionnement de ce qu'on


appelle les "quotes".

20
[email protected]

10
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
echo : afficher une variable (Les quotes)
Il est possible d'utiliser des quotes pour délimiter un paramètre qui contient des espaces.
Il existe 3 types de quotes :
Les apostrophes ' ' (simples quotes)
Les guillemets " " (doubles quotes)
Les accents graves ` ` (back quotes), qui s'insèrent avec Alt Gr + 7 sur un clavier azerty
français.
Selon le type de quote que vous utilisez, la réaction de Bash ne sera pas la même.
Les simples quotes ' '
1 #!/bin/bash
Commençons par les simples quotes : 2

Le message est : $message 3 message='Bonjour tout le monde'


4 echo 'Le message est : $message'

Avec des simples quotes, la variable n'est pas analysée et le $ est affiché tel quel.

21
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
echo : afficher une variable (Les doubles quotes) 1 #!/bin/bash
2
Avec des doubles quotes :
3 message='Bonjour tout le monde'
Le message est : Bonjour tout le monde 4 echo "Le message est : $message"
ça marche ! Cette fois, la variable est analysée et son contenu est affiché.
En fait, les doubles quotes demandent à bash d'analyser le contenu du message.
S'il trouve des symboles spéciaux (comme des variables), il les interprète.
Avec des simples quotes, le contenu était affiché tel quel.
Les back quotes ` `
Un peu particulières
particulières, les back quotes demandent à bash d'exécuter
d exécuter ce qui se trouve à
l'intérieur. Exemple:
1 #!/bin/bash
Vous êtes dans le dossier /home/samir/bin
2
La commande pwd a été exécutée, et son 3 message=`pwd`
contenu a été inséré dans la variable message 4 echo "Vous êtes dans le dossier $message"
On a ensuite affiché le contenu de la variable.
22
[email protected]

11
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
read : demander une saisie
Vous pouvez demander à l'utilisateur de saisir du texte avec la commande read.
Ce texte sera immédiatement stocké dans une variable. read nomvariable

Adaptons notre script pour qu'il nous demande notre nom


et nous l'affiche : 1 #!/bin/bash
2
Lorsque vous lancez ce script, rien ne s'affiche, 3 read nom
Samir
mais vous pouvez taper du texte Bonjour Samir 4 echo "Bonjour $nom !"
(votre nom par exemple) :
Affecter simultanément une valeur à plusieurs variables
On peut demander de saisir autant de variables d'affilée que 1 #!/bin/bash
l'on souhaite. 2
3 read nom prenom
Voici un exemple de ce qu'il est possible de faire :
4 echo "Bonjour $nom $prenom !"
Samir Zaki
Bonjour Samir Zaki

23
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Affecter simultanément une valeur à plusieurs variables
read lit ce que vous tapez mot par mot (en considérant que les mots sont séparés par des
espaces). Il assigne chaque mot à une variable différente, d'où le fait que le nom et le
prénom ont été correctement assignés à $nom et $prenom respectivement.
Si vous rentrez plus de mots au clavier que vous n'avez prévu de variables pour en stocker,
la dernière variable de la liste récupèrera tous les mots restants.
En clair, si j'avais tapé pour le programme précédent « Samir Zaki Mahmoud",
la variable $prenom aurait eu pour valeur " Zaki Mahmoud ".
-p : afficher un message de prompt
Bon, notre
B t programme n'est' t pas ttrès
è clair,
l i on d
devrait
it afficher
ffi h 1 #!/bin/bash
2
un message pour que l'utilisateur sache quoi faire. 3 read -p 'Entrez votre nom : ' nom
Avec l'option -p de read, vous pouvez faire cela : 4 echo "Bonjour $nom !"
Notez que le message 'Entrez votre nom' a été entouré
de quotes. Si on ne l'avait pas fait, le bash aurait
Entrez votre nom : Samir
considéré que chaque mot était un paramètre différent ! Bonjour samir !

24
[email protected]

12
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
-n : limiter le nombre de caractères
Avec -n, vous pouvez couper au besoin au bout de X caractères si vous ne voulez pas que
l'utilisateur rentre un message trop long.
1 #!/bin/bash
Exemple : 2
3 read -p 'Entrez votre login (5 caractères max) : ' -n 5 nom
4 echo "Bonjour $nom !"

Entrez votre login (5 caractères max) : zakariaBonjour Zakar !

Notez
N t que lle b bash
h coupe automatiquement
t ti t au b
boutt dde 5 caractères,
tè sans que vous ayez
besoin d'appuyer sur la touche Entrée. Ce n'est pas très esthétique du coup, parce que le
message s'affiche sur la même ligne.
Pour éviter cela, vous pouvez faire un 1 #!/bin/bash
2
echo avec des \n comme vous avez
3 read -p 'Entrez votre login (5 caractères max) : ' -n 5 nom
appris à le faire plus tôt : 4 echo -e "\nBonjour $nom !"

25
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
-n : limiter le nombre de caractères 1 #!/bin/bash
2
3 read -p 'Entrez votre login (5 caractères max) : ' -n 5 nom
4 echo -e "\nBonjour $nom !"

Entrez votre login (5 caractères max) : zakaria


Bonjour zakar !

-t : limiter le temps autorisé pour saisir un message


Vous pouvez définir un "timeout" avec -t,c'est-à-dire un nombre de secondes au bout
desquelles
q le read s'arrêtera.

1 #!/bin/bash
2
3 read -p 'Entrez le code assez vite (vous avez 5 secondes) : ' -t 5 code
4 echo -e "\ntrop tard !"

26
[email protected]

13
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
-s : ne pas afficher le texte saisi
Plus utile probablement, le paramètre -s masque les caractères que vous saisissez.
Cela vous servira notamment si vous voulez que l'utilisateur rentre un mot de passe :
1 #!/bin/bash
2
3 read -p 'Entrez votre mot de passe : ' -s pass
4 echo -e "\nMerci ! Tout le monde saura que votre mot de passe est $pass ! "

Effectuer des opérations mathématiques


E b
En bash,
h les
l variables
i bl sontt toutes
t t desd chaînes
h î de
d caractères.
tè 1 #!/bin/bash
En soit, le bash n'est donc pas vraiment capable de manipuler 2
des nombres,et donc il n'est pas capable d'effectuer des 3 let "a = 5"
opérations. 4 let "b = 2"
5 let "c = a + b"
Heureusement, on peut passer par des commandes. Ici, 6 echo $c
la commande à connaître est let.
Résultat: 7
27
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Effectuer des opérations mathématiques
Les opérations utilisables sont :
1 #!/bin/bash
L'addition : + Exemples: 2
La soustraction : - 3 let "a = 5 * 3" # $a = 15
La multiplication : * 4 let "a = 4 ** 2" # $a = 16 (4 au carré)
La division : / 5 let "a = 8 / 2" # $a = 4
La puissance : ** 6 let "a = 10 / 3" # $a = 3
Le modulo : % 7 let "a = 10 % 3" # $a = 1

Notez qu'il est possible aussi de contracter les commandes, comme cela se fait en langage C.
Ainsi : est équivalent à écrire:
1 #!/bin/bash 1 #!/bin/bash
2 2
3 let "a = a * 3" 3 let "a *= 3"

28
[email protected]

14
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Les variables d'environnement
$ env
e
A t ll
Actuellement,t les
l variables
i bl que vous créez
é ORBIT_SOCKETDIR=/tmp/orbit-samir
dans vos scripts bash n'existent que dans GLADE_PIXMAP_PATH=:/usr/share/glade3/pixmaps
ces scripts. En clair, une variable définie TERM=xterm
dans un programme A ne sera pas utilisable SHELL=/bin/bash
dans un programme B. GTK_MODULES=canberra-gtk-module
USER=samir
Les variables d'environnement sont des PATH=/home/samir/bin:/usr/local/sbin:
variables que l'on peut utiliser dans /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
n'importe quel programme. GDM_XSERVER_LOCATION=local
On parle aussi parfois de variables globales. PWD=/home/samir/bin
V
Vous pouvez afficher
ffi h toutes
t t celles ll que vous EDITOR=nano
SHLVL=1
avez actuellement en mémoire avec
HOME=/home/samir
la commande env : OLDPWD=/home/samir
[ ... ]

29
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Les variables d'environnement
Il y en a beaucoup. Certaines sont très utiles, d'autres moins.
Parmi celles qui peuvent s'avérer utiles :

• SHELL : indique quel type de shell est en cours d'utilisation (sh, bash, ksh...)
• PATH : une liste des répertoires qui contiennent des exécutables que vous souhaitez
pouvoir lancer sans indiquer leur répertoire. On en a parlé un peu plus tôt. Si un
programme se trouve dans un de ces dossiers, vous pourrez l'invoquer quel que soit le
dossier où vous vous trouvez.
• EDITOR : l'éditeur de texte par défaut qui s'ouvre lorsque cela est nécessaire.
• HOME : lla position
iti d de votre
t d dossier
i h home.
• PWD : le dossier dans lequel vous vous trouvez.
• OLDPWD : le dossier dans lequel vous vous trouviez auparavant.

Notez que les noms de ces variables sont, par convention, écrits en majuscules.

30
[email protected]

15
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Les variables d'environnement
Comment utiliser ces variables dans vos scripts ?
C'est très simple, il suffit de les appeler par leur nom !

Exemple : 1 #!/bin/bash
2 Votre éditeur par défaut est nano
3 echo "Votre éditeur par défaut est $EDITOR"

Plus rarement, vous pourriez avoir besoin de définir votre propre variable d'environnement.
Pour cela, on utilise la commande export que vous avez pu voir dans votre .bashrc.
Les variables des paramètres
Comme toutes les commandes, vos scripts bash peuvent eux aussi accepter des
paramètres. Ainsi, on pourrait appeler notre script comme ceci :

$ ./variables.sh param1 param2 param3

31
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Les variables des paramètres
Comme toutes les commandes, vos scripts bash peuvent eux aussi accepter des
paramètres. Ainsi, on pourrait appeler notre script comme ceci :
$ ./variables.sh param1 param2 param3

Le problème, c'est que nous n'avons toujours pas vu comment récupérer ces paramètres
dans notre script.
Pourtant, c'est très simple à faire !En effet, des variables sont automatiquement créées :
1 #!/bin/bash
$# : contient
ti t lle nombre
b dde paramètres
èt 2
$0 : contient le nom du script exécuté 3 echo "Vous avez lancé $0, il y a $# paramètres"
(ici "./variables.sh") 4 echo "Le paramètre 1 est $1"
$1 : contient le premier paramètre
$2 : contient le second paramètre $ ./variables.sh param1 param2 param3
... Vous avez lancé ./variables.sh, il y a 3 paramètres
$9 : contient le 9ème paramètre Le paramètre 1 est param1

32
[email protected]

16
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell $ ./variables.sh param1 param2 param3
Les variables des paramètres
Et si on utilise plus de 9 paramètres ? En fait Rien ne nous empêcherait de lui envoyer 15
paramètres dans ce cas :
$ ./variables.sh param1 param2 param3 … param15
Pour traiter autant de paramètres, on les fera en général un par un..
On peut "décaler" les paramètres dans les variables $1 $2 etc. avec la commande shift.
Reprenons notre script :
1 #!/bin/bash
Comme vous le voyez, les paramètres ont été 2
décalés : $1 correspond après le shift au second 3 echo "Le paramètre 1 est $1"
paramètre $2 au troisième paramètre
paramètre, paramètre, etc
etc. 4 shift
5 echo "Le paramètre 1 est maintenant $1"
Bien sûr, shift est généralement utilisé dans
une boucle qui permet de traiter les paramètres
un par un. $ ./variables.sh param1 param2 param3
Le paramètre 1 est param1
Le paramètre 1 est maintenant param2

33
[email protected]

Université cadi Ayyad Année universitaire


2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
$ ./variables.sh param1 param2 param3 … param15
Les tableaux
Le bash gère aussi les variables "tableaux". Ce sont des variables qui contiennent plusieurs
cases, comme un tableau. Vous en aurez probablement besoin un jour, voyons comment
cela fonctionne.

Pour définir un tableau, on peut faire comme ceci : tableau=('valeur0' 'valeur1' 'valeur2')
Cela crée une variable tableau qui contient 3 valeurs
(valeur0, valeur1, valeur2).
Pour accéder à une case du tableau, on doit utiliser la syntaxe suivante : ${tableau[2]}
ceci affichera le contenu de la case n°2 ((donc "valeur2").
)

Les cases sont numérotées à partir de 0 ! La première case a donc le numéro 0.


Notez par ailleurs que pour afficher le contenu d'une case du tableau, vous devez entourer
votre variable d'accolades comme on l’a fait pour ${tableau[2]}.
Vous pouvez aussi manuellement définir le contenu d'une case : tableau[2]='valeur2'

34
[email protected]

17
Université cadi Ayyad Année universitaire
2009/2010
Faculté des Sciences et techniques Génie informatique-
IRISI
Marrakech Systèmes
Linux Programmation
d’exploitation
Shell
Programmation Shell
Les tableaux 1 #!/bin/bash
2
Essayons tout ceci dans un script : 3 tableau=('valeur0' 'valeur1' 'valeur2')
et on aura comme résultat: valeur1 4 tableau[5]='valeur5'
5 echo ${tableau[1]}

Comme vous pouvez le constater, le tableau peut avoir autant de cases que vous le désirez.
La numérotation n'a pas besoin d'être continue, vous pouvez sauter des cases sans
problème (la preuve, il n'y a pas de case n°3 ni de case n°4 dans mon script précédent).
Vous pouvez afficher l'ensemble du contenu du tableau d'un seul coup en utilisant
${
${tableau[*]}
[ ]} : 1 #!/bin/bash
2
3 tableau=('valeur0' 'valeur1' 'valeur2')
4 tableau[5]='valeur5'
5 echo ${tableau[*]}

valeur0 valeur1 valeur2 valeur5

35
[email protected]

18

Vous aimerez peut-être aussi