Cours Unix
Cours Unix
2 Architecture
2.1 Architecture hardware . . . . . 2.1.1 L'unit centrale ou CPU 2.1.2 La m moire centrale . . 2.1.3 Les p riph riques . . . . 2.2 Le syst me UNIX . . . . . . . .
9 9 10 11 11
3 Introduction UNIX
3.1 Introduction . . . . . . . . . . . . . 3.2 Le shell . . . . . . . . . . . . . . . 3.3 Fichiers et r pertoires . . . . . . . . 3.3.1 les droits d'acc s . . . . . . 3.3.2 les liens sur les chiers . . . 3.4 R sum des commandes de base . . 3.5 Utilisation du shell . . . . . . . . . 3.5.1 les caract res g n riques . . 3.5.2 les entr es sorties . . . . . . 3.5.3 le contr le de processus . . . 3.6 Editeur de texte . . . . . . . . . . . 3.7 La programmation du shell . . . . . 3.7.1 les variables . . . . . . . . . 3.7.2 les structures de contr le . . 3.7.3 les programmes du shell . . 3.7.4 les chiers de con gurations 3.8 L'environnement X Window . . . .
13
13 14 15 15 16 16 19 19 20 20 21 22 22 23 25 26 26
4.1 Introduction . . . . . . . . . . . . . . . . . 4.1.1 Expressions r guli res . . . . . . . 4.1.2 Quelques ltres . . . . . . . . . . . 4.2 awk langage de traitement d'expressions 4.3 bc langage pour le calcul num rique . . . 4.4 Exemple 1 . . . . . . . . . . . . . . . . . . 4.4.1 Calcul de l'int grale . . . . . . . . . 4.4.2 Programme d'analyse . . . . . . . . 4.5 application . . . . . . . . . . . . . . . . . . 4.6 Exemple 2 . . . . . . . . . . . . . . . . . . 4.6.1 calcul de la valeur d'une fonction . 4.6.2 programme shell . . . . . . . . . . 4.6.3 application . . . . . . . . . . . . . 4.7 Exemple 3 . . . . . . . . . . . . . . . . . . 4.7.1 M thode num rique . . . . . . . . . 4.7.2 programme bc . . . . . . . . . . . . 4.7.3 programme shell . . . . . . . . . . 4.8 Make . . . . . . . . . . . . . . . . . . . . . A 4.9 LTEX . . . . . . . . . . . . . . . . . . . . 4.10 Gnuplot . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
29
29 29 30 30 32 34 34 35 36 36 37 37 38 38 38 39 41 42 42 42
CHAPITRE 1. INTRODUCTION
Chapitre 1 Introduction
Ce cours s'adresse des tudiants d sirants approfondir leurs connaissances des outils informatiques pour le calcul scienti que.
1.1 Historique
Unix a t d velopp au laboratoire Bell en 1969 par K. Thompson, sur un PDP-7, puis r crit en 1973 en langage C, par K.Thompson et D. Richtie, permettant d'avoir un syst me d'exploitation portable sur une large gamme d'ordinateurs. On le trouve aujourd'hui sur des machines allant de PC 386/486, aux stations de travails (SUN,DEC,HP) et aux super-calculateurs (IBM , CRAY). Une autre raison de son succ s est qu'il a t largement di us , utilis et am lior dans les universit s, en particulier am ricaine. En n et surtout c'est un bon syst me d'exploitation en particulier pour les programmeurs, et qui a su voluer. UNIX est construit autour d'une id e forte: la puissance d'un syst me provient plus des relations entre les programmes que des programmes euxm mes. Beaucoup de programmes UNIX font, de fa on isol des traitements triviaux; combin s avec d'autres, ils deviennent des outils g n raux et performants. La solution d'un probl me sous UNIX ne passe pas forc ment par l' criture d'un programme sp ci que, mais souvent par une utilisation combin e et l gante des outils standards.
CHAPITRE 2. ARCHITECTURE en permettant l'ex cution d'une instruction par cycle et en minimisant les changes avec la m moire externe (SUN SPARC, DEC ALPHA, SGI MIPS)
Chapitre 2 Architecture
2.1 Architecture hardware
Un ordinateur poss de l'architecture suivante:
3. architecture vectorielle Cette architecture a t d velopp par CRAY pour des applications de calcul scienti que avec un traitement e cace des op rations vectorielles. Malheureusement, pour pouvoir b n cier de cette puissance, il faut vectoriser les codes, ce qui n'est pas toujours possible. Les super-calculateurs actuels (CRAY C90, IBM 3090, FUJITSU, NEC ..) 4. architecture super-scalaire Cette architecture correspond une optimisation des architectures RISC, avec l'utilisation de caches de donn es et d'instructions intelligents, de pipe-lines d'instructions permettant d'ex cuter l'instruction suivante avant la n de l'instruction courante, et d'unit s arithm tiques s par es pour la multiplication et l'addition (DEC ALPHA, MIPS R8000, IBM POWERPC, PENTIUM). 5. architecture parall le Utilisation de plusieurs CPU pour augmenter les performances, avec des architectures de type SIMD ou MIMD. C'est l'architecture d'avenir, pour le calcul intensif. Un autre l ment important pour les applications est la puissance de calcul en nombres ottants ou MFLOPS. Ainsi les processeurs RISC ont une puissance de l'ordre de 20-50 MFLOPS, les processeurs super-scalaires de l'ordre de 100200 MFLOPS et les processeurs vectoriels de l'ordre de 200-1000 MFLOPS. La m moire permet le stockage des donn es et des instructions, lors de l'ex cution d'un programme. La m moire est caract ris e par sa vitesse d'acc s et on distingue 2 types. 1. la m moire statique ou SRAM C'est la plus rapide (10 20 ns), mais la plus ch re. Elle est utilis comme m moire cache (de 256 Ko a 1 Mo sur station).
Elle est constitu e d'un ou plusieurs composants ou CHIP (de type microprocesseur). Une unit centrale est caract ris e par la taille des registres l mentaires (32 bits, 64 bits), la taille du bus de donn es (32 bits, 64 bits, 128 bits) et du bus d'adresses (32 bits, 64 bits, 128 bits), et son cycle d'horloge (en Mhz). Une instruction typique s'execute en un ou plus cycle, et la puissance d'un processeur peux tre caract ris par des MIPS (Millions Instructions Par Seconde). Typiquement, les stations de travail ont une architecture 32 bits, voir 64 bits et atteignent de 20 a 200 MIPS. Une unit centrale est aussi caract ris par son architecture: 1. architecture g n rale CISC Le jeux d'instructions l mentaire est tr s riche et le nombre de registres faible (Intel 486, Motorola 68020). Les instructions complexes s'executent sur plusieurs cycles machines. 2. architecture RISC Le jeux d'instructions est r duit (obtenu par analyse statistique du code g n r par les compilateurs), mais il y plus de registres internes. Avec de bons compilateurs, cette architecture o re de meilleures performances,
10
CHAPITRE 2. ARCHITECTURE qui correspond la partie syst me, et qui g re la machine et ses p riph riques ( l'aide de drivers). 2. des interfaces avec un interpr teur de commandes (ou shell) et des interfaces graphiques X11. Sous UNIX il existe plusieurs shells ( Bourne shell, C shell ...) 3. un niveau utilisateur avec des outils de d veloppement, des librairies, des compilateurs, et les programmes utilisateurs. Les caract ristiques du syst me UNIX sont : 1. un syst me standard 2. un syst me multi-taches 3. un syst me multi-utilisateurs 4. une allocation dynamique des ressources de la machine 5. une gestion de m moire pagin e, qui permet au syst me d'allouer plus de m moire que la m moire physiquement disponible en utilisant une partie du disque dur (swap disque).
C C++ F77
Fig.
2. la m moire dynamique ou DRAM Elle est plus lente (60 70 ns), mais elle permet des taux d'int grations plus importants (CHIPS de 4,8,16 Mbits). Sur station, on a de 32Mo 256Mo de m moire DRAM. Les p riph riques sont connect s au calculateur travers une interface sp ci que (PCI, SCSI). On distingue entre autre 1. les disques durs ils servent de m moire de stockage, mais on un temps d'acc s long par rapport la m moire (de l'ordre de la 10 ms). Leurs capacit s varient du Giga-octets au Tera-octets. 2. les crans graphiques ils permettent l'utilisation d'outils graphiques sous X11. Ils ont une r solution de 1280x1024 en 256 couleurs (8 bits) ou en vrais couleurs (24 bits).
11
12
3.2 Le shell
Le shell est l'interpr teur de commandes qui n'est rien d'autre qu'un programme qui prend ce que l'utilisateur tape et traduit ces commandes en instructions destin es au syst me ( quivalent en plus puissant COMMAND.COM sous MS-DOS). Le shell n'est juste qu'une interface. Les interfaces avec le syst me sont nombreuses et vari es, depuis les nombreux shells disponibles jusqu'au syst me X Window, qui vous permet d'utiliser des commandes en utilisant le clavier ou la souris, avec a chage sur un cran graphique du plus bel e et. Une fois connect , le syst me lance un shell (login shell), en a chant une invite l' cran, p.e. /home/dupont$ , indiquant qu'il est pr t prendre des commandes. Pour terminer une session (et arr ter le shell), on tape la commande
/home/dupont$ exit
(ou logout, ou simplement ctrl D ) La syntaxe g n rale d'une commande du shell est
/home/dupont$ cde -options] arguments]
Attention le syst me UNIX fait la di rence entre les minuscules, et les majuscules. Les commandes reconnues par le shell sont soient des commandes internes, soient des programmes qui se trouvent dans un des r pertoires du PATH ou chemin d'acc s. Pour obtenir de l'aide sur une commande on utilise la commande man (ou xman sous X11):
/home/dupont$ man cde
Le shell tant un programme, on peut l'ex cuter l'int rieur d'un shell comme une commande. Chaque shell est con gurable, l'aide d'un chier de con guration. Les principaux shells sont: 1. sh shell standard ou Bourne shell ( chier de con guration .pro le) 2. csh C shell ( chier de con guration .cshrc) 3. bash version tendue du Bourne shell ( chier de con guration .bshrc)
13
14
Le premier caract re ( - ) repr sente le type du chier (ici un chier ordinaire). Les trois lettres suivantes ( rw- ) repr sentent les droits en lecture r (oui), - (non) , criture w (oui) , - (non) et d'ex cution x (oui) , (non) du propri taire (owner), idem pour les trois suivantes pour le groupe, et pour les trois derni res pour les autres utilisateurs (other). Pour modi er les protections d'un chier, on utilise la commande chmod.
chmod {a,u,g,o}{+,-}{r,w,x} h
chiersi
avec all (tous), user (propri taire), group (groupe) , ou other (les autres). Sous UNIX, un chier est physiquement identi par un num ro ou inode, et on associe ensuite un nom de chier cette inode. On peut donc associer plusieurs noms di rents un m me chier, gr ce la cr ation de lien avec la commande ln
ln file1 file2
Chaque chier poss de des droits d'acc s, que l'on peut visualiser avec la commande ls -l.
/home/rene/notes$ ls -l liste.courses -rw-r--r-1 rene users 505 Mar 13 19:05 liste.courses
pour cr er un nouveau lien le2 vers le chier le1. On peut utiliser une autre forme de lien, le lien symbolique, qui indique cette fois le chemin d'acc s au chier. Pour cela on utilise l'option -s de la commande ln.
/home/rene/notes$
Le premier champ a ch repr sente les di rentes permissions d'acc s au chier. Le troisi me indique le propri taire (rene), et le quatri me indique le groupe auquel ce chier appartient (users). Le cinqui me est la taille en octets, le sixi me la date de derni re modi cation. Le dernier champ est bien videmment le nom du chier (liste.courses) La cha ne -rw-r r donne dans l'ordre, les droits qu'ont respectivement le propri taire, le groupe, et tous les autres sur ce chier.
15
16
rm
Notez galement que beaucoup de ces commandes prennent une liste de chiers ou de r pertoires comme arguments, d not s par h chier1i . . . h chierNi . Par exemple, la commande cp prend une liste de chiers copier, suivie de la destination, chier ou r pertoire. Lorsque l'on copie plus d'un chier la fois, la destination doit tre un r pertoire.
cd
ls
cp
mv
Change le r pertoire de travail courant. Syntaxe: cd hr pertoirei hr pertoirei est le r pertoire de destination. ( . se r f re au r pertoire courant, .. au parent.) Exemple : cd ../toto positionne le r pertoire courant sur ../toto. A che des informations sur les chiers ou r pertoires. Syntaxe: ls h chier1i h chier2i ...h chierNi O h chier1i h chierNi sont les noms de chiers ou r pertoires. Options: Il y a vraiment beaucoup d'options. Les plus couramment utilis es sont -F (pour a cher des informations sur le type de chier), et -l (donnant un format long comprenant la taille du chier, le propri taire, les droits d'acc s, et ainsi de suite. Ces d tails seront expliqu s plus tard.) Exemple : ls -lF /usr/bin a chera le contenu du r pertoire /usr/bin. Copie un (des) chier(s) dans un autre chier ou r pertoire. Syntaxe: cp h chier1i h chier2i ...h chierNi hdestinationi O h chier1i h chierNi sont les chiers copier, et hdestinationi est le chier de destination ou le r pertoire. Exemple : cp ../frog joe copie le chier ../frog dans le chier ou le r pertoire joe. D place un (des) chier(s) vers un autre chier ou r pertoire. Cette commande r alise l' quivalent d'une copie suivie de la suppression de l'original. Elle peut tre utilis e pour renommer des chiers, comme dans la comande MS-DOS RENAME. Syntaxe: mv h chier1i h chier2i ...h chierNi hdestinationi O h chier1i h chierNi sont les chiers d placer, et hdestinationi est le chier ou le r pertoire de destination. Exemple : mv ../frog joe d place le chier ../frog dans le
mkdir
rmdir
man
more
chier ou le r pertoire joe. Supprime des chiers. Notez bien que lorsque des chiers sont supprim s sous UNIX, c'est irr m diable, il est impossible de revenir en arri re. Syntaxe: rm h chier1i h chier2i ...h chierNi O h chier1i h chierNi sont les chiers supprimer. Options: -i demandera con rmation avant chaque e acement de chier. Exemple : rm -i /home/dupont/recettes/cassoulet /home/dupont/rece e acera les chiers cassoulet et macdo si l'op ration est bien con rm e par l'op rateur. Cr e de nouveaux r pertoires. Syntaxe: mkdir hdir1i hdir2i ...hdirNi O hdir1i hdirNi sont les r pertoires cr er. Exemple : mkdir /tmp/test cr era le r pertoire test dans le r pertoire /tmp. Cette commande supprime les r pertoires vides. Lors de l'utilisation de rmdir, votre r pertoire courant ne doit pas faire partie du r pertoire supprimer. Syntaxe: rmdir hdir1i hdir2i ...hdirNi O hdir1i hdirNi sont les r pertoires supprimer. Exemple : rmdir /tmp/test supprime le r pertoire test dans /tmp, si il est vide (et s'il existe). A che la page de manuel pour la commande ou la ressource donn e. (c'est dire, n'importe quel utilitaire syst me qui n'est pas une commande, comme une fonction de librairie). Syntaxe: man hcommandei O hcommandei est le nom de la commande ou ressource sur laquelle on d sire de l'aide. Exemple : man ls donne la description de la commande ls. indexmore@more A che le contenu des chiers, un cran la fois. Syntaxe: more h chier1i h chier2i ...h chierNi O h chier1i h chierNi sont les chiers examiner.
17
18
`cde` # ;
CHAPITRE 3. INTRODUCTION UNIX remplace par le r sultat de la commande d but de commentaire n de commande
echo
grep
Exemple : more /etc/termcap a che le chier /etc/termcap. Normalement destin e concat ner des chiers, la commande cat est aussi utilis e pour a cher tout le contenu d'un chier d'un coup. Syntaxe: cat h chier1i h cher2i ...h chierNi O h chier1i h chierNi sont les chiers concern s. Exemple : cat /etc/passwd a che le contenu du chier /etc/passwd. A che simplement les arguments qu'on lui passe. Syntaxe: echo harg1i harg2i ...hargNi O harg1i hargNi sont les arguments a cher. Example: echo "Bonjour tout le monde" a chera la cha ne Bonjour tout le monde . A che toutes les lignes dans le (les) chier(s) correspondant l'expression donn e. Syntaxe: grep hexpressioni h chier1i h chier2i ...h chierNi O hexpressioni est une expression rationnelle, et h chier1i h chierNi les chiers dans lesquels la rechercher. Exemple : grep local /etc/hosts a chera toutes les lignes du chier /etc/hosts qui contiennent l'expression local .
Chaque programme UNIX poss de une entr e standard stdin (en g n rale le clavier), une sortie standard stdout et une sortie d'erreur stderr qui sont en g n rale confondues avec la sortie cran. Pour beaucoup de commandes UNIX, si on ne sp ci e pas de chier comme param tre, les donn es sont lues sur l'entr e standard (exemple cat ). Pour rediriger les entr es ou sorties vers des chiers on utilise les caract res g n riques suivants: h prog h le remplace l'entr e standard de prog par le contenu de le. hhstr prog hh str l'entr e standard suit jusqu' l'apparition de str dans le ot de donn es. i prog i le crit la sortie standard de prog dans le. ii prog ii le ajoute la sortie standard de prog dans le. | prog1 | prog2 cr ation d'un pipe en connectant la sortie de prog1 l'entr e de prog2
remplace n'importe quelle suite de caract re remplace 1 caract re remplace un caract re parmi ccc; (0-9) et (a-b) sont possibles protection du caract re x (i.e non interpr tation) prend xxx litt ralement sans interpr tation idem mais avec interpr tation de \
Un processus d signe un programme s'ex cutant en machine. La commande ps a che une liste des processus en cours sur la machine. Voici un exemple:
/home/marcel$ ps PID TT STAT 24 3 S 161 3 R TIME COMMAND 0:03 (bash) 0:00 ps
19
20
Chaque processus est identi par un num ro: le PID ou Process IDent. Un processus peut soit tre ex cut en avant plan foreground, c'est le processus connect l'entr e standard et la sortie standard, ou en arri re plan background comme t che de fond. Certains traitements longs peuvent tre lancer en tache de fond en utilisant le caract re & la n de la commande. On peut aussi suspendre la commande courante avec ctrl Z , et la mettre en t che de fond avec bg, ou la reprendre avec fg. Pour arr ter un processus en avant-plan, on peut utiliser ctrl C . Pour arr ter un processus en tache de fond on le tue avec la commande kill pid (ou pid est le num ro du processus).
s/str1/str2/ substitue la cha ne str1 par str2 dans la ligne courante /str1/ recherche str1 dans le chier n se positionne la ligne n . a che le num ro de la ligne courante $ se positionne la derni re ligne En combinant ces commandes, et en utilisant des expressions r guli res (cf le man de vi et ed), on peut e ectuer des transformations complexes sur un chier.
:1,$s/str1/str2/g
Sous vi, il existe 2 modes: un mode commande et un mode dition, qui permet d'ins rer du texte et de se d placer (avec les ches). En mode dition on ins re du texte apr s avoir tap i , on ajoute du texte la n de la ligne en tapant a , on e ace un caract re en tapant sur x , on e ace une ligne avec dd , un mot avec dw , on remplace un texte avec R , un caract re avec r , et change les minuscules en majuscules. On peut faire pr c der une commande par un chi re n pour la r p ter n fois. On passe en mode commande en tapant sur la touche esc , puis sur : . Les principales commandes sont q sortie de l' diteur w criture des modi cations dans le chier, ou dans un chier di rent si on le sp ci e r le2 insertion du chier le2 e new le lecture d'un nouveau chier ! cde ex cution d'une commande cde par le shell
3.7. LA PROGRAMMATION DU SHELL ou de fonctions de manipulation de cha nes de caract res. Pour a cher la valeur d'une variable, on fait pr c der son nom par
echo $var
21
$
22
commande1
else fi
Pour obtenir la liste des variables, on utilise la commande set. Par d faut, les variables ainsi d nies sont locales au shell courant. Pour rendre globale ces variables, il faut les exporter (c.a.d. les rendre accessibles par toutes les commandes (script,sous-shell,programmes)), et les placer dans votre environnement. Pour cela on utilise la commande export sous sh (setenv sous csh).
var = "cha ne" export var
pour tester le r sultat d'une commande. En e et chaque commande UNIX retourne un code d'erreur err indiquant si la commande s'est ex cut e sans erreur (dans ce cas err = 0), ou non (dans ce cas err > 0 contient le code d'erreur). Une fonction du shell ] test permet de tester des conditions logiques, arithm tiques, ou des tests sur les nom de chiers en reportant le bon code d'erreur (voir le man). Par exemple
if test $var = "essai"
Le shell poss de par d faut un certain nombre de variables d'environnement, dont la plus importante est PATH (par convention les variables d'environnement sont crites en majuscule). La variable PATH contient le chemin d'acc s au commande, c'est dire la liste des r pertoires ou le shell va chercher les commandes que vous lui tap s. Pour modi er cette variable, et indiquer au shell de rechercher les commandes dans votre r pertoire /bin:
PATH= $PATH: /bin
permet de tester si la variable var est gale ssai(Attention noter les espaces entre les mots, ils sont indispensables). On peut aussi utiliser la syntaxe suivante utilisant et ] .
if $var = "essai" ]
3. le choix multiple
case
cas1) cas2)
var
in
commande1 commande2
esac
commandes
done
commande
commande
commande
then
23
24
Pour executer ce chier, on tape simplement run file, apr s l'avoir rendu executable. La premi re ligne indique que le shell utilis est sh (i.e la commande run quivaut sh run Les shell sous unix ont des chiers de con gurations (comme beaucoup de programmes UNIX), qui permettent de les adapter vos besoins. Ces chiers sont dans le r pertoire principale (ou $HOME). .profile sh shell .cshrc csh shell .login login shell .logout logout Ils contiennent les instructions de con gurations ex cuter au d but du programme (par example la d nition d'alias pour les commandes courantes avec la commande alias, et la d nition des variables d'environnement (qui est une autre fa on de con gurer un programme sous UNIX).
les calculs arithm tiques se font sur des entiers avec les op rations +,
- , * , /, %
Un programme du shell consiste a placer une liste de commandes dans un chier le puis rendre se chier ex cutable l'aide de la commande chmod +x le. Un programme shell peut poss der des arguments, qui sont repr sent s par les variables suivantes: $n nieme argument $# nbre d'arguments Un exemple de chier shell, que nous appellerons run , a la structure suivante
#!/bin/sh # prog1 res # test le nombre d'arguments if $# != 1 ] then echo syntaxe $0 fichier exit 1 fi # test si le fichier de resultat existe pour eviter de l'ecrasser if test -f $1 echo fichier $1 existe exit 1 fi # execution du progamme prog1 << EOF >$1 val1 val2 ... EOF
25
26
sera le programme xman pour avoir une documentation plus pr cise sur les commandes X11.
dupont rene X386 bin emacs etc g++-include include lib local bin emacs etc lib man spool src linux tmp
Fig.
27
28
CHAPITRE 4. LES OUTILS UNIX La syntaxe g n rale d'un ltre est la suivante:
filtre h
commandesi
chiersi
Si on ne sp ci e pas de nom de chiers, l'entr e standard est utilis e. sort h-ni h+Ni trie son entr e suivant l'ordre alphab tique ou num rique (si -n) en ignorant les N premi res colonnes tail h-l ni a che les n derni res ligne de l'entr e head h-l ni a che les n premi res ligne de l'entr e wc h-clwi compte le nombre de caract res c, lignes l ou mots w de l'entr e grep 'expr' recherche et a che les lignes de l'entr e satisfaisant l'expression r guli re expr (on utilise en g n rale les quotes ' pour viter l'interpr tation des caract res sp ciaux par le shell. sed 'cdes' sed est un diteur de ots, qui applique les commandes d' dition cdes chaque ligne du chier d'entr e. Ces commandes d' ditions sont les commandes de vi, lui m me d river de l' diteur ligne ed
awk est un langage de recherche et de traitement d'expressions r guli res. Sa syntaxe est la suivante:
awk 'programme' fichiers
ou
awk h
-f prog- lei
fichiers
si les commandes sont crites dans un chier prog- le La syntaxe g n rale d'un programme awk est la suivante:
BEGIN { cdes1; }
29
30
instruction2; }
o cdes1 est la liste de commandes ex cut es au d but du programme, cdes celles ex cut es sur chaque ligne du chier d'entr e, et cdes2 celles ex cut es la n du programme. Chaque commande est termin e soit par une n de ligne, soit par un ; . Chaque ligne est d coup e en champs ou colonnes (par d faut s par es par des espaces ou des tabulations). awk appelle les champs $1,$2,$3 ... $NF o NF est une variable dont la valeur est gale au nombre de champs de la ligne courante. awk manipule des variables avec une syntaxe quasiment identique au langage C, et contenant soit des cha nes de caract res, soit des valeurs num riques (suivant le contexte). Il poss de des fonctions de manipulation de cha nes, des op rateurs num riques et de comparaisons issus du langage C (+, -, *, /, %, i, i=, h, h=, !=, ==, &&) et quelques fonctions math matiques (cos(), exp(), atan2(), log(), sin(), sqrt(), int(), rand()). Les principales commandes de awk sont:
print exp1,exp2.. printf
boucle
for (exp1; condition; exp2) { instructions; }
tantque
while condition { instructions; }
awk permet aussi de manipuler des tableaux de taille quelconque (i.e. il n'est pas n cessaire de d nir la dimension, on a ecte simplement des valeurs aux di rents l ments d'un tableau). Le ieme l ment d'un tableau tab est not tab i]. On peux m me manipuler des tableaux associatifs dont l'index n'est pas num rique, mais correspond une cha ne.
format ,exp1..
/expr/ { cde }
ex cute la commande cde si la ligne courante v ri e l'expression r guli re expr Les structures de contr les ont une syntaxe identique celle du langage C. condition
if (condition) { instruction 1; } else {
bc est un calculateur num rique avec une pr cision arbitraire, manipulant les nombres en virgule ottante (mais sans exposant) et qui poss de un langage de programmation similaire au C . Sa syntaxe est la suivante:
bc h i files
structure de contr le
qui utilise la librairie math matique du C (avec une pr cision correspondant 20 chi res apr s la virgule) avec l'option -l, et qui lit les commandes ou instructions partir des chiers les ou de l'entr e standard. Une variable est associ e un nom en minuscule et est d nie d s son utilisation. Un tableau est d nit par un nom suivi d'un indice entre ] . La variable scale d nit le nombre de chi res apr s la virgule, ibase et obase la base en entr e et en sortie. Une commande est soit une expression exp, dont le r sultat est a ch , soit une a ectation var=expr ou var exp1]=exp2. Les op rateurs num -
31
32
riques dans une expression sont les op rateurs du C (+, -, *, /, %, & ,! ), et de m me pour les op rateurs relationnels (i, i=, h, h=, !=, ==, &&). Les instructions sont s par es soit par une n de ligne, soit par un ; . Les principales instructions du langage sont: print exp1 a che l'expression exp1
if (cdt) then expr1 else exp2
4.4 Exemple 1
A titre d'exemple d'utilisation coordonn e de ces programmes du shell, nous allons crire un programme qui permet d'analyser des donn es stock es dans un chier sous forme de colonnes, suivant le format suivant:
# commentaire 1 # commentaire 2 A1 B1 C1 D1 ..... A2 B2 C2 D2 ... ......... An Bn Cn Dn
test logique
boucle break sortie de boucle continue ex cute la boucle suivante halt n de c On peut d nit des fonctions avec la syntaxe suivante
define nom(parametres) { auto vars instructions; return (exp1); }
On veux calculer l'int grale, la valeur moyenne et l' cart type de la fonction d nit par les valeurs Yi de la colonne col1 en fonction des Xi de la colonne col2. L'int grale est calcul e par la m thode des trap zes:
Z I =
XN f (x) dx X1
R XN
N X Yi + Yi 1 i=2
2
(Xi
Xi 1 )
la moyenne par :
M =
qui d nit une fonction nom avec des arguments et des variables locales vars. Les fonctions de la librairie math matique sont: s(x) sinus avec x en radian c(x) cosinus a(x) arctangente l(x) logarithme base e e(x) exponentiel sqrt(x) racine carr j(n,x) fonction de Bessel d'ordre n
I XN X1
XN (f (x) X1
M ) dx
M )2 + (Yi 1
2
M )2
(Xi
Xi 1 )
On calcule l'int grale de la colonne 2 en fonction de la colonne 1 l'aide du programme awk : int.awk
# calcul de l'integrale (par la methode des trapezes) # de somme(Yi*dx) (les (Xi,Yi) etants sur 2 colonnes) BEGIN { n=0; SUM=0;} { X2=$1; Y2=$2
4.4. EXEMPLE 1
if ( n > 0) { SUM = SUM + 0.5*(Y1+Y2)*(X2-X1) } X1=X2; Y1=Y2; n=n+1; } END { print SUM; }
33
34
S=`awk '{print $1,($2-'"$M"')^2}' $temp | awk -f int.awk `; # resultats echo "integrale = "$I echo "moyenne = "$M echo "ecart type = "$S rm -f $temp
Le programme shell analyse_data qui fait l'analyse, ltre les donn es et utilise divers programmes du shell pour faire les calculs.
#!/bin/sh # analyse de donnees # les donnees sont stock es sous forme de colonnes (X1 Y1 Y2 ...) # avec eventuellement des lignes de commentaires commencant par # # analyse des donnees de la colonne col2 en fonction de la colonne col1 if $# != 3 ] then echo syntaxe: analyse_data file col1 col2 exit 1 fi data=$1; col1=$2; col2=$3 # filtrage des donn es temp=$data.tmp grep -v "^#" $data | awk "{ print \$$col1",\$$col2" }" | sort -n +0 >$temp # integrale I=`awk -f int.awk $temp` a=`head -n 1 $temp | awk '{ print $1}'` b=`tail -n 1 $temp | awk '{ print $1}'` n=`wc -l $temp | awk '{ print $1}'` echo "borne a= "$a; echo "borne b= "$b; echo "nbre de pts n= "$n; # longueur et moyenne L=$(echo "scale=6; $b-$a" | bc -l); M=$(echo "scale=6; $I/$L" | bc -l); # ecart type
4.5 application
Avec le chier de donn es data
# fonction cos(x) entre 0 et 1 # calcul sur 10 pts 0 1.00000000000000000000 .11111111111111111111 .99383350853889192130 .22222222222222222222 .97541008538944752290 .33333333333333333333 .94495694631473766438 .44444444444444444444 .90284966935889861598 .55555555555555555555 .84960756284952776663 .66666666666666666666 .78588726077694800072 .77777777777777777777 .71247462453841889933 .88888888888888888888 .63027505092294510886 1 .54030230586813971740
4.6 Exemple 2
On peut aussi utiliser le programme pr c dent pour type de calcul, mais sur une fonction analytique. ectuer le m me
4.6. EXEMPLE 2
35
36
Le programme shell func calcul la valeur d'une fonction f(x) en n points entre a et b
#! /bin/sh # calcul la valeur d'une fonction f(x) entre a et b sur N pts # syntaxe: func "definition" a b n if $# != 4 ] then echo syntaxe: func "definition" a b n exit 1 fi # arguments F=$1; a=$2; b=$3; n=$4; # calcul des valeurs avec bc bc -l << EOF /* scale=6 */ dx=($b-$a)/($n-1); x=$a; for(i=1; i<$n; i=i+1) { print x," ",$F,"\n" x=x+dx } x=$b; print x," ",$F,"\n" EOF
# de la longueur de l'intervalle L=$(echo "scale=6; $b-$a" | bc -l); # de la moyenne M=$(echo "scale=6; $I/$L" | bc -l); # et de l'ecart type E="($F-$M)^2"; S=`func $E $a $b $n | awk -f int.awk `; # resultat echo "integrale = "$I echo "moyenne = "$M echo "ecart type = "$S
4.6.3 application
obelix@buffat:~/latex/istil2/demo$ etude_fonction fonction f(x)= c(x) borne a= 0 borne b= 1 nbre de pts n= 10 integrale = 0.840605 moyenne = .840605 ecart type = 0.0197712 obelix@buffat:~/latex/istil2/demo$
Le programme shell etude_fonction qui calcule de l'int grale et la valeur moyenne d'une fonction f(x) entre a et b s' crit:
#!/bin/sh # etude numerique d'une fonction analytique echo -n "fonction f(x)= "; read F; echo -n "borne a= "; read a; echo -n "borne b= "; read b; echo -n "nbre de pts n= "; read n; # calcul de l'integrale I=`func $F $a $b $n | awk -f int.awk `;
4.7 Exemple 3
f (x)
On cherche maintenant calculer l'int grale d'une fonction analytique avec une pr cision x .
n 1 X k=1
f (a + k
h)
37
b f (x) dx a
2 4 2p
38
L'erreur d'int gration, obtenue par d veloppement limit de I(h), s' crit:
I (h) = I (0) + a1h + a2h + : : : + ap h a1 =
(b
a)
12
M2
On en d duit une formule d'extrapolation permettant de calculer une formule plus pr cise connaissant une approximation I (h) et I ( h ): 2
4I ( h ) h 2 S( ) = 2
auto npt,j,dx,x,sum if (n==1) { return (s=0.5*(b-a)*(func(a)+func(b))) } else { npt=1; /* nbre de pts supplementaires */ for(j=1; j<n-1; j++) npt*=2; dx=(b-a)/npt; /* espacement */ x=a+0.5*dx; sum=0; /* calcul de la somme des termes supplementaires */ for(j=1; j<=npt; j++) { sum+=func(x); x+=dx; } s=0.5*(s+dx*sum); return (s) } } /* fonction d'integration avec une precision eps fixe */ eps =0.0001 nmax=10 /* fonction abs */ define abs(x) { if (x<0) { x=-x; } return (x); } /* integration de f(x) entre a et b par extrapolation successive */ define int(a,b) { auto n,tr,sp,trold,spold trold=trapz(a,b,1); spold=trold; for(n=2; n<=nmax; n++) { tr=trapz(a,b,n); sp=(4*tr-trold)/3.0; /* simpson */ if (abs(sp-spold)<eps*abs(spold)) return (sp); spold=sp; trold=tr; } print "trop d'iterations >",nmax," pour eps=",eps,"\n" return; } /* example utiliser uniquement pour le test */ /* fonction a integrer */ define func(x) {
I (h)
3
= I (0)
1 4
a2h + : : :
On obtiens une approximation 2 de I (0) d'ordre 4, qui est en fait la formule de Simpson. L'erreur d'int gration est mesur e partir de l'erreur relative:
S( 2 )
S( h )
S (h)
S (h)
<
n=
On peut de plus calculer I ( h ) = I2n en fonction de I (h) = In, en notant b a le nombre d'intervalles,2 par : h
I2n =
1 2 (In + h
n X
j =1
f (a + k
h))
4.7.2 programme bc
Le programme suivant trapz.bc impl mante l'algorithme suivant pour une fonction f (x) donn e:
/* calcul de l'integrale d'une fonction par la methode des trapezes */ /* le resultat est dans s, la fonction est func(x), l'intervalle a,b] */ /* l'appel doit etre recursif (i.e. a partir de n=1) pour affiner le resultat */ s=0 /* methode des trapezes */ define trapz(a,b,n) {
4.7. EXEMPLE 3
return (c(x)); } scale=6 print "somme =",int(0,1),"\n" quit
39
40
Le programme suivant int calcul l'int grale de f (x) entre a et b avec une pr cision x e:
#!/bin/sh # integration d'une fonction analytique # syntaxe int "f(x)" a b if $# != 3 ] then echo syntaxe: int "f(x)" a b exit 1 fi # parametres F=$1; a=$2; b=$3; bc -l trapz.bc <<EOF define func(x) { return ($F); } scale=8; int($a,$b); EOF
BIBLIOGRAPHIE
41
42
BIBLIOGRAPHIE
Bibliographie
HD93] Hec93] KP86] KR88] PoVF92] The86] TS87] Wel94] H.Kopka and P.W. Daly. A guide to LaTex. Documentation preparation for beginners and advanced users. Addison Wesley, 1993. A. Heck. Introduction to Maple. Springer-Verlag, 1993. B. Kerninghan and R. Pike. L'environnement de programmation UNIX. InterEditions , Paris, 1986. B. Kernighan and D. Ritchie. The C Programming Language. Prentice-Hall, 1988. W.H. Press, S.A. Teuk olsky, W.T. Vetterling, and B. P. Flannery. Numerical recipes in C. Cambridge university press, 1992. R. Theodor. Initiation l'analyse num rique. Masson, 1986. G. Todino and J. Strang. Learning the UNIX Operating System. O'Reilly and Associates 1987. M. Welsh. Linux Installation and Getting Started. CNU GPL, 1994.
43