Introduction |
Un "shell" est un interpréteur de commandes du système
UNIX. Il existe plusieurs versions de cet interpréteur : le "shell
de Bourne" (ou "Bourne shell"), le "Korn shell", le "C_shell",...
On se placera dans le cadre du shell de Bourne.
Le format d'une commande sous UNIX suit le modèle suivant :
nom_de_la_commande -options arguments
Les options et arguments forment ce que l'on appelle les "paramètres" de la commande.
Les métacaractères du shell |
Les métacaractères du shell permettent :
Exemples :
[Aa] désigne les caractères A
ou a ;
[0-9a-zA-Z] désigne un caractère alphanumérique
quelconque.
Remarque :
[!0-9] désigne l'ensemble des caractères
sauf les chiffres.
Les expressions régulières |
On appelle "expression régulière" une chaîne de caractères composée de caractères normaux et de caractères spéciaux, appelés "métacaractères des expressions régulières" (à ne pas confondre avec les métacaractères du shell décrits plus haut !). Comme toutes les chaînes de caractères, on peut écrire une expression régulière entre apostrophes, entre guillemets ou seule, mais on évitera cette dernière possibilité, et on conseille même d'utiliser la notation entre apostrophes. Les principaux métacaractères des expressions régulières sont les suivants :
Redirections de l'entrée standard et de la sortie standard |
Il est possible, sous UNIX, de rediriger l'entrée standard ou la sortie standard d'une commande :
Exemple :
grep chaine < fichier1
Exemple :
[nom_commande] << [séparateur]
ligne1
ligne2
...
[séparateur]
La commande reçoit en entrée le texte situé entre
les deux occurrences du séparateur.
Exemple :
ls > fichier1
Si fichier1 n'existe pas, il est créé
; sinon, son contenu est écrasé ;
Exemple :
ls >> fichier1
Si fichier1 n'existe pas, il est créé
; le résultat de l'appel de la commande ls est ajouté
à la fin du fichier fichier1 ;
Exemple :
ls | grep *.c
Une redirection en entrée est toujours suivie d'un nom de fichier, mais jamais du résultat d'une commande.
Redirections de la sortie standard des erreurs |
Il est possible de rediriger la sortie standard des erreurs sur un fichier, de l'une des deux manières suivantes :
[commande] 2> [nom_fichier]
ou :
[commande] 2>> [nom_fichier]
Les "scripts" |
Un "script" est un ensemble de commandes UNIX rassemblées dans un fichier. Pour lancer l'exécution d'un script contenu dans le fichier nom_script, on peut :
tgv% chmod u+x [nom_script]
tgv% [nom_script] [paramètres] |
Les paramètres positionnels |
$0, $1, $2, $3, $4, $5, $6, $7, $8 et $9 désignent les paramètres positionnels, à l'appel d'un script. $0 désigne le nom du script. On désigne également par $# le nombre total de paramètres positionnels ($0 non compris), et par $* la liste des paramètres positionnels. Enfin, $? contient le code de retour de la dernière commande exécutée.
Exemple :
On écrit, dans le fichier exemple.sh, les commandes
suivantes :
exemple.sh |
echo "exécution de la commande $0" echo "contenu du fichier 1" cat $1 echo "contenu du fichier 2" cat $2 |
On rend ce script exécutable en tapant, dans le répertoire
de travail :
tgv% chmod u+x exemple.sh |
Puis on l'exécute, en tapant :
tgv% exemple.sh fich1 fich2 |
Les opérateurs && et || |
liste_commandes_1 && liste_commandes_2
l'opérateur && est un séparateur
de commandes provoquant l'exécution de la liste de commandes liste_commandes_2
si la liste de commandes liste_commandes_1 a pour code
de retour 0
liste_commandes_1 || liste_commandes_2
l'opérateur || est un séparateur de commandes
provoquant l'exécution de la liste de commandes liste_commandes_2
si la liste de commandes liste_commandes_1 a un code de
retour différent de 0
La structure de contrôle de condition |
Dans un "script", il est possible de structurer les commandes en effectuant des appels conditionnels.
Syntaxe :
if condition1 then liste_commandes_1 elif condition2 then liste_commandes_2 else liste_commandes_3 fi |
Remarques :
if [ $# -eq 1 ] then echo "Le répertoire $1 a le contenu suivant : `ls $1`" else echo 'Mauvais nombre de paramètres' fi |
Ce "script" affiche le contenu du répertoire donné en paramètre. S'il n'y a pas exactement un paramètre, un message est affiché.
La structure de contrôle d'aiguillage à choix multiple |
Cette structure de contrôle permet d'effectuer un branchement conditionnel sur une séquence de commandes, en fonction de la valeur d'une variable.
Syntaxe :
case variable in cas1) liste_commandes_1 ;; cas2) liste_commandes_2 ;; cas3|cas4) liste_commandes_3 ;; *) liste_commandes_4 ;; esac |
Dans ce modèle :
case $# in 0) set variable=`pwd` ;; 1) set variable=$1 ;; *) echo "Erreur de syntaxe" ; exit ;; esac |
Dans ce "script", la variable variable reçoit comme valeur le répertoire courant (si le nombre de paramètres est nul) ou la valeur du paramètre positionnel $1 (s'il n'y a qu'un paramètre). S'il y a plus d'un paramètre, un message est affiché.
Remarque :
La commande break (équivalente à l'instruction break du langage C) existe, mais elle n'est pas nécessaire dans la structure de contrôle d'aiguillage à choix multiple, car le double point-virgule ;; est équivalent à cette commande.
La structure de contrôle "boucle For" |
Cette structure de contrôle permet de lancer une séquence de commandes en boucle.
Syntaxe :
for variable in liste_de_cas do liste_commandes done |
Dans ce modèle, liste_de_cas est une liste de chaînes de caractères, utilisant éventuellement les métacaractères du shell.
Exemple :
for fichier in `ls *.c` do chmod go-r $fichier done |
Cette séquence change les droits d'accès de tous les fichiers du répertoire courant comprenant l'extension .c
Remarques :
- Dans les structures de contrôle de boucles, la commande break peut être utilisée.
- La syntaxe suivante :
for i
do
...
est équivalente à :
for i in $*
do
...
La structure de contrôle "boucle While" |
Cette structure de contrôle permet d'exécuter une séquence de commandes en boucle tant qu'une condition est vérifiée.
Syntaxe :
while condition do liste_commandes done |
La structure de contrôle "boucle Until" |
Cette structure de contrôle permet de boucler sur une séquence de commandes jusqu'à ce qu'une condition devienne vraie.
Syntaxe :
until condition do liste_commandes done |
Les variables du shell |
Tout shell permet de gérer des variables non typées.
Le nom d'une variable peut comporter des lettres, des chiffres et le caractère
_ et le premier caractère ne peut pas être
un chiffre.
Avec le shell de Bourne, l'initialisation d'une variable s'effectue
à l'aide de la commande d'affectation, pour laquelle l'opérateur
= est utilisé, comme en langage C :
x=7
Attention : il ne doit pas y avoir d'espace ni avant ni après
l'opérateur =
Une variable peut recevoir comme valeur :
Remarques :
- Il existe, dans tout shell, un certain nombre de variables prédéfinies. Dans un shell de Bourne, sur tgv, il y en a 22, dont les noms ne comportent que des lettres majuscules, des chiffres et le caractère _
- Il ne faut pas confondre les variables d'un shell avec ses paramètres positionnels. Pour modifier la valeur d'un paramètre positionnel, il faut utiliser la commande set.
Exemple :
x=7
y=`pwd`
x=$y$x
echo $x
Si le répertoire de travail est /home/mod4g0 alors la commande echo produira l'affichage suivant :
/home/mod4g07
Lancement d'un "shell fils" |
Une séquence de commandes placée entre parenthèses est exécutée par un "sous-shell" ou "shell fils". Tout déplacement dans l'arborescence des répertoires et toute modification de la valeur d'une variable dans un shell fils ne sont plus effectifs dès le retour dans le shell père.
Exemple :
$ cd $ pwd /home/mod4g0 $ a=1 $ (cd /usr/include; a=2; echo $a; pwd) 2 /usr/include $ pwd /home/mod4g0 $ echo $a 1 |
Remarques :
- L'entrée et la sortie standard d'un shell fils peuvent être
redirigées au moment de l'appel. Ceci redirige alors implicitement
toutes les entrées et sorties standard des commandes appelées
dans le shell fils.
- Une variable x du shell père ne sera connue
dans un shell fils qu'après lancement de la commande export
x, mais les modifications de la valeur de x effectuées
dans le shell fils ne seront pas répercutées dans le shell
père.
Les fonctions en shell |
En shell, on appelle "fonction" une séquence de commandes repérable par un nom qui est le nom de la fonction. Les commandes constituant une fonction sont exécutées dans le cadre du shell courant, et non dans le cadre d'un shell fils, comme c'est le cas pour un script ou pour une séquence de commandes placées entre parenthèses.
Syntaxe de la déclaration d'une fonction :
nom()
{
commandes
}
Une fonction doit être déclarée avant d'être appelée. Pour appeler une fonction, il suffit d'utiliser son nom, sans les parenthèses. Comme pour un script shell, l'appel d'une fonction peut être éventuellement suivi d'une liste d'arguments, accessibles dans la fonction à l'aide des paramètres positionnels $1, $2, ..., $9 (les paramètres $# et $* sont également initialisés).
Une fonction se termine soit après exécution de la dernière commande située avant l'accolade fermante, auquel cas le code de retour est celui de cette dernière commande, soit après exécution d'une commande return [n], auquel cas le code de retour est l'argument n de la commande return (ou 0 si cet argument est absent). Dans les deux cas, le code de retour de la fonction est affecté au paramètre $? du shell courant.
Attention : la commande return ne peut être utilisée qu'à l'intérieur d'une fonction (remarquer l'analogie avec la fonction return du langage C).
Les principales commandes sous UNIX |
cat | grep | rm | |
cd | head | rmdir | |
chmod | kill | set | |
cmp | ls | sh | |
cp | shift | ||
cut | man | sort | |
date | mkdir | tail | |
echo | more | tee | |
eval | mv | test | |
exit | ps | tr | |
expr | pwd | wc | |
file | read | who |
La commande cat |
Elle permet d'afficher le contenu de l'entrée standard (ou, s'il y a lieu, le contenu du ou des fichiers donnés en arguments, en les concaténant) sur la sortie standard.
Syntaxe :
cat [-nbsuvet] [nom_fichier ...]
Options :
cat fich1 fich2 > fich3
Cette commande recopie fich1 puis, à la suite, fich2, le tout dans fich3
Codes d'erreur retournés :
La commande cd |
Elle permet de changer de répertoire, de manière relative ou absolue.
Syntaxe :
cd [nom_répertoire]
Lorsque la commande est tapée sans argument, on se positionne dans le répertoire principal ("home directory").
Options :
néant.
Exemple :
cd ../../TD
Codes d'erreur retournés :
La commande chmod |
Elle permet de modifier les droits d'accès à un ou à plusieurs fichiers ou répertoires dont on est le propriétaire.
Syntaxe :
chmod [-fR] [type_utilisateur...]+|-r|w|x nom_de_fichier [...]
cf. la description de la commande chmod, en tapant : man chmod
Exemple :
chmod g+rx /home/mod4g0/TD/td12ex*
Codes d'erreur retournés :
La commande cmp |
Elle effectue la comparaison des contenus de deux fichiers. Appelée sans option, elle renvoie le numéro du premier octet qui diffère. Elle ne retourne rien si les deux fichiers sont identiques.
Syntaxe :
cmp [-l] [-s] nom_fichier1 nom_fichier2 [skip1] [skip2]
Options :
cmp `ls|head -1` `ls|tail -1`
Codes d'erreur retournés :
- Si nom_fichier1 vaut -, alors la comparaison
est effectuée sur l'entrée standard.
- Les arguments optionnels skip1 et skip2
permettent de comparer le contenu du premier fichier, à partir de
l'octet numéro skip1, au contenu du deuxième
fichier, à partir de l'octet numéro skip2.
La commande cp |
Elle permet de copier un ou plusieurs fichiers, en changeant éventuellement leurs noms.
Syntaxe :
cp [-fip] nom_fichier nom_copie_fichier
Si on désire copier plusieurs fichiers en une seule commande, on peut utiliser les métacaractères du shell, comme dans l'exemple ci-après, mais on ne peut pas écrire une liste de fichiers.
Options :
cf. la description de la commande cp, en tapant : man cp
Exemple :
cp PREPA/TD/td12ex* TD
Cette commande copie tous les fichiers du répertoire PREPA/TD, de nom commençant par td12ex, dans le répertoire TD, sans changer leurs noms.
Codes d'erreur retournés :
La commande cut |
Elle permet de supprimer une partie des lignes d'un ou de plusieurs fichiers, ou de l'entrée standard.
Syntaxe :
cut -bliste [-n] [nom_fichier ...]
ou :
cut -cliste [nom_fichier ...]
ou :
cut -fliste [-ddélimiteur] [-s] [nom_fichier ...]
Options :
ls | cut -f1-2 -s -d'.'
Cette commande affiche la liste des noms de fichiers ou de sous-répertoires du répertoire courant comprenant une extension.
Codes d'erreur retournés :
Les options -bliste, -cliste, -fliste et -ddélimiteur peuvent être écrites avec un espace situé juste avant la liste ou le délimiteur.
La commande date |
Elle affiche la date.
Syntaxe :
date [-u] [+format]
Options :
cf. la description de la commande date, en tapant : man date
Exemple :
date
affiche la date sous la forme :
Codes d'erreur retournés :
Elle permet d'afficher une ou plusieurs chaînes de caractères
à l'écran. Cette commande est interprétée de
manière sensiblement différente d'un shell à un autre.
Syntaxe :
echo [chaîne ...]
Options :
néant.
Exemple :
echo "répertoire courant : `ls`"
Cette commande affiche le message répertoire courant :
, suivi de la liste des fichiers et sous-répertoires contenus
dans le répertoire courant.
Codes d'erreur retournés :
La commande echo reconnaît également certains
caractères spéciaux commençant par \
et appelés "caractères de contrôle", qui peuvent être
écrits de deux manières différentes :
Elle procède en deux temps :
eval [argument1 ...]
Options :
néant.
Exemple :
a=1
Cette séquence affichera la valeur 3, car la
première évaluation de la commande eval produit
la commande suivante :
b=$a1
Codes d'erreur retournés :
Elle permet de sortir du shell courant, en précisant éventuellement
la valeur du code de retour.
Syntaxe :
exit [code_retour]
Options :
néant.
Exemple :
Si la commande :
exit
est tapée dans la fenêtre "racine", cela provoque une déconnexion.
Codes d'erreur retournés :
Elle permet d'effectuer des opérations arithmétiques et
logiques, ainsi que des manipulations de chaînes de caractères,
et renvoie le résultat sur la sortie standard.
Syntaxe :
expr argument1 opérateur1 argument2 [opérateur2
argument3 ...]
où les arguments argument1, argument2,
argument3,... peuvent être des chaînes de caractères,
des entiers, des résultats de commandes, des valeurs de paramètres
positionnels, des valeurs de variables ou toute combinaison des cas précédents,
et où l'opérateur appartient à la
liste non exhaustive suivante :
néant.
Exemple 1 :
a=2
produira l'affichage de la valeur 1
Exemple 2 :
chaine="caracteres"
produira l'affichage suivant :
carac
On aurait pu écrire l'expression régulière sous
d'autres formes :
'\(.*\)t.*'
Codes d'erreur retournés :
Dans le cas où la commande expr est lancée
avec plusieurs opérateurs, il faut être vigilant, car l'ordre
des opérations ne se fait ni de gauche à droite, ni de droite
à gauche, mais suivant un ordre prédéfini de priorité
des opérateurs.
Elle permet de déterminer le type d'un ou de plusieurs fichiers,
ce type appartenant à la liste non exhaustive suivante :
file [-h] [-m types_fichiers] [-f fichier_liste] nom_fichier
[...]
Options :
cf. la description de la commande file, en tapant
: man file
Exemple :
Si le fichier exo1.c contient un programme C, la commande
:
file exo1.c
produira l'affichage suivant :
xo1.c: ascii text
Codes d'erreur retournés :
Elle permet de rechercher une expression régulière dans
un ou plusieurs fichiers donnés en arguments.
Syntaxe :
grep [-bchilnsvw] expression_régulière [nom_fichier
...]
Options :
grep 'grep' *
Cette commande affiche toutes les lignes de tous les fichiers du répertoire
de travail qui contiennent une occurence de la chaîne de caractères
grep
Codes d'erreur retournés :
Elle copie l'entrée standard, ou le ou les fichiers donnés
en arguments, sur la sortie standard, jusqu'à une position désignée.
Syntaxe :
head [-position|-nposition] [nom_fichier ...]
Options :
head -5 fichier.c
Cette commande renvoie les 5 premières lignes du fichier fichier.c
Codes d'erreur retournés :
Elle permet d'envoyer un signal à un ou à plusieurs processus
dont on connaît les identificateurs.
Syntaxe :
kill [-signal] identificateur_processus [...]
ou :
kill -l
Options :
kill -9 1345
Cette commande envoie le signal 9 au processus d'identificateur
1345
Codes d'erreur retournés :
Cette commande permet d'afficher le contenu d'un ou de plusieurs répertoires,
ou des renseignements concernant un ou plusieurs fichiers.
Syntaxe :
ls [-RadLCxmlnogrtucpFbqisf1AM] [nom_répertoire ...]
Cas particulier :
tgv% ls -l
Exemple 2 :
ls `ls`
Cette commande affiche la liste des fichiers du répertoire courant,
puis la liste des contenus des sous-répertoires du répertoire
courant.
Codes d'erreur retournés :
Elle permet d'envoyer ou de lire un courrier électronique.
Syntaxe :
Envoi d'un courrier : mail [-tw] [-mtype_du_message] adresse_destinataire
[...]
Options :
cf. la description de la commande mail, en tapant
: man mail
Exemple :
mail mod4g0@mdi.edu.ups-tlse.fr < message
Cette commande envoie le texte contenu dans le fichier message
à l'adresse du destinataire.
Codes d'erreur retournés :
Elle permet d'obtenir la description d'une commande à l'écran.
Syntaxe :
man [-] [-adFlrt] [-Marborescence] [-Tmacro-package]
[-ssection] nom_commande [...]
Options :
cf. la description de la commande man, en tapant
: man man
Exemple :
man ls
Codes d'erreur retournés :
Elle permet de créer un ou plusieurs répertoires, dont
les noms sont précisés en arguments. Elle renvoie un message
d'erreur dans les cas où la création est impossible.
Syntaxe :
mkdir [-mmode] [-p] nom_répertoire [...]
Options :
Supposons que l'on veuille créer le répertoire rep1
et son sous-répertoire ssrep1, dans le répertoire
rep du répertoire courant. Il faut taper la commande
:
mkdir -p rep/rep1/ssrep1Exemple 2 :
Supposons que l'on veuille créer le répertoire rep2
dans le répertoire courant, en enlevant les droits en lecture et
en écriture à toute personne non propriétaire du compte.
Il faut taper la commande :
mkdir -mog-rw rep2Codes d'erreur retournés
:
Elle permet de faire afficher le contenu d'un ou de plusieurs fichiers
page par page. Elle est une version plus interactive de la commande cat
:
more [-cdflrsuw] [-lignes] [+numéro_ligne] [+/modèle]
[nom_fichier ...]
Options :
cf. la description de la commande more, en tapant
: man more
Exemple :
more temp
Codes d'erreur retournés :
cf. la description de la commande more, en tapant
: man more
Elle permet de renommer un fichiers ou un répertoire, ou de déplacer
un ou plusieurs fichiers dans l'arborescence, en changeant éventuellement
leurs noms.
Syntaxe :
mv [-fi] ancien_nom nouveau_nom
ou :
mv [-fi] nom_fichier ... nom_répertoire
Options :
cf. la description de la commande mv, en tapant
: man mv
Exemple 1 :
mv charabia.c ex1.c
Exemple 2 :
mv TD/td12ex* TD/td13ex* PREPA
Codes d'erreur retournés :
Elle permet d'afficher la liste des processus en cours d'activité.
Lancée sans option, elle n'affiche que les processus actifs de l'utilisateur
associés au terminal utilisé.
Syntaxe :
ps [-aAcdefjl] [-g nom] [-n nom] [[-o format] ...] [-p nom] [-s
nom] [-t terminaux] [-u utilisateurs] [-U nom] [-G nom]
Les processus sont affichés suivant un format variable, mais
le format par défaut comprend les quatre champs suivants sur une
même ligne :
ps -e | grep asedit | wc -l
Cette commande retourne le nombre de processus en cours d'exécution
associés à l'éditeur asedit
Codes d'erreur retournés :
Elle affiche le nom absolu du répertoire de travail (appelé
aussi "répertoire courant").
Syntaxe :
pwd
Options :
néant.
Exemple :
tgv% pwd
Codes d'erreur retournés :
Cette commande permet d'affecter des valeurs à des variables
à partir de l'entrée standard.
read [-r] nom_variable [...]
Options :
-r : le caractère \ est considéré
comme un caractère ordinaire.
Exemple :
read a b
Si la ligne suivante est tapée au clavier :
c'est un exemple
alors les commandes echo produiront les affichages suivants
:
c'est
ce qui signifie que, si le nombre de mots (séparés par
des espaces ou des tabulations) est supérieur au nombre d'arguments
de la commande read, alors la variable correspondant au
dernier argument reçoit toute la fin de la ligne.
Codes d'erreur retournés :
Elle permet d'effacer un ou plusieurs fichiers passés en arguments.
Syntaxe :
rm [-f] [-i] nom_fichier [...]
Options :
rm *
Cet exemple doit être évité en général
!
Codes d'erreur retournés :
Elle permet d'effacer un ou plusieurs répertoires passés
en arguments. Ces répertoires doivent être vides.
Syntaxe :
rmdir [-ps] nom_répertoire ...
Options :
cf. la description de la commande rmdir, en tapant
: man rmdir
Exemple :
rmdir ..
Cette commande provoque systématiquement une erreur, car le répertoire
père du répertoire de travail ne peut pas être vide
!
Codes d'erreur retournés :
Cette commande permet d'affecter des valeurs aux paramètres positionnels
$1, $2, $3, ..., $9.
Appelée sans paramètres, elle permet aussi d'afficher les
valeurs de toutes les variables du shell courant :
Syntaxe :
set [-aefhkntuvx] [valeur1] [...]
Options :
cf. la description de la commande set, en tapant
: man set
Exemple 1 :
set alpha beta
Cette commande affecte la valeur alpha au paramètre
positionnel $1, et la valeur beta au paramètre
positionnel $2
Exemple 2 :
x=1
produira l'affichage suivant :
DISPLAY=141.115.12.137:0
Codes d'erreur retournés :
cf. la description de la commande set, en tapant
: man set
Cette commande permet de lancer un shell fils de type shell de Bourne.
Elle permet aussi d'exécuter un script shell dans le cadre de ce
shell fils.
Syntaxe 1 :
sh [-acefhiknprstuvx]
Le shell fils qui est lancé lit et interprète les commandes
tapées sur l'entrée standard. Pour retourner au shell père,
il faut taper la commande exit
Syntaxe 2 :
sh [-acefhiknprstuvx] [nom_script ...]
Les arguments sont des noms de scripts shell.
Options :
cf. la description de la commande sh, en tapant
: man sh
Exemple 1 :
tgv% sh
Exemple 2 :
sh exo1.sh
Cette commande lance le script shell contenu dans le fichier exo1.sh
chmod u+x exo1.sh
puis en tapant :
exo1.sh
Codes d'erreur retournés :
Le code d'erreur retourné par la commande sh
est le code d'erreur retourné par la dernière commande exécutée
dans le cadre du shell fils. Dans le cas où un script shell est
lancé, si une commande retourne un code d'erreur non nul, alors
l'exécution du script est interrompue.
Elle permet de décaler les arguments passés à l'appel
d'un script d'un rang ou de n rangs vers la droite.
Syntaxe :
shift [n]
Options :
néant.
Exemple :
Soit le script :
Voici deux exemples d'exécution de ce script, avec des nombres
d'arguments différents :
Avant décalage : 10 9 8 7 6 5 4 3 2
$ deca.sh 5 4 3 2 1
Avant décalage : 5 4 3 2 1
Donc $1 reçoit la valeur de $2,
$2 reçoit la valeur de $3, etc...
Codes d'erreur retournés :
- Lors de l'appel de la commande shift, l'absence d'argument
n équivaut à une valeur de cet argument égale
à 1.
Elle lit un ou plusieurs fichiers ou l'entrée standard, et affiche
les différentes lignes, triées sur un ou plusieurs champs
(par défaut, sur un seul champ qui est la ligne), selon l'ordre
lexicographique (les séparateurs de deux champs sont par défaut
l'espace et la tabulation).
Syntaxe :
sort [-cmu] [-o sortie] [-T répertoire] [-y[mémoire]]
[-dfiMnr] [-b] [-t caractère] [-k clé] [+pos1 [-pos2]] [nom_fichier
...]
Options :
Si le fichier liste_noms contient une liste de noms-prénoms
structurés de la manière suivante :
Alain VERSE
alors la commande :
sort +1 liste_noms
affichera ce fichier, trié par ordre alphabétique des
noms de famille.
Codes d'erreur retournés :
Elle copie l'entrée standard, ou le fichier donné en argument,
sur la sortie standard, à partir de la position désignée.
Syntaxe :
tail [+/-position[lbcr]] [nom_fichier]
Options :
tail -15c fichier.c
Cette commande renvoie les 15 derniers caractères du fichier
fichier.c
Codes d'erreur retournés :
Elle permet d'afficher l'entrée standard simultanément
sur la sortie standard et sur le ou les fichiers passés en arguments.
Syntaxe :
tee [-ai] [nom_fichier ...]
Options :
ls | tee liste_fichiers
Cette commande affiche, d'une part, le contenu du répertoire
courant à l'écran et écrit, d'autre part, ce contenu
dans le fichier liste_fichiers
Codes d'erreur retournés :
Elle permet d'effectuer des tests de comparaison, en renvoyant la valeur
0 lorsque la comparaison est vraie, et une autre valeur
sinon. Cette commande est surtout utile en complément aux structures
de contrôle, comme la structure de contrôle de condition qui
sera vue dans le paragraphe suivant.
Syntaxe 1 :
test comparaison
ou :
[ comparaison ](bien respecter les espaces dans ce cas
!)
La comparaison comparaison peut être la combinaison
booléenne de plusieurs comparaisons élémentaires :
! \( comparaison1 -o comparaison2 \)
Chaque comparaison élémentaire doit être écrite
avec la syntaxe suivante :
v1 comparateur v2
où v1 et v2 sont des expressions
du shell courant.
Le comparateur comparateur ne s'écrit pas comme
en C. Si v1 et v2 sont entières
:
Pour tester si la variable chaine a comme valeur la
chaîne vide, on ne peut pas écrire test $chaine = ""
car, si cette chaîne est vraiment vide, après évaluation
des métacaractères, cette commande sera évaluée
sous la forme test = "", qui est incorrecte. Cela justifie
l'introduction de la deuxième syntaxe suivante pour la commande
test :
Syntaxe 2 :
test chaine
Dans cette écriture, la commande test teste si
chaine est une chaîne vide. Il existe une troisième
syntaxe pour la commande test :
Syntaxe 3 :
test -fdrwx nom ...
Options :
test $1 -gt 0 -a $# -eq 2
Exemple 2 :
test $chaine
Exemple 3 :
test -d /home/mod4g0/TD
Codes d'erreur retournés :
Elle permet le "transcodage" de caractères entre l'entrée
standard et la sortie standard. Cette commande fonctionne aussi avec les
caractères de contrôle déjà signalés
plus haut.
Syntaxe :
tr -ds chaine
ou :
tr [-c] chaine1 chaine2
Options :
tr 'abc' 'ABC'
Cette commande attend l'entrée de données au clavier.
Si on tape :
calebasse
chaque occurence d'un a est remplacé par un A,
chaque occurence d'un b est remplacé par un B
et chaque occurence d'un c est remplacé par un C,
ce qui donne dans le cas présent :
CAleBAsse
Exemple 2 :
tr '\012' ' '
Cette commande va substituer chaque saut de ligne par un espace.
Codes d'erreur retournés :
Cette commande (abréviation de "word count") permet de compter
le nombre de lignes, de mots ou de lettres dans le ou les fichiers passés
en arguments ou, à défaut, sur l'entrée standard.
Syntaxe :
wc [-c|-m|-C] [-lw] [nom_fichier ...]
Options :
wc -l exam
Cette commande affiche le nombre de lignes du fichier exam
Codes d'erreur retournés :
La commande echo
Remarque :
La commande eval
Syntaxe :
c=a
a1=3
eval b=\$$c$a
echo $b
La commande exit
La commande expr
Options :
Dans le cas où la correspondance est impossible, le résultat
produit est la chaîne vide.
b=3
a=`expr $b % $a`
echo $a
sschaine=`expr $chaine : '\(.*\)t'`
echo $sschaine
'\(.*\)teres'
...
Remarque :
La commande file
Syntaxe :
La commande grep
Exemple :
La commande head
Exemple :
La commande kill
Exemple :
Le signal 9, qui permet de "tuer" un processus, est
le plus souvent utilisé. Le signal envoyé par défaut
est 15
La commande ls
ou :
ls [-RadLCxmlnogrtucpFbqisf1AM] [nom_fichier ...]
Options :
Exemple 1 :
La commande mail
Lecture du courrier : mail [-ehpPqr] [-ffichier]
La commande man
La commande mkdir
Exemple 1 :
La commande more
Syntaxe :
La commande mv
La commande ps
Options :
Exemple :
La commande pwd
/home/mod4g0/TD
La commande read
Syntaxe :
echo $a
echo $b
un exemple
La commande rm
Exemple :
La commande rmdir
La commande set
Cette commande est très différente entre shell de Bourne,
Korn shell et C_shell. On rappelle que c'est le shell de Bourne qui
est présenté ici.
set
GUIDEHOME=/usr/openwin/devguide
HOME=/home/mod4g0
...
x=1
La commande sh
$ pwd
/home/mod4g0
$ exit
tgv%
Une façon équivalente de lancer ce script est de le rendre
exécutable, en tapant la commande :
La commande shift
deca.sh
echo "\nAvant décalage : $1 $2 $3 $4 $5 $6 $7 $8 $9"
shift
echo "Après décalage : $1 $2 $3 $4 $5 $6 $7 $8
$9\n"
$ deca.sh 10 9 8 7 6 5 4 3 2 1
Après décalage : 9 8 7 6 5 4 3 2 1
Après décalage : 4 3 2 1
Remarques :
- La valeur de $# est mise à jour par la commande
shift.
La commande sort
Exemple :
Jean REVE
...
La commande tail
Exemple :
La commande tee
Exemple :
La commande test
Des parenthèses précédées de caractères
\ (les parenthèses étant des métacaractères
du shell) peuvent être nécessaires en cas combinaisons un
peu plus compliquées, pour préciser les priorités,
comme dans l'exemple suivant :
Si v1 et v2 sont des chaînes de caractères
:
Remarque :
Exemple 1 :
La commande tr
Exemple 1 :
La commande wc
Exemple :
Ces pages ont été réalisées
par J.D. Durou et Ph. Joly. Pour tout commentaire, envoyer un mail à
durou@irit.fr ou à
joly@irit.fr