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�re | Description |
> | 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�re | Description |
* | 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=Valeur | Description |
PWD=/home/hugo | Stocke le chemin et le nom du r�pertoire courant. |
HOSTNAME= localhost.localdomain | Nom du serveur. |
HISTSIZE=1000 | Taille 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=fr | Suffixe de la langue du syst�me. |
PS1=[\u@\h \W]\$ | Cha�ne apparaissant � l'invite du Shell. |
USER=hugo | Nom de l'utilisateur. |
DISPLAY=unix:0.0 | Adresse du terminal d'affichage. |
SHELL=/bin/bash | Chemin et nom du programme Shell (il en existe plusieurs diff�rents). |
HOME=/home/hugo | Chemin 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
Variable | Description |
$$ | 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 :
Variable | Description |
$# | Nombre d'arguments. |
$* | Liste des arguments. |
$0 | Nom de la commande. |
$1 | Valeur du premier param�tre. |
$i | Valeur du i�me param�tre si i compris entre 1 et 9. |
$9 | Valeur 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�rateur | Signification |
-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�rateur | Renvoie vrai si |
-p | c'est un tube nomm� |
-f | fichier ordinaire |
-d | r�pertoire |
-c | fichier sp�cial en mode caract�re |
-b | fichier sp�cial en mode bloc |
-r | acc�s en lecture |
-w | acc�s en �criture |
-x | acc�s en ex�cution |
-s | fichier 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�rateur | Signification |
! | n�gation |
-a | conjonction (et) |
-o | disjonction (ou) |
|