273 lines
9.5 KiB
HTML
273 lines
9.5 KiB
HTML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||
<title>Présentation</title>
|
||
<link rel="stylesheet" href="../../tuteurs.css" type="text/css" />
|
||
</head>
|
||
<body>
|
||
<div class="navigation">
|
||
<h1>Tuteurs informatique<br /><a href="../../meta/contact.html">Nous contacter</a></h1>
|
||
<hr />
|
||
<ul class="menu">
|
||
<li>
|
||
<a href="../../meta/charte_graphique.html">Utiliser ce site</a>
|
||
</li>
|
||
<li>
|
||
<a href="../../actualite.html">Actu et stages</a>
|
||
</li>
|
||
<li>
|
||
<a href="../../docs/">Docs à imprimer</a>
|
||
</li>
|
||
<li>
|
||
<a href="../../meta/plan_site.html">Plan du site</a>
|
||
</li>
|
||
<li>
|
||
<a href="../../search.html">Rechercher</a>
|
||
</li>
|
||
</ul>
|
||
<hr />
|
||
<ul class="arbre">
|
||
<li>
|
||
<a href="../../">Les tuteurs</a>
|
||
<ul class="arbre">
|
||
<li>
|
||
<a href="../">Unix</a>
|
||
<ul class="arbre">
|
||
<li>
|
||
<a href="./">Shell</a>
|
||
<ul class="arbre">
|
||
<li>
|
||
<a href="boucle.html">Boucles</a>
|
||
</li>
|
||
<li>
|
||
<a href="commande.html">Commandes</a>
|
||
</li>
|
||
<li>
|
||
<a href="entreesortie.html">Entrée/sortie</a>
|
||
</li>
|
||
<li>
|
||
<a href="fonction.html">Fonctions</a>
|
||
</li>
|
||
<li>
|
||
<a href="presentation.html" class="actuel">Présentation</a>
|
||
</li>
|
||
<li>
|
||
<a href="script.html">Scripts</a>
|
||
</li>
|
||
<li>
|
||
<a href="test.html">Tests</a>
|
||
</li>
|
||
<li>
|
||
<a href="variable.html">Variables</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<hr />
|
||
<ul class="menu">
|
||
<li>
|
||
<a href="http://www.eleves.ens.fr/">Serveur des élèves</a>
|
||
</li>
|
||
<li>
|
||
<a href="http://www.ens.fr/">ENS</a>
|
||
</li>
|
||
<li>
|
||
<a href="http://www.spi.ens.fr/">SPI</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="corps">
|
||
<h1>Présentation du shell</h1>
|
||
<div class="sommaire">
|
||
<ul>
|
||
<li>
|
||
<a href="#etats">Les deux états du shell</a>
|
||
</li>
|
||
<li>
|
||
<a href="#path">Comment le shell trouve-t-il les commandes ?</a>
|
||
<ul>
|
||
<li>
|
||
<a href="#s2_1">L'ordre de recherche</a>
|
||
</li>
|
||
<li>
|
||
<a href="#builtins">Les commandes internes</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<a href="#prog">Quels programmes utilisent le langage du shell ?</a>
|
||
<ul>
|
||
<li>
|
||
<a href="#s3_1">Les scripts shell</a>
|
||
</li>
|
||
<li>
|
||
<a href="#s3_2">Le script <code>.profile</code></a>
|
||
</li>
|
||
<li>
|
||
<a href="#s3_3">Le script <code>.xinitrc</code></a>
|
||
</li>
|
||
<li>
|
||
<a href="#s3_4">Créer ses propres scripts</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<h2>
|
||
<a name="etats" id="etats">Les deux états du shell</a>
|
||
</h2>
|
||
<p>
|
||
Le shell, comme le normalien, ne connaît que deux états :
|
||
</p>
|
||
<ul>
|
||
<li> le travail ;</li>
|
||
<li> l'inactivité.</li>
|
||
</ul>
|
||
<p>
|
||
Le shell, une fois lancé, est inactif : il attend qu'on lui donne
|
||
des ordres. Quand on lui en donne un, il l'exécute ; et quand il a
|
||
terminé, il retourne à son état d'inactivité, en attente d'un nouveau
|
||
commandement.
|
||
</p>
|
||
<p>
|
||
Quand le shell est inactif, il affiche une <em>invite</em>
|
||
(<em>prompt</em> en anglais), qui ressemble à cela :
|
||
</p>
|
||
<pre>
|
||
<span class="prompt">chaland ~ $</span>
|
||
</pre>
|
||
<p>
|
||
Un curseur, parfois clignotant, indique que le shell attend que vous lui
|
||
tapiez des instructions.
|
||
</p>
|
||
<h2>
|
||
<a name="path" id="path">Comment le shell trouve-t-il les commandes ?</a>
|
||
</h2>
|
||
<h3>
|
||
<a name="s2_1" id="s2_1">L'ordre de recherche</a>
|
||
</h3>
|
||
<p>
|
||
J'ai l'habitude de taper des <a href="commande.html">commandes</a> dans
|
||
le shell, et je vois qu'il réagit. Mais comment comprend-il ce que je
|
||
veux faire ?
|
||
</p>
|
||
<p>
|
||
Prenons un cas simple. Je tape la commande <code>bonjour</code> à
|
||
l'invite (<em>prompt</em>) du shell. Il va chercher à plusieurs endroits
|
||
ce que j'entends par là :
|
||
</p>
|
||
<ol>
|
||
<li> d'abord, il va se demander si <code>bonjour</code> n'est pas une de
|
||
ses commandes intégrées ; si c'est le cas, il l'exécute
|
||
directement, sinon il passe à l'étape suivante ;</li>
|
||
<li> ensuite, il va lire le contenu d'une <a href="variable.html">variable</a>, qui s'appelle <code>PATH</code>, et
|
||
qui indique le « chemin » où trouver les commandes que l'on
|
||
appelle. Par exemple, si la variable PATH contient les
|
||
répertoires :
|
||
|
||
<ul><li><code>/usr/bin</code></li><li><code>/bin</code> et </li><li><code>/home/toto/bin</code>,</li></ul>
|
||
|
||
alors le shell va chercher successivement les commandes :
|
||
|
||
<ul><li><code>/usr/bin/bonjour</code>,</li><li><code>/bin/bonjour</code> et </li><li><code>/home/toto/bin/bonjour</code> ;</li></ul></li>
|
||
<li> enfin, s'il ne trouve la commande dans aucun des répertoires
|
||
référencés par le <code>PATH</code>, il va renvoyer un message d'erreur
|
||
en disant que désolé, il ne voit pas ce que l'on entend par
|
||
<code>bonjour</code>. Exemple :
|
||
|
||
<pre><span class="prompt">chaland ~ $</span> bonjour
|
||
bonjour: Command not found</pre> </li>
|
||
</ol>
|
||
<p> La variable <code>PATH</code> consiste en une liste de répertoires
|
||
séparés par des « <code>:</code> ». Si vous voulez voir à quoi
|
||
ressemble votre PATH, tapez :
|
||
</p>
|
||
<pre><span class="prompt">chaland ~ $</span> echo $PATH</pre>
|
||
<h3>
|
||
<a name="builtins" id="builtins">Les commandes internes</a>
|
||
</h3>
|
||
<p>
|
||
Certaines commandes du shell ne sont pas des programmes mais des
|
||
commandes <em>internes</em> (<em>builtins functions</em>). Comme nous
|
||
l'avons vu, elles sont directement reconnues et exécutées par le shell.
|
||
Un exemple de commande interne est <code>cd</code> ; elle modifie
|
||
le répertoire courant du shell.
|
||
</p>
|
||
<div class="attention">
|
||
<p>
|
||
Attention : si vous créez un script (c'est-à-dire un programme
|
||
écrit en langage shell) qui utilise <code>cd</code>, il ne modifie pas
|
||
le répertoire courant du shell qui lance ce script, mais celui d'un
|
||
shell qui est créé à l'occasion de l'exécution de ce script, et qui
|
||
meurt à la fin de cette exécution.</p>
|
||
<p> Exemple : je crée un script <code>aller</code> qui contient les
|
||
lignes suivantes : </p>
|
||
<pre>
|
||
#! /bin/sh
|
||
cd $*</pre>
|
||
<p>
|
||
Nous aurons alors :
|
||
</p>
|
||
<pre><span class="prompt">chaland ~ $</span> aller toto
|
||
<span class="prompt">chaland ~ $</span> cd toto
|
||
<span class="prompt">chaland ~/toto $</span></pre>
|
||
</div>
|
||
<h2>
|
||
<a name="prog" id="prog">Quels programmes utilisent le langage du shell ?</a>
|
||
</h2>
|
||
<h3>
|
||
<a name="s3_1" id="s3_1">Les scripts shell</a>
|
||
</h3>
|
||
<p>
|
||
La répétition de commandes complexes en ligne de commande du shell est
|
||
rapidement fastidieuse ; aussi est-il très pratique de connaître
|
||
les bases de la programmation de scripts shell. Les scripts servent à
|
||
automatiser ou systématiser des tâches.
|
||
</p>
|
||
<h3>
|
||
<a name="s3_2" id="s3_2">Le script <code>.profile</code></a>
|
||
</h3>
|
||
<p>
|
||
Il existe un script spécial, qui est exécuté au moment où on se connecte. Ce
|
||
script est contenu dans le fichier <code>$HOME/.profile</code>. C'est ce
|
||
fichier qui vous dit si vous avez du courrier, etc.
|
||
</p>
|
||
<p>
|
||
Ce fichier est normalement mis à jour automatiquement par les scripts de la
|
||
config conscrits. Il est néanmoins possible de le modifier pour changer des
|
||
options.
|
||
</p>
|
||
<h3>
|
||
<a name="s3_3" id="s3_3">Le script <code>.xinitrc</code></a>
|
||
</h3>
|
||
<p> Il existe encore le script <code>.xinitrc</code>, qui lance X ;
|
||
X est le gestionnaire de fenêtres classique sous Unix.
|
||
</p>
|
||
<h3>
|
||
<a name="s3_4" id="s3_4">Créer ses propres scripts</a>
|
||
</h3>
|
||
<p>
|
||
Le nombre de scripts possibles est illimité ; vous pouvez en créer
|
||
autant que vous voulez, selon vos besoins : c'est ainsi que l'on
|
||
personnalise son système et qu'on l'adapte à ses exigences, plutôt que
|
||
l'inverse. Pour en savoir plus sur la programmation en shell, consultez
|
||
les pages consacrées à la <a href="script.html">programmation de scripts
|
||
en shell</a>. Ou bien vous pouvez revenir à la <a href="index.html">page
|
||
centrale sur le shell</a>, d'où vous pourrez vous orienter vers d'autres
|
||
parties du cours.
|
||
</p>
|
||
<div class="metainformation">
|
||
Basé sur un polycopié de Roberto Di Cosmo, Xavier Leroy et Damien
|
||
Doligez.
|
||
Modifications : Nicolas George, Baptiste Mélès.
|
||
Dernière modification : 2014-10-26 par Antoine Amarilli.
|
||
</div>
|
||
</div>
|
||
</body>
|
||
</html>
|