système d’exploitation partie ii le shell - awk · 2014-02-26 · système d’exploitation...

22
Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email : [email protected] Licence 3 Informatique Système d’exploitation Programmation en shell (bash) AWK Partie II Le shell - AWK Licence 3 Informatique Système d’exploitation Programmation en shell (bash) AWK Sommaire du chapitre 1 Programmation en shell (bash) 2 AWK Licence 3 Informatique Système d’exploitation Programmation en shell (bash) AWK À quoi ça sert ? 4 1 er processus d’une session Conteneur d’une session user: password: uid: gid: comment: home: shell interpréteur de commandes lecture et exécution de commandes redirection des entrées sorties expansion des noms de fichiers interface utilisateur (historique, complétion, alias, gestion de jobs...) langage de programmation programmation interactive ou par fichiers de commandes instructions conditionnelles et itératives, fonctions gestion de variables substitution de paramètres Licence 3 Informatique Système d’exploitation

Upload: others

Post on 04-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Système d’exploitation

Laurent Amanton

Université du HavreUFR des Sciences et Techniques

bureau B 110email : [email protected]

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Partie II

Le shell - AWK

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Sommaire du chapitre

1 Programmation en shell (bash)

2 AWK

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

À quoi ça sert ? 4

1er processus d’une sessionConteneur d’une sessionuser: password: uid: gid: comment: home: shell

interpréteur de commandeslecture et exécution de commandesredirection des entrées sortiesexpansion des noms de fichiersinterface utilisateur (historique, complétion, alias, gestion dejobs...)

langage de programmationprogrammation interactive ou par fichiers de commandesinstructions conditionnelles et itératives, fonctionsgestion de variablessubstitution de paramètres

Licence 3 Informatique Système d’exploitation

Page 2: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

Différents Shells 5

sh ("Bourne shell", Steve Bourne)shell disponible sur tous les Unix.

csh ("C-shell", Bill Joy)shell BSD disponible sur tous les Unix.

ksh ("Korn shell")shell normalisé (POSIX et ISO (HP, Solaris))

zsh ("Zero shell")shell du domaine public

tcsh ("Toronto C-shell")

bash ("Bourne again shell" de Brian Fox et Chet Ramey)installé sur toutes les machines unix et linux

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

un mini OS ... 6

Ouverture des fichiers standardsentrée standard (stdin, fd=0)sortie standard (stdout, fd=1)sortie erreur standard (stderr, fd=2)

Le shell lit sur son entrée standardlecture de la commande jusqu’à la fin de ligne (interprétation desmétacaractères et opérateurs)lecture des lignes de commandes jusqu’à la fin de fichier

Lancement d’une commanderecherche du nom de la commande à l’aide du pathen premier plan : fork() exec(commande) wait() prompten arrière plan : fork() exec(commande) prompt

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Caractères de contrôle (clavier) 7

∧C interruption d’un processus attaché au terminal∧Z suspension d’un processus en premier plan∧\ arrêt d’un processus avec vidage mémoire (core)∧U effacement de la ligne complète∧D fin de fichier (si le shell lit, fin du shell)∧S suspension de l’affichage écran (Xoff)∧Q reprise de l’affichage écran (Xon)

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Enchaînement de commandes 8

Commande simple : com [arg]

Commande simple en arrière plan : com [arg] &

Pipeline (tube de communication) : com1 [arg] | com2 [arg]

Séquence de commandes : com1 [arg] ; com2 [arg]

Exécution dans un sous-shell :sh com [arg](com [arg]) ou (com [arg])&

Regroupement de commandes :(com1 [arg] ; com2 [arg])(com1 [arg] ; com2 [arg]) &

Licence 3 Informatique Système d’exploitation

Page 3: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

Redirections 9

redirection de l’entrée standard< fichier ou périphérique

<< balise texte jusqu’à la balise (here doc)

redirection de la sortie standard> fichier ou périphérique

1 > fichier ou périphérique

>> ajout (en fin de fichier)

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Redirections 10

redirection de la sortie erreur

> & fichier ou périphérique

& > fichier ou périphérique

2 > fichier ou périphérique

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Exemples de redirections 11

1 cat f1 > f22 cat f1 � f23 cat > f4 ls > f5 cat < f6 cat < f1 > f27 cat > f2 < f18 cat < f1 � f29 commande 1 >/dev/null 2 > &1/dev/null10 rm *.bak > & f

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Caractères d’expansion (des noms de fichiers) 12

[xyz] coïncidence avec x , y ou z∗ remplace n’importe quoi (y compris rien)? remplace un et un seul caractère

[x− z] coïncidence dans l’intervalle [x,y]{x ,yyy} remplace successivement les chaînes x et yyy

∼ remplace par HOME

Licence 3 Informatique Système d’exploitation

Page 4: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

Caractères d’expansion (des noms de fichiers) 13

Exemples1 ls ∗a.∗

2 ls [A-Z]∗ .[mp3-6]

3 ls ∗.{ps,pdf}

4 cd ∼

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Variables d’environnement (env) 14

PATH suite de chemins

MAIL chemin d’accès à la boite mail

ENV fichier de toutes les variables d’environnement

TERM nom du type de terminal

LOGNAME nom de login

USER nom de l’utilisateur actuel

...

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Variables de substitution 15

$0 nom du script (pathname)$1, ..., $9 arguments

$] nombre d’arguments$* liste de tous les arguments

$@ liste de tous les arguments$? code de retour de la dernière commande$$ numéro de processus de ce shell$! numéro du dernier processus en arrière plan

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Variables utilisateur 16

Déclarationvariable=valeur

Utilisation

$variable ou ${variable}

Exportation

export variable=valeur (bash)

exemple

toto=’bla bla bla’

Licence 3 Informatique Système d’exploitation

Page 5: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

Condition 17

condition simple

if commande ; thenliste de commandes

fi

condition et alternativeif commande ; then

liste de commandeselse

liste de commandesfi

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Condition 18

conditions multiples

if commande ; thenliste de commandes

elif commande ; thenliste de commandes

elseliste de commandes

fi

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Conditions multiples par aiguillage 19

Aiguillage

case $variable inmotif 1) liste de commandes ;;motif 2) liste de commandes ;;*) liste de commandes ;;

esac

exemple

case $] in1) a=$1;;2) a=$1; b=$2 ;;0) echo "usage: $0 a [ b ]" ; exit 1;;

esac

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Boucles 20

for

for variable [ in liste ]do

liste de commandesdonewhilewhile commandedo

liste de commandesdoneuntiluntil commandedo

liste de commandesdone

Licence 3 Informatique Système d’exploitation

Page 6: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

Boucles 21

exemple

for f in *.bak ; dorm $f

done

verif="n"while [ "$verif" != o ]do

echo "Entrer une valeur : "read valeurecho "vous avez entré $valeur. Correct ? (o/n)"read verif

done

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Rupture de boucles 22

Sortie de boucle

break [n]n est le niveau de boucle depuis la boucle la plus externe

Reprise de boucle

continue [n]

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

expansion de paramètres 23

${var:-val} si var définie ou non nulle alors var sinon val${var:?mess} si var définie ou non nulle alors var sinon affiche mess

${var:+val} si var définie ou non nulle alors val sinon rien${]var} longueur en octet de la chaîne var

${var:début:long} sous-chaîne${var%str} supprime en fin de var la plus petite chaîne des 2

renommage

for f in *.mp3 ; dofiche=${f%.mp3} ; mv $f $fiche.ogg

done

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Expansion de commandes 24

expansion

variable=‘commande ‘

variable=$(commande)

exemples

date=‘date +%d/%m/%y‘

dir=‘dirname $fichier ‘

nomfichier=$(basename $fichier )

Licence 3 Informatique Système d’exploitation

Page 7: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

Quotes 25

quotes simples ’ pas d’évaluation des méta-caractères

quotes doubles “ expansion pour $ ‘ et \

exemple

echo "usage: ‘basename $0‘ ’$HOME’"

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Interruptions 26

mise en place d’un déroutement

trap ’liste de commandes’ liste de signauxexemple : trap ’rm /tmp/* ; exit 0’ 2 3

désactivation des signaux

trap ” liste de signauxexemple : trap ” 1 2 18

Repositionnement par défaut des signaux

trap liste de signauxexemple : trap 1 2 3

Liste des signaux déroutés

trap

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Test 27

test sur les fichierstest -option fichier

f fichier ?

-d répertoire ?

-s fichier de taille non nulle ?

-r en lecture ?

-w en écriture ?

-x exécutable ?

-e existe ?

...

exemple

if [ ! -d repertoire ]; then mkdir repertoire ; fi

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Test 28

tests algébriques

test nombre1 -option nombre2

-eq equal ?

-ne non equal ?

-gt greater than ?

-lt less than ?

-ge greater or equal ?

-le less or equal ?

exemple

if [ $a -eq 2 ]; then a=0 ; fi

Licence 3 Informatique Système d’exploitation

Page 8: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

Test 29

comparaisons alphanumériques

test chaîne1 option chaîne2

= égal ?

!= différent ?

> supérieur strict ?

< inférieur strict ?

>= supérieur ou égal ?

<= inférieur ou égal ?

exemple

if [ $chaine = “toto” ]; then ... ; fi

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Test 30

comparaisons booléennes

test -z chaîne chaîne de longueur zéro ?

test -n chaîne chaîne de longueur non nulle ?

divers! not

-a et logique (and)

-o ou logique (or)

-nt fichier plus récent qu’un autre

-ot fichier plus ancien qu’un autre

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Arithmétique 31

Évaluation d’expressions

expr valeur1 opérateur valeur2

opérateurs + − ∗ / %

pas très performant

exemple

compteur=‘expr $compteur + 1‘

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Arithmétique 32

Évaluation d’expressions

$[ valeur1 opérateur valeur2 ]

opérateurs + − ∗ / %

très performant mais dépendant du shell(inexistant dans sh)

exemple

compteur= $[ $compteur + 1 ]

Licence 3 Informatique Système d’exploitation

Page 9: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

Fonctions internes 33

alias [nom[=commande] ...] définition d’une commandeunalias [nom ...] suppression d’un alias

bg [jobnum] backgroundfg [jobnum] foreground

echo [-ne] [arg ...] affichageeval [arg ...] évaluation d’une expression

exec [ [-] commande[arg ...] ] exécution d’une commandeexit [n] sortie du script

kill [-signal] [pid|jobnum] envoi de signauxread [variable ...] lecture au clavier

return [n] retour d’une fonction

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Fonctions internes 34

set [-option] [arg ...] positionne des variablesunset [variable ...] supprime une variable

shift [n] décalage des paramètres $itest expression condition

times données temporellestrap [arg] [signaux] déroutements

ulimit [-option [limite] ] limitation des ressourcesumask [mode] masque utilisateur (chmod)

wait [pid|jobnum] synchronisation

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Fonctions utilisateur 35

Deux déclarations possibles

function nom_fonction { . . . }

nom_fonction () { . . . }

exemple

main(){

if [ $] = 0 ]; thenecho “1 paramètre !”exit 1

fi}

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Fonctions utilisateur 36

Les fonctions doivent être définies avant leur appel

Aucun argument lors de la déclaration d’une fonction

Appel d’une fonction : nom_fonction arg1 arg2 ...

Récupération des arguments : $1 $2 ...

exemple

usage(){

echo "usage: $1 $2"}

usage ‘basename $0‘ “nom_de_fichier”

Licence 3 Informatique Système d’exploitation

Page 10: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

Script shell 37

Définitionensemble de commandes shell directement interprétables...

?

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

Script shell 38

Écriture d’un script

]!/bin/bash] localisation de l’interpréteur

Déclaration des variablesDéclaration des fonctions

appel de la fonction principale

Licence 3 Informatique Système d’exploitation

exemple

]/bin/bash

usage(){

echo "usage: $1 $2"}

function main{

if [ $] = 0 ]; thenusage ‘basename $0‘ “nom_de_fichier”exit 1

fi}

main $*

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Sommaire

1 Programmation en shell (bash)

2 AWKIntroductionStructure généraleLes actions

Licence 3 Informatique Système d’exploitation

Page 11: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

AWK ? 41

Acronyme

A ho Alfred V.W einberger Peter JK ernighan Brian W.

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Historique 42

1977 naissance de AWK : Laboratoires AT&T Bell1985 nouvelle version du langage plus puissant

fonctions,flux d’entrées,expressions rationnelles compilées...

1986 apparition de la version GNU (GAWK) écrite par d’autresdéveloppeurs

comptatibilité AWK - GAWK

performances accruespropriétés supplémentaires...

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Pour faire quoi ? 43

Manipulation de données textuelles

Validation et test sur des données

Conversion de documents

Extraction d’informations depuis un fichier texte

Traitement de données textuelles

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Exemple 44

fichier exemple.txt

helene 56 edu [email protected] 32 ri [email protected] 22 adm [email protected] 24 inf [email protected] 25 inf [email protected]

awk ’{ print $1 }’ exemple.txt

helenejeanjuliemichelrichard

Licence 3 Informatique Système d’exploitation

Page 12: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Exemple 45

fichier exemple.txt

helene 56 edu [email protected] 32 ri [email protected] 22 adm [email protected] 24 inf [email protected] 25 inf [email protected]

awk ’NR > 1 { print $1 }’ exemple.txt

jeanjuliemichelrichard

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Exemple 46

fichier exemple.txt

helene 56 edu [email protected] 32 ri [email protected] 22 adm [email protected] 24 inf [email protected] 25 inf [email protected]

awk ’BEGIN { printf ("Nom Numéro\n———- ——\n") }NR >= 1 { if ($2 > 24) { printf ("%-10s %6d\n", $1, $2) } }’ exemple.txt

Nom Numéro———- ——helene 56jean 32richard 25

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

3 façons principales d’utiliser AWK 47

1 En ligne de commande via le shellprogramme AWK en ligneprogramme AWK dans un fichier

2 À l’intérieur d’un script shell3 En script AWK exécutable

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

En ligne de commande 48

programme en ligne

awk ’NR > 1 { print $1 }’ exemple.txt

programme dans un fichier

awk -f prog.awk exemple.txt

Licence 3 Informatique Système d’exploitation

Page 13: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

À l’intérieur d’un script shell 49

]! \bin\sh

rep=‘pwd‘...

awk ’ print $3 ’ toto.txt

...

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Script AWK 50

]! \usr\bin\awk -f

{for (i=NF; i>0; i−−) {printf "%s%s", $i, OFS}print ""

}

...

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Sommaire

1 Programmation en shell (bash)

2 AWKIntroductionStructure généraleLes actions

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Un véritable langage de programmation 52

Langage interprété très proche du C

Variables réservées de positionnement

Variables utilisateur non typées

Fonctions prédéfinies (math, chaînes, ...)

Conditions, boucles, définition de fonctions

Utilisation des expressions rationnelles

Tableaux à indexation complexe

Licence 3 Informatique Système d’exploitation

Page 14: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Structuration en 3 blocs facultatifs 53

BEGIN {Pré-traitement (initialisation des variables réservées,globales etc.)}

{block de traitement récursif (lecture des enregistrements)}

END {Post-traitement (résultats des calculs, rapports, format de sortie}

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Structuration en 3 blocs facultatifs 54

BEGIN { . . . }

{ traitement . . . }

END { . . . }

END { . . . }

{ traitement . . . }

BEGIN { . . . }

END { . . . }

{ traitement . . . }

END { . . . }

BEGIN { . . . }

{ traitement . . . }

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Bloc de traitement 55

BEGIN { . . . }

{ traitement 1 . . . }

{ traitement 2 . . . }

{ traitement 3 . . . }

END { . . . }

⇐⇒

BEGIN { . . . }

{traitement 2 . . .traitement 1 . . .traitement 3 . . .}

END { . . . }

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Sélection – Action 56

Ligne 1

Ligne 2

Ligne k

Ligne m

...

...

...

...

...

Selection 1 {Action 1}

Selection i {Action i}

...

...

...

Selection n {Action n}

END {Action de terminaison}

BEGIN {Action debut}Fichier

Pour chaque ligne du fichier, toutes les sélections sont scrutées...

Licence 3 Informatique Système d’exploitation

Page 15: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Sélection – Action 57

Ligne 1

Ligne 2

Ligne k

Ligne m

...

...

...

...

...

Selection 1 {Action 1}

...

...

...

Selection n {Action n}

END {Action de terminaison}

BEGIN {Action debut}Fichier

{Action i}

S’il n’y a pas de sélection, l’action est exécutée pour chaque ligne.

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Syntaxe d’une sélection 58

Il existe deux façons de sélectionner des lignes d’un fichier :

relations de comparaison

expressions rationnelles (ou régulières en anglais)

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Sélection par relations 59

Opérateurs de comparaison

<, >, <=, >=, ==, ! =

Exemples

NF == 2 vrai si 2 champs sur la ligne courante

NR ! = 1 vrai sauf pour la ligne 1

$1== ”toto” vrai si le 1er champ est "toto"

($2+$5)×2 <= $7 expression arithmétique

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Combinaisons de sélections 60

opérateurs logiques

&&, ||, !, ( )

intervalles,

/debut/ , /fin/ : sélectionne toutes les lignes entre la première quicontient "début" et la première qui contient "fin".

NR==4 , NR==8 : sélectionne les lignes de 4 à 8.

Licence 3 Informatique Système d’exploitation

Page 16: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Sélection par expressions rationnelles 61

DéfinitionLes expressions rationnelles sont une famille de notations compactespermettant de décrire certains ensembles de chaînes de caractères.

Par exemple, Vim, Emacs, sed et awk les utilisent pour parcourir defaçon automatique des textes à la recherche de morceaux de texteparticuliers.

?

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Sélection par expressions rationnelles 62

Caractères réservés :

caractère signification. un caractère quelconque[ début de définition d’un ensemble[∧ début de définition du complément d’un ensemble] fin de définition d’un ensemble ou de son complément− marque d’intervalle dans un ensemble∧ placé en début d’expression, signifie début de ligne$ placé en fin d’expression, signifie fin de ligne\( début de définition d’une sous-expression\) fin de définition d’une sous-expression

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Sélection par expressions rationnelles 63

Exemples :

/[a5x]/ a, 5 ou x

/[a− z]/ une minuscule

/[02−69]/ 0, 2, 3, 4, 5, 6 ou 9

/[a− c4−6]/ a, b, c, 4, 5, ou 6

/[0−2−]/ 0, 1, 2, −/[∧a− zA−Z ]/ aucune lettre

/[012∧]/ 0, 1, 2 ou ∧

/[012a− z]$/ ligne finissant par 0, 1, 2 ou une minuscule

/∧toto/ ligne commençant par "toto"

/∧$/ ligne vide

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Combinaisons d’expressions rationnelles 64

Caractères réservés :

caractère signification* 0 ou plusieurs fois ce qui précède+ 1 ou plusieurs fois ce qui précède? 0 ou 1 fois ce qui précède| disjonction d’expressions rationnelles( ) parenthésage classique

Licence 3 Informatique Système d’exploitation

Page 17: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Combinaisons d’expressions rationnelles 65

Exemples :

/[a− z]∗/ 0 ou plusieurs minuscules

/00∗/ au moins un zéro (/0+/)

/.∗/ n’importe quoi (même vide)

/∧[a− z][a− z]∗$/ ligne ne contenant que desminuscules

/(Paul | Pierre) (Durand | Dupont) Paul ou Pierre suivi de Durand ouDupont

/[+−]?[0−9]+/ nombre entier signé

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Sommaire

1 Programmation en shell (bash)

2 AWKIntroductionStructure généraleLes actions

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Variables prédéfinies 67

variable significationARGC nb arguments de la ligne de commandeARGV tableau des ces argumentsFILENAME nom du fichier en entréeNF nb de champs de la ligne couranteNR nb de lignes déjà luesFNR nb de lignes du fichier courantFS séparateur de champsRS séparateur d’enregistrements en entrée (’\n’)OFS séparateur de champs en sortieORS séparateur d’enregistrements en sortieOFMT format de sortie pour les nombres (%.6g)ENVIRON tableau des variables d’environnement du shell

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Opérateurs 68

opération opérateursaffectation = + = ∗= / = % = ∧ =condition cond ? a : bconjonction &&disjonction ||comparaison == <= >= < > ! =arithmétique + − ∗ / % ++ −− ∧ |(négation)

accès aux champs $matching ∼ !∼∈ tableau inconcaténation "hello" "world"

Licence 3 Informatique Système d’exploitation

Page 18: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Boucles 69

Il existe 4 structures itératives :

while

do . . . while

for

for (parcours d’un tableau)

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Boucle while 70

while (<condition>)[{]

instruction(s)[}]

while(a<10) a++

while (a<10){ a++ }

! Les accolades de blocs sont facultatives seulementsi l’instruction s’étend sur une seule ligne.

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Boucle do while 71

do[{]

instruction(s)[}]

while (<condition>)

do {AfficheTableau ()}

while ( c=Getc()!= "quit")

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Boucle for 72

for (nombre=valeur_départ ; condition_maintien ; instruction_fin_boucle)[{]instruction(s)[}]

for (i=1 ; i<=5 ; i++){print i}

Licence 3 Informatique Système d’exploitation

Page 19: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Boucle for pour les tableaux 73

for (variable in Tableau)[{]instruction(s)[}]

for (index in T){print index ] affiche les indices du tableau}

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

La condition 74

if (<condition>)[{]instruction[}]

[else

[{]instruction[}]]

if (bidule ∼ "machin") machin="bidule"else if (truc ∼ "bidule") bidule=machin

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Divers 75

Commentaires

] blablablainstruction ] blablabla

Séparateur d’instructions

instruction_1 ; instruction_2instruction_3instruction_4

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Fonctions mathématiques 76

fonction significationcos(x) cosinussin(x) sinusatan2(y,x) arc-tangente y/x, intervalle [−π,π]sqrt(x)

√x

log(x) log népérienexp(x) exponentielleint(x) partie entièrerand( ) nombre aléatoire [0,1[srand(x) sel (par défaut : l’heure système)

Licence 3 Informatique Système d’exploitation

Page 20: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Les tableaux : associatifs 77

déclaration implicite, dimensionnement automatique

tableaux associatifs : (indice, valeur). L’indice peut être unechaîne de caractères ou un nombre entier ou décimal.exemples : Tab[2], Tab["toto"], Tab[3.14159], . . .

if (a in Tab) . . . ⇐⇒ if (Tab[a] ! = ””) . . .

affectation : Tableau[indice] =valeur

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Les tableaux 78

delete

delete Tab[indice] : supprime une paire (indice, valeur).

delete Tab : supprime tout mais non posix.

for (i in Tab) delete Tab[i] : supprime tout

!Les indices et les valeurs sont transformésen chaînes de caractères...Tab[05] < Tab[5]

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Les fonctions utilisateur 79

Comment définir une fonction ...

function nom_fonction ( [arg1, arg2, . . . ] ) {instructions. . .

return [expression]}

exemple

function AfficheReel (nombre ) {printf("%10.3f\n", nombre)

}

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Les fonctions internes 80

Affichage non formaté

print [ expression1, expression2, ... ]

Les éléments sont séparés par OFS, passage à la ligne ensuite.

exemple

print NR ":" $1, $2

Licence 3 Informatique Système d’exploitation

Page 21: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Les fonctions internes 81

Affichage formaté

printf (format, [ expression1, expression2, ... ] )

Le format est celui du langage C..

exemple

printf ("%s : %3.2f \n", var1, var2)

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Les fonctions internes 82

fonction significationsprintf (format, exp1, ...) la sortie est dirigée vers une chaînelength[(chaîne)] longueur d’une chaîne de carac-

tères, ou longueur de la ligne ($0)si aucun argument.

index(chaîne, sous-chaîne) position de la sous-chaîne ou 0sub(ER, nouveau, [ cible]) remplace la première plus longue

sous chaîne correspondant à ER(expression rationnelle) dans ciblepar nouveau

substr(chaîne, début[, long]) renvoie la sous-chaîne de chaînede longueur long qui commence àla position début.

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Les fonctions internes 83

fonction significationtolower(chaîne) conversion en minusculestoupper(chaîne) conversion en majusculessplit(chaîne,Tab[, sep]) décompose une chaîne en un tableau

selon le séparateur donné.match(chaîne, ER) renvoie la position de la plus longue chaîne

correspondant à l’expression rationnelledans chaîne.Positionnement de deux variables :RSTART : position début (ou 0)RLENGTH : longueur trouvée (ou -1).

Licence 3 Informatique Système d’exploitation

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Exemple 1 84

Comment afficher les deux premières colonnes des deux premièreslignes des fichiers .html du répertoire courant ?

comme cela !

awk ’ FNR== 1 || FNR== 2 { print $1 $2 } ’ *.html

Licence 3 Informatique Système d’exploitation

Page 22: Système d’exploitation Partie II Le shell - AWK · 2014-02-26 · Système d’exploitation Laurent Amanton Université du Havre UFR des Sciences et Techniques bureau B 110 email

Programmation en shell (bash)AWK

IntroductionStructure généraleLes actions

Exemple 2 85

Comment afficher la somme des nombres de la troisième colonne d’unfichier donné ?

comme cela !awk ’BEGIN {somme=0}{ somme + = $3 }END { print somme } ’ toto.txt

Licence 3 Informatique Système d’exploitation