Vous êtes sur la page 1sur 2

Les métacaractères du Shell

Les shells UNIX et GNU/Linux nous offre la possibilité d'utiliser des formes abrégées pour les noms de fichiers grâce à des caractères. Ils interprètent de nombreux caractères spéciaux appelés métacaractères (couche d'abstraction supérieure pour représenter des données alphanumériques).

Usage fréquent : *, ?

un astérisque * remplace 0 à n caractères (toute chaîne de caractères) dans les noms de fichiers :

ex : ls cs*

tous les fichiers commençant par cs

ls

*.c

tous les fichiers se terminant par .c

ls

*

tous les fichiers

ll

/*/*.d

tous les fichiers d'un répertoire de / qui se terminent par .d

ll ­d /home/*

tous les sous-répertoires de /home

un point d'interrogation ? remplace un seul caractère (n'importe quel caractère) dont la présence est obligatoire :

ex : ls cshr? tous les fichiers dont les noms commencent par cshr et ne comportant qu'un caractère supplémentaire ls l*.??? tous les fichiers (ou répertoires) dont les noms commencent par le caractère "l" et comportant ensuite au moins 3 caractères. cp /lib/modules/*/*/*.? /home/toto toto copie tous les pilotes dans son répertoire personnel (les pilotes et modules on l'extention .o pour les noyaux <=2.4 et .ko pour le noyau 2.6 ).

Groupe de caractères : [abcd], [a-z], [^

]

Le modèle [] permet de sélectionner un élément de la liste ou de l'intervalle spécifié.

Le séparateur en ligne de commande étant l'espace, aucun espace ne doit être mis au début ou à la fin entre [ ].

où X et Y peuvent être vides, désigne

Plus précisément, un modèle de la forme X[abc

z]Y

l'ensemble des noms de fichiers suivants : XaY, XbY, XcY

XzY.

Dans le cas d'une suite ordonnée de caractères comme abc

z,

on peut utiliser la notation intervalle

a-z. On peut mélanger les deux notations, comme dans [a-z].[0-9], ensemble des fichiers a.0, a.1,

, b.0

b.1 etc ex : ll [a­dA­D]* liste les fichiers du répertoire courant dont le nom commence par a, b, c ou d

minuscule ou majuscule (y compris les sous-répertoires) cp ventes10[0­9].sxc /home/toto/bilan copie tous les fichiers ventes100.sxc jusqu'à

ventes109.sxc

lpr ~toto/formation/plan9[345].html imprime les 3 fichiers plan93.html, plan94.html

plan94.html

ll [^an]* | less n'importe quel caractère sauf ceux de la liste (le ^ symbolise la recherche inversée).

Les variables : $

Une variable est une boite vide dans laquelle on peut stocker toute sorte d’informations. Ces informations peuvent changer, d’où le terme variable. Une variable est identifiée par un mot, c’est le nom de cette variable. Ce nom peut comporter des lettres des chiffres, ainsi que le caractère souligné (underscore), mais ne peut commencer par un chiffre. Il existe des variables qui ne respectent pas cette convention de nommage, mais il s’agit alors de variables spéciales créées par le shell lui-même. Vous pouvez créer des variables dans un script, mais elles existeront seulement dans ce script. Le travail du shell peut être paramétré par : des caractères spéciaux appelés “métacaractères” (vu précédemment) et des variables en particulier des “variables prédéfinies”.

Caractéristiques d'une variable :

Nom : peut contenir des lettres, des chiffres et le caractère souligné "_" Premier caractère : une lettre ou souligné (pas de chiffre) Affectation : nom=contenu (sans espace) Utilisation : $nom

Pour accèder au contenu des variables du shell il faut placer le signe de référencement $ devant. Dès que le shell rencontre ce signe dans une ligne de commande, il lit le mot placé derrière et va le chercher dans la liste des variables. Si la définition de variable est trouvée dans la liste, alors le contenu de cette variable est inséré en lieu et place du nom. Sinon si aucune variable ne correspond, alors la référence à la variable sera supprimée et remplacée par un texte vide :

ex : listing=os.txt définition et affectation d'une variable (os.txt : Unix [] Linux [] BSD) cat $listing utilisation de la variable comme argument de la commande Linux [] BSD []UNIX résultat : contenu du fichier os.txt affiché par cat listing=kos.txt si aucun fichier kos.txt existant cat $listing aucun résultat : référence variable supprimée et remplacée par un texte vide.

Substitution de variables et de commandes

Dans les scripts, les variables et paramètres, désignés généralement par un nom ou un numéro précédé de $, sont substitués par les chaînes de caractères correspondant à leurs valeurs lors de l'interprétation du script. Il s'agit d'une simple substitution de chaîne de caractères, d'où le terme substitution de variable. Parallèlement à la substitution de variables, il est possible d'opérer une substitution de commandes : une commande est placée entre parenthèses suivant directement le signe $. ex : liste="ls ­l" la variable contient la chaîne de caractères (entre guillemets) de la commande ls avec un argument (­l). $liste affiche le contenu du répertoire de la commande ls par substitution de variable. liste=$(ls ­la | more) la variable contient une suite de commandes entre parenthèses. echo $liste le contenu de la variable de la substitution de commandes est affiché avec la commande echo.