tuteurs.ens.fr/unix/shell/index.tml

220 lines
6.3 KiB
Text
Raw Normal View History

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>Shell</title>
</head>
<body>
<h1>Pr<50>sentation du shell</h1>
<p>
Le mot <em>shell</em> signifie <20>&nbsp;coquille&nbsp;<3B> en anglais. Il
s'agit du programme que vous utilisez r<>guli<6C>rement sur les machines
Unix de l'ENS (que ce soient les Sun, les PC sous FreeBSD ou autres
d<EFBFBD>riv<EFBFBD>s d'Unix), et qui interpr<70>te les commandes. Par exemple, vous y
tapez <code>pine</code> ou <code>mutt</code>, <code>forum</code>,
<code>cc</code>, <code>mozilla</code>, etc.
</p>
<p>
Mais quel rapport avec une coquille&nbsp;? Eh bien, dans une coquille
vous pouvez mettre de l'eau, pour la porter ensuite <20> votre
bouche&nbsp;; vous pouvez y mettre du sable avant de le verser dans des
bocaux&nbsp;; en somme, une coquille est un r<>cipient qui permet
de manipuler toutes sortes de contenus. Il en va de m<>me du shell. C'est
un outil en mode texte qui permet l'exploitation d'un grand nombre de
ressources de l'ordinateur.
</p>
<p>
Cette page vous donnera les rudiments pour exploiter les deux
principales fonctionnalit<69>s du shell&nbsp;:
</p>
<ul>
<li> l'usage interactif, reposant sur les <strong>lignes de
commandes</strong>&nbsp;;</li>
<li> la conception de <strong>scripts</strong> (programmes <20>crits en
shell). </li>
</ul>
<h2><a name="etats">Les deux <20>tats du shell</a>
</h2>
<p>
Le shell, comme le normalien, ne conna<6E>t que deux <20>tats&nbsp;:
</p>
<ul>
<li> le travail&nbsp;;</li>
<li> l'inactivit<69>.</li>
</ul>
<p>
Le shell, une fois lanc<6E>, est inactif&nbsp;: il attend qu'on lui donne
des ordres. Quand on lui en donne un, il l'ex<65>cute&nbsp;; et quand il a
termin<EFBFBD>, il retourne <20> son <20>tat d'inactivit<69>, 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 <20> cela&nbsp;:
</p>
2005-06-03 13:56:21 +00:00
<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">Comment le shell trouve-t-il les commandes<65>?</a>
</h2>
<h3>L'ordre de recherche</h3>
<p>
J'ai l'habitude de taper des commandes dans le shell, et je vois qu'il
r<EFBFBD>agit. Mais comment comprend-il ce que je veux faire&nbsp;?
</p>
<p>
Prenons un cas simple. Je tape la commande <code>bonjour</code> <20>
l'invite (<em>prompt</em>) du shell. Il va chercher <20> plusieurs endroits
ce que j'entends par l<>&nbsp;:
</p>
<ol>
<li> d'abord, il va se demander si <code>bonjour</code> n'est pas une de
ses commandes int<6E>gr<67>es&nbsp;; si c'est le cas, il l'ex<65>cute
directement, sinon il passe <20> l'<27>tape suivante&nbsp;;</li>
<li> ensuite, il va lire le contenu d'une variable, qui s'appelle
<code>PATH</code>, et qui indique le <20>&nbsp;chemin&nbsp;<3B> o<> trouver les
commandes que l'on appelle. Par exemple, si la variable PATH contient
les r<>pertoires&nbsp;:
<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&nbsp;:
<ul>
<li> <code>/usr/bin/bonjour</code>,</li>
<li> <code>/bin/bonjour</code> et </li>
<li> <code>/home/toto/bin/bonjour</code>&nbsp;;</li>
</ul></li>
<li> enfin, s'il ne trouve la commande dans aucun des r<>pertoires
r<EFBFBD>f<EFBFBD>renc<EFBFBD>s par le <code>PATH</code>, il va renvoyer un message d'erreur
en disant que d<>sol<6F>, il ne voit pas ce que l'on entend par
<code>bonjour</code>. Exemple&nbsp;:
<pre>
<span class="prompt">chaland ~ $</span> bonjour
bonjour: Command not found</pre> </li>
</ol>
<p> La <a href="#variables">variable</a> <code>PATH</code> consiste en
une liste de r<>pertoires s<>par<61>s par des
<EFBFBD>&nbsp;<code>:</code>&nbsp;<3B>. Si vous voulez voir <20> quoi ressemble votre
PATH, tapez&nbsp;:
</p>
<pre>
<span class="prompt">chaland ~ $</span> echo $PATH</pre>
<h3><a name="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<65>cut<75>es par le shell.
Un exemple de commande interne est <code>cd</code>&nbsp;; elle modifie
le r<>pertoire courant du shell.
</p>
<div class="attention">
<p>
Attention&nbsp;: si vous cr<63>ez un script (c'est-<2D>-dire un programme
<EFBFBD>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<63><72> <20> l'occasion de l'ex<65>cution de ce script, et qui
meurt <20> la fin de cette ex<65>cution.</p>
<p> Exemple&nbsp;: je cr<63>e un script <code>aller</code> qui contient les
lignes suivantes&nbsp;: </p>
<pre>
#! /bin/sh
cd $*</pre>
<p>
Nous aurons alors&nbsp;:
</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">Quels programmes utilisent le langage du shell<6C>?</a></h2>
<h3>Les scripts shell</h3>
<p>
La r<>p<EFBFBD>tition de commandes complexes en ligne de commande du shell est
rapidement fastidieuse&nbsp;; aussi est-il tr<74>s pratique de conna<6E>tre
les bases de la programmation de scripts shell. Les scripts servent <20>
automatiser ou syst<73>matiser des t<>ches.
</p>
<h3>Le script <code>.profile</code></h3>
<p>
Il existe un script sp<73>cial, qui est ex<65>cut<75> au moment o<> on se connecte. Ce
script est contenu dans le fichier <code>$HOME/.profile</code>. C'est ce
fichier qui vous dit s'il y a de nouveaux messages dans forum, si vous avez
du courrier, etc.
</p>
<p>
Ce fichier est normalement mis <20> jour automatiquement par les scripts de la
config conscrits. Il est n<>anmoins possible de le modifier pour changer des
options.
</p>
<h3>Le script <code>.xinitrc</code></h3>
<p> Il existe encore le script <code>.xinitrc</code>, qui lance X&nbsp;;
X&nbsp;est le gestionnaire de fen<65>tres classique sous Unix.
</p>
<h3>Cr<43>er ses propres scripts</h3>
<p>
Le nombre de scripts possibles est illimit<69>&nbsp;; vous pouvez en cr<63>er
autant que vous voulez, selon vos besoins&nbsp;: c'est ainsi que l'on
personnalise son syst<73>me et qu'on l'adapte <20> ses exigences, plut<75>t que
l'inverse.
</p>
<div class="metainformation">
Bas<EFBFBD> sur un polycopi<70> de Roberto Di Cosmo, Xavier Leroy et Damien
Doligez.
Modifications&nbsp;: Nicolas George, Baptiste M<>l<EFBFBD>s.
2005-06-03 13:56:21 +00:00
Derni<EFBFBD>re modification le <date value="$Date: 2005-06-03 13:56:22 $"
/>.
</div>
</body>
</html>