Sunteți pe pagina 1din 9

Tutoriels Unix - Club des décideurs et professionne... http://cyberzoide.developpez.com/unix/shell.

php3

Forums Tutoriels Magazine FAQs Blogs Projets Chat Newsletter Emploi Contacts

Accueil Conception Java .NET Dév. Web EDI Langages SGBD Office Solutions d'entreprise Applications Systèmes

Systèmes Windows Linux Sécurité PC Mac Réseau Mobiles

FORUM LINUX FAQ LINUX TUTORIELS LINUX LIVRES LINUX LINUX TV UNIX GTK+ Qt APACHE

VIII. Le Shell d'Unix


Par Hugo ETIEVANT

1. Les commandes
a. Internes
b. Externes
c. Complexes
d. Scripts
2. Flux de données
a. Entrée standard
b. Sortie standard
c. Sortie d'erreur standard
d. Redirections
3. Caractères spéciaux
4. Les variables du Shell
a. Variables d'environnement
b. Autres variables
c. Déclaration
d. Manipulation
5. Fichiers de commandes
a. Exécution
b. Paramètres
6. Structures
a. if then else
b. case
c. for
d. while
e. until
7. Tests
a. Chaînes de caractères
b. Chaînes numériques
c. Fichiers
d. 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.

1 sur 9 25/05/2010 13:24


Tutoriels Unix - Club des décideurs et professionne... http://cyberzoide.developpez.com/unix/shell.php3

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).

2 sur 9 25/05/2010 13:24


Tutoriels Unix - Club des décideurs et professionne... http://cyberzoide.developpez.com/unix/shell.php3

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.

Redirige la sortie d'erreur standard sans


2>>
é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.

3 sur 9 25/05/2010 13:24


Tutoriels Unix - Club des décideurs et professionne... http://cyberzoide.developpez.com/unix/shell.php3

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.

4 sur 9 25/05/2010 13:24


Tutoriels Unix - Club des décideurs et professionne... http://cyberzoide.developpez.com/unix/shell.php3

Variable=Valeur Description

Stocke le chemin et le nom du


PWD=/home/hugo
répertoire courant.

HOSTNAME=
Nom du serveur.
localhost.localdomain

Taille de l'historique. L'historique garde


en mémoire les dernières commandes
HISTSIZE=1000 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.

Chemin et nom du programme Shell (il


SHELL=/bin/bash
en existe plusieurs différents).

HOME=/home/hugo Chemin du répertoire de connexion.

PATH=:/usr/local/bin:
Liste des répertoires où chercher les
/bin:/usr/bin:
exécutables des commandes externes.
/usr/X11R6/bin

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.

5 sur 9 25/05/2010 13:24


Tutoriels Unix - Club des décideurs et professionne... http://cyberzoide.developpez.com/unix/shell.php3

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.

Valeur du ième paramètre si i compris entre


$i
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

6 sur 9 25/05/2010 13:24


Tutoriels Unix - Club des décideurs et professionne... http://cyberzoide.developpez.com/unix/shell.php3

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 et
condition2 sont toutes deux vraies en même temps.

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.

7 sur 9 25/05/2010 13:24


Tutoriels Unix - Club des décideurs et professionne... http://cyberzoide.developpez.com/unix/shell.php3

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)

8 sur 9 25/05/2010 13:24


Tutoriels Unix - Club des décideurs et professionne... http://cyberzoide.developpez.com/unix/shell.php3

Responsable bénévole de la rubrique Linux Professionnel : Olivier Van Hoof - Contacter par email

Vos questions techniques : forum d'entraide Linux Professionnel - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.

9 sur 9 25/05/2010 13:24

S-ar putea să vă placă și