Système D'exploitation Unix Shell Scripts
Système D'exploitation Unix Shell Scripts
UNIX
PROGRAMMATION SCRIPTS
Dr. Fatimazahra EL BIACH
Dr. Siham LAMZABI
Dr. Mohammed BELATAR
2024
Plan du semestre
semaine 1
3
Shell, c’est quoi exactement?
● Le Shell : Il s’agit d’une interface texte entre
l’utilisateur et le système informatique
○ Tout se fait au clavier
○ Pas de clic de souris
● L’utilisateur tape des commandes qui sont exécutées par le
système
○ Le shell est donc un « interpréteur de commandes »
○ Chaque commande a une syntaxe particulière
○ Il existe des milliers de commandes différentes
● Les commandes peuvent aussi provenir d’un fichier
○ Le fichier contient les commandes à exécuter
○ L’utilisateur appel le fichier plutôt que de taper toutes les commandes
■ Utile pour les tâches répétitives 4
Pourquoi le shell?
● Le shell reste le moyen le plus efficace pour contrôler
le système. C’est aussi le plus utilisé sous Linux/Unix.
● Le shell est un véritable environnement de programmation
○ Variables, boucles, structures de contrôle « if »
○ Programmes
● Les programmes écrits pour le shell sont interprétés au
moment de l’exécution
○ Aucune compilation préalable n’est nécessaire
○ On peut profiter de différents outils développés sous différents
langages
○ Les performances n’égalent pas un programme en C
● Contrôler une machine sans y avoir un accès physique
5
(Serveur)
Les scripts shell
7
Rappel des principes de base
● Les commandes :
○ syntaxe : <commande> <liste d’arguments>
○ sensibilité à la casse (majuscules/minuscules)
○ importance du séparateur “espace”
● le manuel (help) :
○ man <commande Unix>
● Historique :
○ commande “fc”
○ commande “history”
● Nettoyage de de l'écran
○ commande “clear”
11
Rappel des principes de base
● Enchaînement de commandes:
○ Commande simple en arrière plan
■ $ cmd [ arg ... ] &
○ Pipeline (tube de communication entre commandes)
■ $ cmd1 [ arg ... ] | cmd2 [ arg ...] | …
○ Exécuter la commande suivante en fonction de l’exit de la première
■ $ cmd1 [ arg ... ] || cmd2 [ arg ...]
■ $ cmd1 [ arg ... ] && cmd2 [ arg ...] ...
○ Séquencement de commandes successives en premier plan
■ $ cmd1 [ arg ... ]; cmd2 [ arg ... ]; cmd3 …
○ Groupement des commandes : exécution en sous-shell
■ $ ( cmd1 [ arg ... ]; cmd2 [ arg ... ]; cmd3 … )
○ Groupement des commandes : exécution dans le shell courant
■ $ { cmd1 [ arg ... ]; cmd2 [ arg ... ]; cmd3 …;}
12
Les scripts shell : exemple
● Exemple :
13
Choix du shell
TD 1
défaut
4. Basculez d’un shell à un
autre puis fermer chaque
shell ouvert
5. Changez votre shell par
défaut
6. Vérifiez la disponibilité
des éditeurs de texte et
familiarisez-vous avec
16
l’un d’eux
1. En utilisant les
commandes tail et head,
écrire un script qui
TP 1
permet de réordonner
les lignes d’un fichier
“losange” contenant un
losange dont les lignes
sont inversées.
2. Re-écrivez votre script
en une seule ligne.
17
Programmation shell scripts
semaine 2
18
Structure d’un script
1. spécifier l'interpréteur
2. vérifier la syntaxe
3. signaler le lancement
4. effectuer la/les tâches
5. nettoyer l’environnement
#!/bin/bash 6. signaler la fin de l'exécution
[ $# -ne 1 ] && echo "Usage : `basename $0` int" 1>&2 && exit 1
echo debut du travail
for ((i=0; i<$1; i++)); do
for ((j=0; j<$1; j++)); do
echo -n '*'
done
echo -en '\n'
done
echo fin
# N.B : les variables spéciales seront étudiées plus tard dans ce cours
# N.B : ces étapes ne sont pas toutes obligatoires 19
Ligne shebang
● #!/bin/sh
● #!/bin/bash
● #!/bin/ksh
● #!/bin/zsh 20
# une ligne de commentaire
Commentaires
echo bonjour # ou après une commande
: pseudo commentaire, toujours vrai
23
Affichage des messages
● \\ : Affichage du caractère \
● \XXX : Affichage du caractère dont le code Ascii est XXX
exprimé en octal
● \a : Beep
● \c : Éliminer le saut de ligne final (comme l’option -n )
● \n : Saut de ligne
● \r : Retour chariot en début de ligne
● \b : Retour en arrière d’un caractère
● \t : Tabulation horizontale
● \v : Tabulation verticale
25
Affichage d'une chaine (string) sur 20
%20s
Cette commande est une sorte de “echo” Affichage d'un entier (décimal) sur 3
%03d positions avec cadrage à droite et
nettement amélioré proposant des formats complété avec des 0 à gauche
pour afficher les nombres réels. Les Affichage d'un entier (décimal) sur 3
%-3d
programmeurs C reconnaîtront une positions avec cadrage à gauche
● $ printf chaine arg1 arg2 arg3… Affichage d'un nombre flottant sur 10
positions dont 2 décimales, complété
%+010.2f par des 0 à gauche, avec cadrage à
Exemples de formats (voir tableau) : droite et affichage systématique du
signe
26
Exécution d’un shell script
Remarque :
TD/TP 2
○ Journée
3. Écrire un script qui affiche la
date en permanence, chaque
écriture écrasant la précédente.
4. Écrire un script qui affiche sous
forme de tableau dix étudiants, et
leur classement à l’ordre inverse
(en utilisant printf et des
espaces).
○ Etudiant1 10
○ Etudiant2 9
○ ….
○ Etudiant10 1 28
Mécanismes de base
semaine 3
29
Personnalisation du shell
● Fichier de profile :
○ Emplacement : /etc/profile
○ Standard POSIX
○ Point de passage obligatoire après un login
○ Fournit par le système, modifiable par l’administrateur
○ Permet de configurer le Shell (couleurs, terminal, variables PATH,
PS1…)
○ Il concerne tous les utilisateurs
○ Il peut avoir des compléments (ex. dans /etc/profile.d/)
○ Il peut faire appel à d’autres compléments shell spécifiques (ex.
/etc/bash*)
30
Personnalisation du shell ● Bourne shell, Korn shell &
POSIX: ~/.profile
● C-shell: ~/.login, ~/.cshrc,
~/.logout
Autres scripts d’initialisation : ● Zsh: ~/.zshrc
● T-csh: ~/.tcshrc
● bash: ● Modifiables par l’utilisateur :
○ ~/.profile, ~/.bash_profile:
Personnalisation du shell
initialisations en tant que
shell de connexion
● Peuvent être utilisés pour:
○ Redéfinir les variables de
○ ~/.bashrc : à l’invocation du
/etc/profile
shell (sans fonction de
○ Définir de nouvelles variables
connexion)
○ Définir des fonctions
○ ~/.bash_logout : quand
○ Personnaliser l’apparence
l’utilisateur se déconnecte du
(PS1…)
système (nettoyage de
○ Définition d’alias pour des
l’environnement de travail)
commandes complexes
31
Couleurs de texts (terminal Couleur Text Couleur du fond
31 Rouge 41 Rouge
32 Vert 42 Vert
● Afficher des message en couleurs
33 Orange 43 Orange
● Redéfinir les variables $PS1 et $PS2
● Coloriage du texte par la séquence : 34 Bleu 44 Bleu
07 Sur-ligné/
Inversé
32
Personnalisation du prompt
\u le nom de login de l'utilisateur
courant
● On peut utiliser des caractères \v la version du bash ("2.00")
spéciaux \V la version release du bash,
version + patchlevel ("2.00.0")
\d la date actuelle au format \W le répertoire de travail actuel
"Weekday Month Date" ("Tue May 26") \w le répertoire de travail actuel
\h le nom de l'ordinateur depuis la racine
\H le nom complet de \! numéro de commande courant
l'ordinateur \@ heure actuelle au format 12h
\n saut de ligne am/pm
\s nom du shell ("bash") \T heure actuelle au format 12h
\[ démarre une séquence de HH:MM:SS
caractères non imprimable \A heure actuelle au format 24h
(couleurs…), HH:MM
\] ferme une séquence non \t heure actuelle au format 24h
imprimable HH:MM:SS 33
\$ si l’UID=0 affiche # sinon $
Les variables
● Types de variables :
○ Variables globales :
■ Le shell en fournit une copie à sa descendance
■ Dans les scripts d’initialisation
● appelées “Variables d’environnement”
● commande “env” pour les lister
■ Commande export pour les déclarer (setenv sous csh)
○ Variables locales
■ Créées par l’utilisateur dans le shell actuel
■ Utilisables dans l’environnement actuel
■ Liste de toutes les variables disponibles dans le shell actuel
(locales + environnement) : commande “set”
○ Variables de substitution (variables spéciales)
■ Variables positionnelles $1, $2 ...
■ Autres variables spéciales
34
Les variables ● Exemple :
$ nom=ALI
● Déclaration : $ adresse="2 bd de France"
○ variable=valeur $ echo $nom
○ declare variable=valeur (bash v.2+) ALI
○ typeset variable=valeur (bash, ksh..) $ echo $adresse
● Contenu d’une variable : 2 bd de France
○ $variable
$ unset adresse
○ ${variable}
$ set
● Suppression d’une variable:
HOME=/home/ali
○ unset variable
PATH=/bin:/usr/bin
PS1=$
nom=ALI
35
Les variables : exemples
$ fleur=rose
$ echo "une $fleur, des $fleurs"
une rose, des
$ echo "une $fleur, des ${fleur}s"
une rose, des roses
$ transport="air mer terre"
$ echo $transport
air mer terre
$ unset fleur transport
$ echo "fleur = $fleur et transport = $transport"
36
fleur = et transport =
Les tableaux (bash)
38
Variable vide vs variable non déclarée
● Par défaut, une variable qui n’a jamais été affectée est
traitée par défaut comme une chaîne vide :
○ $ echo '-'$inex'-'
○ --
● Une variable à laquelle on affecte une chaîne vide existe
quand même. Ce n’est pas comme si on la supprime avec
“unset”
● On peut différencier les variables inexistantes des
variables vides en utilisant l’option -u à l'exécution du
shell (ou avec la commande set) :
○ $ set -u
○ $ echo $inexistante
39
○ bash: inexistante : variable sans liaison
1. Identifiez les fichiers
d’initialisation de sessions
propres à votre compte.
2. Créez un alias permanent pour
remplacer la commande “ls -la”
par “ls”
3. Écrivez un script qui compte à
TD/TP 3
rebours de 5 à 0, avec une
pause d’une seconde à chaque
affichage. (en rouge)
4. Explorez la variable PS1 et
redéfinissez de manière
permanente votre propre prompte
en utilisant des couleurs et en
affichant les informations
suivantes :
<user>@<host>/<pwd>_<time>_$_ 40
Fonctionnement interactif
semaine 4
41
Rappels
● Redirection des entrées/sorties (voir cours 1e semestre)
○ >,1>,2>,>>,1>>,2>>,>&2,1>&2,2>&1
○ <,0< (alimenter une commande depuis un fichier)
○ << (saisie de document en ligne)
● De manière générale :
○ n< , n> , et n>> , dans lesquelles n représente un numéro de descripteur
de fichier (par défaut, 0 pour < et << , et 1 pour > et >> ).
■ redirection des deux sorties : &> et &>>
○ n>&m , où n et m sont deux numéros de descripteurs, la sortie vers n sera
redirigée vers m
● Les pipes “tubes” (voir cours 1e semestre)
○ opérateur | redirige sortie standard de cmd1 vers entrée standard cmd2
○ opérateur |& redirige les deux sorties de cmd1 vers entrée standard cmd2
42
Rappels: Substitution de commande
43
Extraction de sous-chaînes
$ variable=ABCDEFGHIJKLMNOPQRSTUVWXYZ
● L’opérateur ${} est la version $ echo ${variable:5:2}
généralisée de l’opérateur $ FG
permettant l’accès à la valeur $ echo ${variable:20}
d’une variable UVWXYZ
● L’option “:” de l’opérateur ${}
permet d’extraire une sous-
chaîne d’une variable
○ La syntaxe est: $ variable=AZERTYUIOPAZERTYUIOP
${variable:debut:longueur} $ echo ${variable#AZE}
○ ATTENTION à la portabilité!
RTYUIOPAZERTYUIOP
n’existe pas dans SUS3.
$ echo ${variable#*T}
● L’option “#” permet de supprimer
YUIOPAZERTYUIOP
le plus court préfixe
$ echo ${variable#*[MNOP]}
correspondant au motif qui vient
PAZERTYUIOP
après # :
44
○ syntaxe : ${variable#motif}
Extraction de sous-chaînes
$ variable=AZERTYUIOPAZERTYUIOP
$ echo ${variable##*T}
● L’expression ${variable##motif}
YUIOP
sert à éliminer le plus long
$ echo ${variable##*[MNOP]}
préfixe correspondant au motif
transmis.
● Symétriquement, les expressions $ echo ${variable%IOP*}
${variable%motif} et AZERTYUIOPAZERTYU
${variable%%motif} $ echo ${variable%%IOP*}
correspondent au contenu de la AZERTYU
variable, débarrassée $ echo ${variable%[X-Z]*}
respectivement, du plus AZERTYUIOPAZERT
court et du plus long suffixe $ echo ${variable%%[X-Z]*}
correspondant au motif indiqué. A
45
Remplacement de sous-chaînes
$ variable=AZERTYUIOP
$ echo ${#variable}
● ${#variable} permet d’avoir la 10
longueur du contenu de la
$ echo $UID
variable “variable”
1000
● Si le contenu est un nombre, il
$ echo ${#UID}
est traité de la même manière
4
qu’une chaîne de caractères
$ variable=
$ echo ${#variable}
0
$ echo ${#inexistante}
0 47
Les variables : Actions par défaut
48
Les variables : Actions par défaut
$ echo $vide
$ echo ${vide:=contenu}
contenu
$ echo $vide
● L’expression ${variable:=valeur} est similaire contenu
à la précédente, mais le contenu de variable
$ unset vide
sera modifié. Si la variable n’existe pas ou si
$ echo ${vide:?faut la
elle est vide, elle est alors remplie avec déclarer}
valeur. Ensuite, dans tous les cas, le contenu vide : faut la déclarer
de la variable est retourné.
● L’expression ${variable:?message} : Si la $ echo ${vide:?}
bash: vide : paramètre vide ou
variable est définie et non vide, sa valeur est
non défini
retournée. Sinon, le shell affiche le message
fourni après le point d’interrogation, et
abandonne le script ou la fonction en cours.
○ Si le message n’est pas précisé, le shell en
affiche un par défaut
49
Les variables : Actions par défaut
$ existante=4
$ echo ${existante:+1}
● ${variable:+valeur} renvoie la valeur 1
fournie à droite du symbole + si la $ echo ${inexistante:+1}
variable est définie et non vide,
sinon elle renvoie une chaîne vide $ var=
● Les quatre options précédentes de $ definie=${var:+oui}
l’opérateur ${} considèrent au même $ : ${definie:=non}
titre les variables indéfinies et les $ echo $definie
variables contenant une chaîne vide. non
Il existe quatre modificateurs $ var=1
similaires qui n’agissent que si la $ definie=${var:+oui}
variable est vraiment indéfinie ; il $ : ${definie:=non}
s’agit de ${ - } , ${ = } , ${ ? } , $ echo $definie
et ${ + } oui
50
Variables de substitution
$ set a b c $ set a b c d e
$ echo $1 $2 $3 $ echo $0 $1 $2 $3
a b c bash a b c
$ set d e $ shift
$ echo $1 $2 $3 $ echo $0 $1 $2 $3
d e bash b c d
___ $ shift
#!/bin/bash $ echo $0 $1 $2 $3
while [ -n "$1" ] ; do bash c d e
echo $1 $ shift
shift $ echo $0 $1 $2 $3
done bash d e
53
Variables spéciales
54
1. Écrire un script qui affiche
le répertoire de travail en
cours, en remplaçant le
répertoire personnel par le
symbole ~ en vert (préfixe)
2. Écrire un script qui prend
TD/TP 4
comme argument une adresse
e-mail et affiche le nom de
login correspondant.
3. En utilisant la commande mv,
changez l’extension de tous
les fichiers d’un répertoire
donné en 1e argument, d’une
extension donnée en 2e
argument à une autre en 3e
55
argument.
4. Vous souhaitez écrire
un script qui prend
obligatoirement un
paramètre d’une
longueur de 5
caractères minimum.
56
Portabilité des scripts
57
Portabilité des scripts
58
Portabilité des scripts
59
Portabilité des scripts
61
Options du shell ● Options du shell :
○ $ bash -x monscript # exécution
du script en mode trace
■ affiche les étapes de
substitution, signalées
● La commande set par la ligne +
○ set -x : Active le mode “trace” ○ $ bash -v monscript # exécution
○ set - : désactive le mode “trace” en mode “bavard”
○ set -e : quitter immédiatement si le ■ affiche la ligne telle
retour d’une commande est différent qu’elle est écrite dans le
de 0 script, avant que le shell
○ set -C : interdire l’écrasement de ne l’interprète
fichiers existants par redirection ○ $ bash -n monscript
○ set -o option : activer certaines ■ vérification de la syntaxe
options du shell ○ $ bash -e monscript
■ exemple: $ set -o posix ■ provoque la fin
● Désactiver l’option : d’exécution d’un script si
○ set +<l’option> une commande se termine
○ ex: $ set +x avec un code de retour
différent de zéro
62
● Exemple :
65
1. Écrire un script qui
nécessite la saisie d’un nom
de fichier complet en option
-f (avec son chemin d’accès)
TD/TP 5
et affiche successivement le
nom seul et le chemin seul.
2. En utilisant xargs dans un
script, cherchez le texte
donné en premier argument du
script dans tous les
fichiers du répertoire donné
en deuxième argument.
66
3. Écrire un script bash
qui prend des options -
h ou --host et -p ou --
port pour télécharger
une page web en
utilisant curl ou wget
68
Les tâches cron
69
Crontab: syntaxe
72
Crontab : raccourcis
Il existe également certains raccourcis :
73
Cron : notification
74
1. Mettre en place un
script qui, toutes les
5 minutes, ajoute la
date, l'heure et le
pourcentage de
TD/TP 6
l’utilisation actuelle
de la mémoire dans un
fichier nommé
"memoire.log".
(utilisez la commande
free pour récupérer les
informations sur la
mémoire)
75
Les services
76
● systemd est le logiciel qui
80
81
1. Vérifier les services
existants sur votre
système et leurs états
2. Vérifier le fichier de
TD/TP 7
configuration d’un
service existant.
3. Vous avez une application
NodeJS que vous souhaitez
lancer comme daemon.
Créez le fichier du
service et lancez-le.
82
Filtrage des données
83
Définition
● Filtres connus sous Unix :
○ tr
○ cut
○ sort
○ grep
● Un ensemble de commandes qui : ○ paste
○ acceptent des données de ○ diff
l’entrée standard ○ sed
○ effectuent des transformations ○ awk
sur ces données ● Tous ces filtres lisent donc
○ dirigent ces données vers la
leur données sur l’entrée
sortie standard
○ affichent leurs messages
standard et écrivent leurs
d’erreur vers la sortie résultats sur la sortie
d’erreurs standard. On peut bien sûr les
alimenter avec le contenu d’un
fichier/pipe et/ou rediriger
leur sortie vers un
fichier/pipe
84
Le filtre tr
86
Le filtre cut
● La commande cut permet d'afficher des zones spécifiques
d'un fichier.
● options :
○ -c spécifie le numéro du caractère à extraire
○ -f spécifie le numéro du champs (field) à extraire
○ -d spécifie le délimiteur des éléments dans une ligne (default TAB)
● ex:
○ $ cut -c1 /etc/passwd # affichera le premier caractère du fichier
/etc/passwd.
○ $ cut -d: -f6 /etc/passwd #affichera le 6eme champ du fichier
/etc/passwd, dont le séparateur de champs est le caractère “:”
○ $ cut -f1,3 -d: /etc/passwd # extraire les éléments 1 et 3
○ $ cut -f1-3 -d: /etc/passwd # extraire les éléments de 1 à 3
87
○ $ cut -f4- -d: /etc/passwd # extraire les éléments à partir du 4eme
Le filtre sort
Le filtre grep
● filtre les lignes qui contiennent un texte (ou une
expression régulière)
● Exemple : ls -l | grep “fi”
○ -v : afficher les lignes qui ne contiennent pas l’expression
rationnelle. 90
○ -E : expression régulière étendue
Le filtre diff
● usage : diff fichier1 fichier2
● La commande diff donne les modifications à apporter au
premier fichier spécifié pour qu'il ait le même contenu
que le second. Les différences sont indiquées sous forme
de codes. Exemples:
○ 3a4,7 indique que après la troisième ligne du premier fichier doivent
être incrustées les lignes 4 à 7 du second.
○ 5,8d4 indique que les lignes 5 à 8 du premier fichier doivent être
supprimées, car elles n'existent pas derrière la ligne 4 du second.
○ 10,15c12,17 indique que les lignes 10 à 15 du premier fichier doivent
être intégralement changées contre les lignes 12 à 17 du second.
● Dans les trois cas de figure, les lignes précédées du
signe < se rapportent au premier fichier, et les lignes
précédées du signe > se rapportent au second.
● -b permet de ne pas tenir compte des blancs (espaces) lors
91
de la comparaison des lignes.
1. Écrire un script qui
affiche le processus qui
consomme le plus de
mémoire à l’instant,
TD/TP 8
ainsi que la taille de
l’espace mémoire utilisé
par ce processus. Vous
pouvez vous servir des
commandes ps et free en
plus des filtres de votre
choix.
92
Filtrage étendu
sed
93
La commande sed
● sed est un éditeur ligne par ligne non interactif, il lit
les lignes d'un fichier une à une (ou provenant de
l'entrée standard) leur applique un certain nombre de
commandes d'édition et renvoie les lignes résultantes sur
la sortie standard.
● c’est une évolution de l'éditeur ed lui même précurseur
de vi, la syntaxe n'est pas très conviviale, mais il
permet de réaliser des commandes complexes sur de gros
fichiers.
● Syntaxe :
○ $ sed -e 'liste_d_instructions' fichier_à_traiter
○ $ sed -f fichier_script fichier_à_traiter 94
sed : usage et comportement
● Si aucun fichier à traiter n’est indiqué, sed attend les
données sur son entrée standard.
● Lorsqu’on fournit directement les commandes sur la ligne,
grâce à l’option -e , il est préférable de les inclure
entre apostrophes simples, en raison de l’usage fréquent
des caractères $ , * , ? , etc., susceptibles d’être
interprétés par le shell
● Sed est un outil très puissant à la main des
administrateurs système puisqu’il permet de traiter de
grandes quantités de données en un temps record et avec
un minimum de ressources.
● option -n : mode silencieux, envoi vers la sortie 95
Expressions rationnelles et métacaractères
96
Fonction de substitution s
● Permet de remplacer une chaîne par une autre
● sed 's/regexp/remplacement/options'
○ sed 's/toto/TATA/' fichier #remplacer la première occurrence de la
chaîne toto par TATA
○ sed 's/toto/TATA/3' fichier #remplacer la troisième occurrence de la
chaîne toto par TATA
○ sed 's/toto/TATA/g' fichier #remplacer toutes les occurrences de la
chaîne toto par TATA
○ sed 's/toto/TATA/p' fichier #en cas de remplacement, la ligne
concernée est affichée sur la sortie
○ sed 's/toto/TATA/w resultat.txt' fichier #en cas de substitution la
ligne en entrée est inscrite dans un fichier résultat
97
Fonction de substitution s
● Exemples : (suite)
○ sed -e 's/[Cc]haise/CHAISE/g' fichier #substitue toutes les chaînes
Chaise ou chaise par CHAISE
○ sed -e 's/^#//' fichier #décommenter tous les commentaires situés en
début de ligne
○ sed -e 's/^[a-zA-Z ]*$/#&/g' #commenter toute ligne qui contient
seulement des lettres et des espaces
○ sed -e 's/\([0-9][0-9]*\)\([a-z]\)/__\1__\2/g' #entourer tous les
nombres avec des __ s’ils sont suivis par une lettre
● Note:
○ & permet de faire une référence arrière vers la chaîne filtrée
○ \1, \2 …. permettent de faire une référence arrière à une sous chaîne
filtrée, les sous chaînes sont délimitées par des parenthèses
98
Fonction de suppression d
99
Autres fonctions w,p,q,=,
100
1. Supprimer tous les
commentaires commençant par
// dans un fichier php
2. Mettre en gras le mot Linux
102
Introduction
● awk est une commande très puissante, c'est un langage de
programmation à elle toute seule
● awk rend possible des actions plus complexes encore que
celles rendues possibles par sed, y compris des
opérations mathématiques, ou des séquences logiques
complètes.
● Si la fonction principale de sed est de remplacer des
sous-chaînes, awk est le plus souvent utilisée pour
extraire des données depuis les fichiers.
● La dénomination AWK vient des initiales de ses trois
créateurs, Alfred Aho, Peter Weinberger et Brian
Kernighan. Ce dernier est l’un des inventeurs du langage
103
C, d’où une grande similarité dans la syntaxe.
Introduction (suite)
107
Les champs
108
Syntaxe des motifs
● Les motifs avec lesquels les lignes sont comparées
ressemblent un peu aux sélections déjà rencontrées avec
Sed, mais offrent plus de possibilités
● Le motif peut être :
○ une expression rationnelle :
■ /expression régulière/ (équivalent à $0 ~ /expression régulière/)
■ expression ~ /expression régulière/
■ expression !~ /expression régulière/
○ une expression de comparaison: <, <=, == , !=, >=, >
○ une combinaison des deux (à l'aide des opérateurs logiques || ou, && et,
! négation)
○ une expression BEGIN ou END
109
Syntaxe des motifs (suite)
● Le motif peut être aussi :
○ une série de lignes caractérisées par deux motifs
■ motif1,motif2 : chaque ligne entre la première ligne
correspondant au motif1 et la première ligne correspondant au
motif2
○ Une condition motif1 ? motif2 : motif3
○ Une chaîne vide. L’action sera alore appliquée à toutes les lignes.
● La ligne BEGIN est très utile pour l’initialisation de
awk , notamment quand il s’agit d’initialiser des
variables requises pour l’exécution du programme.
● La ligne END sert généralement à faire un calcule cumulé
sur des variables obtenues lors du traitement des
différentes lignes, et pour afficher un message ou un 110
résultat à l’utilisateur
Syntaxe des motifs (exemples)
112
Les actions
113
Les variables
114
Fonctions numériques
Nom des fonctions signification
116
1. En prenant un fichier
html en entrée, nous
souhaitons afficher
seulement les textes
TP/TD 10
inclus entre <p> et
</p> (Maj ou min)
2. Ecrire un script awk
qui permet de calculer
le pourcentage du CPU
utilisé par un
utilisateur donné (en
se basant sur ps aux)
117
AWK (suite)
118
AWK: variables prédéfinies
● Variables prédéfinies :
○ FS : séparateur de champ traité
○ RS : séparateur d’enregistrement
○ OFS :séparateur de champ en sortie
○ ORS :séparateur d’enregistrement en sortie
○ NF : nombre de champs dans l’enregistrement courant
○ NR : nombre total d’enregistrements lus dans tous les fichiers de
données
○ FNR : nombre d’enregistrements lus dans le fichier de données
courant, en comptant l’enregistrement courant
○ FILENAME :nom du fichier en cours de traitement
○ ARGC : nombre d’arguments de la commande
○ ARGV : tableau contenant les arguments de la commande Awk
119
Structures de contrôle (if)
● Syntaxe : if (condition) instruction1 else instruction2
● Si on a plusieurs instructions on les met entre accolades
● Exemple :
● Syntaxe:
while (condition)
{instructions}
do
{
instructions
}
while (condition)
● Exemple :
○ awk 'BEGIN { while (count++<50) string=string "x"; print string }'
○ #crée et affiche une chaîne de 50 fois la lettre x
121
Structures de contrôle (for)
● Syntaxe :
for (initialisation; condition; instruction de comptage)
{
instructions
}
122
Les sauts contrôlés
TP/TD 10
2. Ecrire un script awk qui
permet d’inverser les lignes
d’un petit fichier
suite 3. Écrire un script awk qui
permet de réécrire le
fichier notes.csv en
remplaçant la notation sur
20 par une notation sur 10.
124
1. Dans un corpus de textes en
Français, afficher la
première phrase qui contient
le mot “il”.
2. Dans un corpus de textes en
TP/TD 10
parenthèses.
3. Simuler (approximativement)
avec un script awk la commande
suite wc, qui sans option
supplémentaire donne
respectivement le nombre de
lignes, de mots et d'octets du
fichier qui lui est passé en
argument. 126
On dispose de différents fichiers à la
structure identique : une première ligne
non pertinente qui pourra être ignorée,
suivie d'un ensemble de lignes structurées
en 13 champs séparés soit par des espaces,
soit par des tabulations. Voici un exemple
de ligne :
TP/TD 10 str1 int2 int3 int4 int5 int6 int7 int8 int9 int10 int11 int12 int13
file_i tot2 tot3 tot4 tot5 tot6 tot7 tot8 tot9 tot10 tot11 tot12
tot13
127
Projets
128
● Écrire un script qui
prend en argument un
répertoir local de site
web et effectue les
Projet 1
opérations suivantes :
○ Optimiser les fichiers
CSS en supprimant les
entrées non utilisées
évalué sur la base de : ○ Minifier les fichiers CSS
○ Minifier les fichiers JS
1. la réalisation des
○ Minifier le HTML inclut
objectifs dans les fichiers ayant
2. Utilisation du CPU les extensions : .htm,
3. Utilisation de la RAM .html, .php
129
● Écrire un script qui
prend en argument une
Projet 2
URL et un fichier texte
contenant une liste
d’URLs d’exceptions, et
permet de générer les
évalué sur la base de :
1. la réalisation des différents fichiers
objectifs sitemaps pour ce site.
2. temps d'exécution
3. utilisation du CPU
4. utilisation de la RAM
130
● Vous êtes enseignant et vous
souhaitez réaliser un script
pour évaluer les
projets/travaux rendus par les
étudiants. Ce script doit être
capable de :
Projet 3
○ Évaluer le taux de ressemblance
entre tous les projets dans un
dossier donné en argument,
○ Évaluer les ressemblances même si
Évalué sur la base de : les noms (variable,
1. La réalisation des classes,fichiers,fonctions...) ou
les structures sont différents.
objectifs
○ Évaluer le plagiat sur internet et
2. La qualité de la afficher les liens sources pour
présentation des chaque projet.
résultats. ○ Évaluer le projet et toute sa
hiérarchie même s’il est compressé.
131