VIII. Le Shell d'Unix

Par Hugo ETIEVANT


  1. Les commandes
    1. Internes
    2. Externes
    3. Complexes
    4. Scripts
  2. Flux de donn�es
    1. Entr�e standard
    2. Sortie standard
    3. Sortie d'erreur standard
    4. Redirections
  3. Caract�res sp�ciaux
  4. Les variables du Shell
    1. Variables d'environnement
    2. Autres variables
    3. D�claration
    4. Manipulation
  5. Fichiers de commandes
    1. Ex�cution
    2. Param�tres
  6. Structures
    1. if then else
    2. case
    3. for
    4. while
    5. until
  7. Tests
    1. Cha�nes de caract�res
    2. Cha�nes num�riques
    3. Fichiers
    4. Autres op�rateurs

Les commandes

Le Shell est un programme qui permet l'ex�cution de commandes qui affichent en g�n�rale un r�sultat � l'�cran.

Le Shell est homologue � l'invite MS-DOS puisqu'il permet d'ex�cuter :

  • des commandes internes,
  • des commandes externes,
  • des commandes complexes,
  • des fichiers de commandes.

Tout programme en cours d'ex�cution est appel� processus. Le Shell en est un.

Commandes internes

Les commandes internes au Shell font partie int�grante du Shell et leur ex�cution n'implique pas la cr�ation d'un nouveau processus.

Exemples : pwd, cd.

Commandes externes

Ce sont des programmes binaires g�n�ralement situ�s dans le r�pertoire /bin que le Shell va ex�cuter sous la forme d'un nouveau processus.

Exemples : ls, gzip.

Commandes complexes

Les commandes complexes r�sultent de la combinaison de plusieurs commandes par l'interm�diaires de tubes.

Exemple :

$ ls -a1 | head -n5 | nl
1 .bashrc
2 .XAutority
3 bin
4 lettre.txt 
5 tp6.c

Fichiers de commandes

Appel�s aussi scripts Shell, ces fichiers textes regroupent une succession ordonn�e de commandes et de structures de contr�les. Ecrire un script revient � faire de la programmation.

Exemple :

if [ $# -eq  1 ]
then if [ -f "/bin/$1" ]
     then echo "Commande externe."
     fi
else echo "Syntaxe: $0 commande"
fi

Les flux de donn�es

Les flux de donn�es du Shell sont transport�s par trois voies diff�rentes :

  • l'entr�e standard
  • la sortie standard
  • la sortie d'erreur standard

Entr�e standard

L'entr�e standard est le canal d'entr�e des donn�es qui est utilis� par le syst�me. Par d�faut c'est le clavier.

Ainsi, les commandes du Shell prennent leur param�tres sur l'entr�e standard.

Sortie standard

La sortie standard est le canal de sorties des donn�es. C'est par ce canal que transitent les donn�es r�sultant de l'ex�cution d'une commande. C'est en g�n�ral un terminal, c'est-�-dire l'�cran.

Ainsi, les commandes du Shell �crivent tr�s souvent des r�sultats sur la sortie standard.

Sortie d'erreur standard

La sortie d'erreur standard est le canal par lequel les messages d'erreurs transitent, c'est en g�n�ral l'�cran. Il arrive quelque fois qu'une fen�tre soit sp�cialement d�di�e � ce canal.

D�s qu'un code d'erreur est g�n�r� par une commande, il est envoy� un message sur ce canal.

Redirections

Il est possible de changer temporairement les entr�es et sorties standard lors de l'ex�cution d'une commande.

Par exemple on souhaite �crire dans un fichier la liste des fichiers d'un r�pertoire. La commande ls permet de lister les fichiers d'un r�pertoire. Cette commande envoie le r�sultat de sa recherche sur la sortie standard (�cran).

Exemple :

$ ls
amoi.c           montage.jpg     tp3.c
lettre.doc       tp1.c           zizitop.mp3
monprog.c        tp2.c           

Pour rediriger la sortie standard sur un fichier, on utilise le caract�re sp�cial >.

Exemple :

$ ls > liste.txt

Si on affiche � l'�cran le contenu du fichier, on vera qu'il contient ce que la commande aurait du afficher � l'�cran.

Exemple :

$ cat liste.txt
amoi.c           montage.jpg     tp3.c
lettre.doc       tp1.c           zizitop.mp3
monprog.c        tp2.c           

Le caract�re > permet de cr�er le fichier si celui-ci n'existe pas lors de l'ex�cution de la commande. Si le fichier existe d�j�, sont contenu est �cras�.

Pour conserver le contenu du fichier intact et �crire � sa suite, on utilise le caract�re sp�cial >>.

Exemple :

echo "Liste de mon r�pertoire" >> liste.txt

La commande echo permet d'afficher du texte sur la sortie standard qui est ici redirig�e vers le fichier liste.txt � la suite duquel on �crit la cha�ne de caract�res pass�e en argument.

Exemple :

$ cat liste.txt
amoi.c           montage.jpg     tp3.c
lettre.doc       tp1.c           zizitop.mp3
monprog.c        tp2.c           
Liste de mon r�pertoire

On voit que le contenu du fichier n'a pas �t� �cras� et qu'il contient une phrase en plus.

Le tableau suivant r�capitule les caract�res sp�ciaux de redirection.

Caract�reDescription
>Redirige la sortie standard.
>>Redirige la sortie standard sans �crasement.
<Redirige l'entr�e standard.
2>Redirige la sortie d'erreur standard.
2>>Redirige la sortie d'erreur standard sans �crasement.


Caract�res sp�ciaux

En plus des caract�res de redirection des flux standards de donn�es, le Shell poss�dent des caract�res dont la signification est tr�s... sp�ciale, les voici regroup�s dans le tableau suivant.

Caract�reDescription
*M�tacaract�re qui remplace n'importe quelle cha�ne de caract�res (m�me vide).
Exemple : cp * DATA copie tous les fichiers dans le r�pertoire DATA.
?M�tacaract�re qui remplace un caract�re quelconque.
;Permet de s�parer plusieurs commandes �crites sur une m�me ligne.
Exemple :
cp *.c DATA; tar cvf data.tar DATA copie tous les fichiers d'extention .c
dans le r�pertoire DATA et les archive dans le fichier data.tar.
( )Regroupe des commandes.
Exemple :
(echo "Liste :"; ls ) > liste.txt
�crit la cha�ne Liste : et la liste des fichiers du r�pertoire courant dans le fichier liste.txt.
&Permet le lancement d'un processus en arri�re plan. Cela permet d'ex�cuter d'autres commandes pendant qu'un processus est en marche.
Exemple : netscape&.
|Permet la communication par tube entre deux commandes.
Exemple : ls -1 | file la commande de listage des fichiers du r�pertoire (ls) envoie chacun d'eux � la commande qui permet de conna�tre le type d'un fichier (file).
#Introduit un commentaire. Donc tout ce qui suit ce caract�re dans une ligne est ignor� par le Shell.
Exemple : # ceci est un commentaire.
\D�sp�cialise le caract�re qui suit. C'est-�-dire que si le caract�re qui suit celui l� est un caract�re sp�cial alors le Shell l'ignorera.
Exemple : echo Bon\*jour affiche bon*jour � l'�cran.
'...'D�fini une cha�ne de caract�res qui ne sera pas �valu�e par le Shell.
Exemple : echo '*?&' affiche sur la sortie standard les caract�res sp�ciaux *?& sans les interpr�ter.
"..."D�fini une cha�ne de caract�res dont les variables seront �valu�es par le Shell.
Exemple : echo "Vous �tes $USER." affiche Vous �tes + la valeur de la variable $USER.
`...`D�fini une cha�ne de caract�res qui sera interpr�t�e comme une commande et remplac�e par la cha�ne qui serait renvoy�e sur la sortie standard � l'ex�cution de la dite commande.
Exemple : echo `pwd` >> liste.txt �crit � la fin du fichier le chemin et le nom du r�pertoire courant. Le caract�re sp�cial utilis� s'obtient par la combinaison de touche : AltGr + 7 (c'est l'accent grave).


Les variables du Shell

Les variables d'environnement

Le Shell poss�de comme MS-DOS des variables d'environnement qui permettent de garder en m�moire des informations importantes telles que le login de l'utilisateur (stock� dans la variable $USER) ainsi que son r�pertoire de connexion ($HOME), la liste des r�pertoires dans lequels aller chercher les ex�cutables des commandes externes ($PATH), et bien d'autres encore...

La commande env affiche la liste de toutes les variables d'environnement du Shell avec leurs valeurs.

Le tableau suivant r�sume quelques variables affich�e par env.

Variable=ValeurDescription
PWD=/home/hugoStocke le chemin et le nom du r�pertoire courant.
HOSTNAME=
localhost.localdomain
Nom du serveur.
HISTSIZE=1000Taille de l'historique. L'historique garde en m�moire les derni�res commandes pass�es au Shell. Ces derni�res sont accessibles successivement par la touche fl�ch�e vers le haut.
LANGUAGE=frSuffixe de la langue du syst�me.
PS1=[\u@\h \W]\$Cha�ne apparaissant � l'invite du Shell.
USER=hugoNom de l'utilisateur.
DISPLAY=unix:0.0Adresse du terminal d'affichage.
SHELL=/bin/bashChemin et nom du programme Shell (il en existe plusieurs diff�rents).
HOME=/home/hugoChemin du r�pertoire de connexion.
PATH=:/usr/local/bin:
/bin:/usr/bin:
/usr/X11R6/bin
Liste des r�pertoires o� chercher les ex�cutables des commandes externes.

Autres variables

VariableDescription
$$PID du processus Shell en cours.
$!PID du dernier processu lanc� en background.
$?Code erreur de retour de la derni�re commande (0:vrai; sinon faux).

D�claration

L'utilisateur peut d�clarer facilement de nouvelles variables par l'affectation directe d'une valeur.

Syntaxe : nom=valeur

La valeur de la variable peut �tre num�rique ou �tre une cha�ne de caract�re, sont format n'a pas d'importance.

Exemple : EMAIL=cyberzoide@multimania.com Manipulation

Une variable peut �tre utilis�e dans n'importe quelle circonstance du moment que c'est dans le Shell. Son nom doit �tre pr�c�d� du signe dollard ($) et �tre entre accolades ({}) si un autre mot lui est contigu.

Exemples :

$ echo $EMAIL
cyberzoide@multimania.com

$ echo "Mon mail : $EMAIL"
Mon mail : cyberzoide@multimania.com

$ echo 'Mon mail : $EMAIL'
Mon mail : $EMAIL

Dans le premier exemple, la variable EMAIL est pass� directement en param�tre � la commande echo qui l'affiche apr�s que le Shell en ait �valu� la valeur.

Dans le second exemple, une cha�ne contenant la m�me variable est pass�e en param�tre � echo. Les doubles quotes sont des caract�res sp�ciaux ("...")qui obligent le Shell a �valuer la valeur des variables que contient la cha�ne entre double quote. La commande echo affiche donc la cha�ne � l'�cran.

Et enfin, cette fois les simples quotes interdisent au Shell d'�valuer la valeur de la variable. Donc echo affiche la cha�ne brute.

Autres exemples :

$ moi=CyberZo�de; echo $moi
CyberZo�de

$ phrase="Bonjour $moi"; echo $phrase
Bonjour CyberZo�de

$ rep=`pwd`; echo $rep
/home/hugo/data

Dans le second exemple, la variable est entre accolades afin que le Shell la distingue des caract�res qui suivent.

Dans le dernier exemple, la variable rep contient une cha�ne entre accents graves, ce qui oblige le Shell � l'interpr�ter comme une commande et � la remplacer par la cha�ne qui serait renvoy�e sur la sortie standard � l'ex�cution de la dite commande.


Fichiers de commandes

Les fichiers de commandes (scripts) sont des fichiers textes qui contiennent des commandes du Shell ordonn�es par des structures de contr�le.

Ex�cution

Pour ex�cuter un script, plusieurs solutions :

  • Syntaxe : sh script
    Cette syntaxe lance un nouveau processus Shell qui lit ses commandes dans le fichier script. Ce fichier doit �tre accessible en lecture.

  • Syntaxe : . script
    Le terminal est momentan�ment remplac� par le fichier script accessible en lecture (pas de nouveau processus cr��).

  • Syntaxe : script
    Lance un nouveau processus Shell qui lit ses commandes dans le fichier qui doit �tre accessible en lecture et en ex�cution.

  • Syntaxe : exec script
    Le Shell courant est remplac� par un processus Shell qui lit ses commandes dans le fichier qui doit �tre accessible en lecture et en ex�cution.

Param�tres

Il est possible d'ex�cuter un script en lui passant des arguments comme pour n'importe quelle autre commande.

Le tableau suivant r�sume les variables accessibles � un script :

VariableDescription
$#Nombre d'arguments.
$*Liste des arguments.
$0Nom de la commande.
$1Valeur du premier param�tre.
$iValeur du i�me param�tre si i compris entre 1 et 9.
$9Valeur du neuvi�me param�tre.


Structures

if then else

Structure conditionnelle binaire : suivant qu'une condition est vrai ou fausse on ex�cute un bloc ou on ne l'ex�cute pas.

if condition
then instruction
fi

Si la condition est vraie, alors instruction (qui peut �tre un bloc d'instruction) est ex�cut�e.

if condition
then instruction1
else instruction2
fi

Si la condition est vraie, alors instruction1 est ex�cut�e et la seconde est ignor�e, sinon c'est instruction2 qui est ex�cut�e et la permi�re est ignor�e.

if condition1
then instruction1
elif condition2
then instruction2
fi

elif est �quivalent � else if. Ainsi l'instruction2 n'est ex�cut�e que si condition1 est fausse et que condition2 est vraie.

case

Structure conditionnelle � choix multiples : suivant la valeur de l'expression chaine, on peut faire ex�cuter un large panel d'instructions.

case chaine in
motif_1) instruction1;;
motif_2) instruction2;;
...
motif_k) instructionk;;
esac

Si la chaine de caract�res est semblable au motif_1 (qui est une cha�ne d'expansion de chemin, accepte les m�ta caract�res * ?, [], {} et ~) alors l'instruction1 est ex�cut�e.

La chaine peut tout � fait v�rifier simultan�ment plusieurs motifs diff�rents, dans ce cas de figure les instructions (ou blocs d'instructions) correspondantes seront tous ex�cut�s.

for

Structure r�p�titive born�e : boucle dont on connait avant le premier passage le nombre total d'it�rations.

for variable in ensemble
do
instructions
done

On fait donc varier la variable en lui faisant prendre successivement toutes les valeurs de l'ensemble.

while

Structure r�p�titive tant que la condition est vraie.

while condition
do
instructions
done

Boucle dont les instructions sont ex�cut�es tant que l'expression condition est vrai.

until

Structure r�p�titive jursqu'� ce que la condition soit vraie (i.e. tant qu'elle est fausse).

until condition
do
instructions
done

Boucle dont les instructions sont ex�cut�es tant que l'expression condition est fausse.


Tests

Les conditions des structures peuvent �tre �valu�es grace � la commande test.

Cha�nes de caract�res

test -z chaine
Renvoie vrai si chaine est vide.

test -n chaine
Renvoie vrai si chaine n'est pas vide.

test chaine_1 = chaine_2
Renvoie vrai si les deux cha�nes sont �gales.

test chaine_1 != chaine_2
Renvoie vrai si les deux cha�nes ne sont pas �gales.

Cha�nes num�riques

test chaine_1 op�rateur chaine_2
Renvoie vrai si les cha�nes chaine_1 et chaine_2 sont dans l'ordre relationnel d�fini par l'op�rateur qui peut �tre l'un parmi ceux du tableau ci-apr�s.

Op�rateurSignification
-eq=
-ne<>
-lt<
-le<=
-gt>
-ge>=

Fichiers

test condition fichier
Renvoie vrai si le fichier v�rifie la condition qui peut �tre l'une parmi celles d�crites dans le tableau ci-apr�s.

Op�rateurRenvoie vrai si
-pc'est un tube nomm�
-ffichier ordinaire
-dr�pertoire
-cfichier sp�cial en mode caract�re
-bfichier sp�cial en mode bloc
-racc�s en lecture
-wacc�s en �criture
-xacc�s en ex�cution
-sfichier non vide

Autres op�rateurs

Il est possible de combiner des tests gr�ce au parenth�sage et � l'utilisation des op�rateurs bool�ens du tableau suivant :

Op�rateurSignification
!n�gation
-aconjonction (et)
-odisjonction (ou)