programmation en exploitation sous unixabchiche/documents/shell.pdf · programmation en...

106
Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département GEII, IUT Évry

Upload: hoangcong

Post on 11-Sep-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Programmation en exploitation sous UNIX

Nadia Abchiche MimouniGilney Damm

Octobre 2003

Licence GSINFO Département GEII, IUT Évry

Page 2: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Avertissement

• Ce document est un support de cours. Il ne constitue en aucun un ouvrage de référence à la programmation en exploitation. Son exploitation est subordonnée à la présence au cours dispensé par l’enseignant.

• Il est fortement conseillé d’annoter ce document grâce aux explications et exemples fournis durant le cours.

• Pour toute remarque, envoyer un courrier à [email protected]

Page 3: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Le Shell

Un programme C non intégré au noyau• Interpréteur de commandes• Langage de programmation• Permet d’étendre les commandes du système

d’exploitation• Nombreuses versions

Page 4: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Caractéristiques de l’interprète

• Analyse et interprète des lignes de commandes• Création et lancement des processus associés aux commandes

(contrôle de processus)• Distinction entre processus bloquant et tâche de fond• Redirection des E/S• Mécanisme de substitution de chaînes de caractères• Accès aux ressources de la machine : le processeur (implicitement),

le(s) disque(s), imprimantes,…via des commandes.

• Affiche un prompt pour signifier qu'il est prêt à interpréter une commande

• Permet d’étendre les commandes du système l’exploitation• Propose un véritable langage de programmation• Nombreuses versions (sh, csh, ksh, bash,…)

Page 5: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Structure de la boucle d’interprétation

• Le shell est un programme dont l’algo pourrait être :

Tant que vrai

– Lire une ligne– Identifier la commande (vérifier la syntaxe et sémantique)– Création d’un processus exécutant le fichier associé à la

commande– Attente de la fin d’exécution de ce processus

Fin Tant que

Page 6: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Choix du shell

Nombreuses versions • sh shell Bourne (disponible sur toutes les

machines)• csh Berkeley (Bill Joy)• bash (bourne again shell)• rsh exécution à distance• tcsh, ksh, bash, vsh,…

Page 7: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Langage shell : généralités• Variables utilisateurs (chaînes de caractères)

– Contenu obtenu en préfixant $ à la variable– Affectation par l’opérateur = ( autrement selon le shell)Exemple : v=bonjourecho $vAfficher bonjour

• Variables prédéfinies– Affectées par le shell : # ? $ ! –– Affectées avant l’exécution : HOME PATH MAIL TERM

PS1 PS2 IFS (variables de configuration)– Macroprocesseur de substitution– Commandes internes break continue cd eval exit export

login newgrp read shift set wait unmask trap• Structure de contrôles : if-then-else for-do-done

while-do-done case-in-esac

Page 8: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Variables d'environnement prédéfinies•HOME chemin d'accès au répertoire initial de l'utilisateur •PATH suite de chemins d'accès aux répertoires des exécutables •PS1 invite principale du shell en mode interpréteur •PS2 invite secondaire du shell en mode programmation •IFS séparateurs de champ des arguments •MAIL chemin d'accès à la boite aux lettres utilisateur •MAILCHECK intervalle en sec au bout duquel le mail est contrôlé

•DISPLAY nom de l’écran d’affichage•TERM nom du type de terminal

Page 9: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

QuotageRôle

le quotage est utilisé pour supprimer les fonctionnalités de certains caractères spéciaux du shell, dont les métacaractères.

Méta-caractères: \ $ * ` " ' Caractère d ’échappement: \

le caractère \ préserve la valeur littérale du caractère qui le suit

Simples quotes '...' les caractères inclus entre 2 simples quotes ne sont pas évalués

Doubles quotes "..." les caractères inclus entre 2 doubles quotes conservent leur valeur à l'exception de $ ` et \.

ExempleTOTO='bonjour ’echo '$TOTO et ' "$TOTO"

$TOTO et bonjour

Page 10: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Syntaxe des commandes$ <cmde> [<option> [<option[… ]]] [<fichier> [<fichier> […]]]• $ est le prompt shell (modifiable par PS1)• <cmde> correspond à un nom de commande (fichier exécutable)• Une commande peut contenir plusieurs lignes (utiliser \) le

prompt devient alors « > » (modifiable par PS2)• Une option est une lettre précédée par « - »• Les espaces sont des séparateurs• Pour les noms de fichiers, il existe des caractères génériques

(métacaractères) :– « * » pour n’importe quelle chaîne– « ? » pour n’importe quel caractère– « […] » n’importe quel caractère de la liste– « - » séparateur d’intervalle

Page 11: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les commandes• Le symbole $ invite l’utilisateur à taper une

commande (interprète de commandes)• Les commandes sont tapées en minuscules

– $ <nom de la commande> [options] [paramètres]– $ man <nom de la commande> donne une

documentation en ligne. Exemple : man login– La variable MANPATH contient le répertoire où est

installé le manuel• Voir les commandes whatis et catman

• Pour stopper la saisie de paramètres faire ctrl D

Page 12: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les méta caractères (ou jockers)

Un méta caractère est un caractère qui a une signification particulière– Le caractère * représente un nombre quelconque de

caractère quelconques– Le caractère ? représente un et un seul caractère

quelconque– Le caractère [ commence une définition d’ensemble

qui se termine par ]• Exemple1 : a[bc]d = abd acd• Exemple2 : a[0-9] représente tous les fichier dont le nom

commence par a suivi d’un chiffre.

Page 13: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande man

• Name syntaxe et arguments

• Synopsisusage

• Descriptionexemples, fichiers, exit values

• See alsoFichiers et autres commandes liés

• Variable MANPATH contient le chemin d’accès aux sources la documentation

• Documentation organisés par thèmes en chapitresExemple : les commandes utilisateurs sont dans le chapitre 1 et les primitives

système dans le chapitre 2.

Page 14: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Pour savoir dans quel répertoire vous vous trouvez, utiliser la commande pwd :

pwd pour print working directorypwd donne le chemin absolu de ce catalogue

• Pour changer de répertoire, utiliser la commande cd–cd pour change directorySyntaxe : cd <nom du répertoire destination>Exemple1 : cd /users/ens/

Exemple 2 : cd ramène dans le répertoire de login

Page 15: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Lister le contenu d’un répertoire

• La commande ls –l liste les fichiers en donnant des informations. • Exemple : Si on est dans gesinfo, ls –l donne :total 2-rwx r-x r-x 1 etud1 51 Oct 1 12:00 planingdrwx r-x r-x 2 etud1 512 Oct 1 12:00 src

Spécification d’accès pour le propriétaireSpécification d’accès pour le groupe

Spécification d’accès pour le autresNombre de liens

Propriétaire du fichier

Taille du fichier

Date dernière modification

Nom du fichier

Spécification du type de fichier

Page 16: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département
Page 17: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les options de la commande ls

• –a affiche tous les fichiers même ceux cachés (commençants par .)

• -A affiche tous les fichiers même ceux cachés sauf les répertoires . et ..

• -d affiche les répertoires en tant qu’objets et non pas répertoire

• -l format long, donne toutes les informations sur les objets.

• -t trie les fichiers selon la date de dernière modification

• -R (Récursif) affiche le contenu des répertoires et sous- répertoires associées.

Page 18: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Créer un répertoire

• mkdir pour make directory crée un répertoire ou un sous répertoire

• Exemples : $ mkdir sources

$ mkdir lettres jeux$ mkdir /users/cours projets

$ mkdir –p lettres /jeux

Page 19: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Supprimer un répertoire

• rmdir pour remove directory supprime tout répertoire vide

• $ rmdir projets

Page 20: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Changer les attributs d’un fichiers

• Possibilité de modifier les droits d’accès à un fichier avec la commande

chmod pour change mode• chmod <utilisateurs> [+-=][rwx]• Paramètres :

exécutionxPositionner=Otherso

écriturewRetirer-groupeglecturerAjouter+Useru

Page 21: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples d’utilisation de la commande chmod

$ chmod o-r toto retire le droit de lecture pour les autres utilisateurs pour le fichier toto$ chmod ug+w toto ajout du droit d’écriture pour le proriétaire et le groupe$ chmod –rwx toto enlève tous les droits pour tout le monde$ chmod =r toto positionne pour tout le monde le droit de lecture$ chmod u=rw,go-rwx toto positionne les droits de lecture/écriture pour le propriétaire, et retire tous les droits pour le groupe et les autres

Page 22: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Afficher le contenu d’un fichier

• cat pour concatenate, admet plusieurs paramètres

• Pour arrêter le défilement, taper ctrl s• Pour reprendre le défilement, taper ctrl q

Page 23: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande more

• more accepte plusieurs fichiers : met en en tête de chaque fichoer une bannière avec le nom du fichier courant.

• Offre plusieurs options– ? Permet de voire toutes les options– Return passe à la ligne suivante– Espace passe à la page suivante– q sort de l’affichage prématurément

Page 24: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Copier un fichier

Deux utilisations de la commande cp• cp fichier1 fichier2 duplique fichier1 dans

fichier2• cp fichier1 fichier2… fichiern repertoire• cp –R rep1 rep2

Page 25: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Renommer/déplacer un fichier

• mv (move)• Exemples :

– mv toto titi (renome toto en titi)– mv essai toto (renome essai en toto)– mv toto titi /tmp (déplace deux fichiers)– mv toto /tmp/titi (déplace et renomme)

Page 26: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Détruire un fichier• rm (remove) efface un ou plusieurs fichiers• Exemples :

– rm toto– rm essai1 essai2– rm –r users/ens

• Options possibles :– -f (force malgré les protections)– -i pour confirmer la destruction– -r pour détruire récursivement un répertoire

Page 27: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Commandes de manipulation de fichiers

• basename permet d’extraire le nom le plus relatif d’un fichier : $ basename <nom de fichier> [suffixe]

• Exemples : – $ basename /users/ens/moncompte � moncompte– $ basename moncompte/src/pgme.c .c � pgme– $ basename moncompte/src/pgme.c e.c � pgm

Pas de vérification de l’existence des fichiers

Page 28: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande dirname

• Extrait le chemin du fichier• Exemple :

– dirname /etc/passwd � /etc

Page 29: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande cut• Découpe des lignes d’un fichier ou de l’entrée

standard• $ cut –cliste [<nom de fichier>]• $ cut –fliste [-d<caractère>] [-s] [<nom de fichier>]

liste est une liste d’entiers séparés par des virgules correspondant aux caractères

• Exemples de valeurs de liste : – 1,4,7 1 et 4 et 7– 1-3, 8 1 à 3 et 8– -5,10 1 à 5 et 10– 3- 3 à la fin

Page 30: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les options de la commande cut

• -c découpe selon les caractères• -f découpe par champ selon le caractère

séparateur de champ donné par –d. Par défaut le caractère séparateur est le caractère tab

• -s supprime les lignes qui ne contiennent pas de séparateur

Page 31: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples d’utilisation de cut

• $ cut –c-5 /etc/passwd extrait les 5 premiers caractères de chaque ligne du fichier /etc/passwd

• $ cut –f1,5 –d: /etc/passwd extrait le premier champ (nom de login) et le cinquième champ (nom réél de l’utilisateur) du fichier /etc/passwd

Page 32: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande find

• Exécute une recherche selon les critères définis dans une expression depuis le chemin indiqué.

• Syntaxe : find <chemin> [<expression>]

Page 33: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les expressions possibles pour find• -name <nom> recherche le fichier portant un nom• -links <n> recherche les fichiers possédant n liens • -user <utilisateur> recherche les fichiers appartenant à un

utilisateur• -group <groupe> recherche les fichiers appartenant à un

groupe• -type <type> recherche les fichiers ayant un type (f=fichier,

d=répertoire, b=périphérique)• -ctime <date> recherche les fichiers créés avant ou après une

date de création• -print affiche le fichier pour lequel l’expression est réalisée• -exec <commande> exécute une commande pour le fichier

trouvé• -perm <masque> recherche les fichier ayant le mode

correspondant à un masque (3 chiffres en octal)

Page 34: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples commande find

• $ find / -name passwd –print• $ find .. –user u1 –print• $ find . –type d –print –exec ls –l {}; -

print• $ find / -name core –exec rm {} \; -print• $ find / -name core –exec ls -l \; -exec rm

{}\;

Page 35: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande grep

• Recherche une chaîne de caractères dans un ou plusieurs fichiers

• $ grep [<options>] <chaine> [<fichier>]• Les options :

– -i ignore majuscules et minuscules– -h supprime le nom du fichier devant chaque lligne– -n affiche le numéro de ligne dans le fichier– -v affiche toutes les lignes sauf celles contenant la

chaîne

Page 36: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples commande grep

• $ grep ‘^u’ /etc/passwd• $ grep –v « ; » *.c• $ grep ksh$ /etc/passwd

Page 37: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande head

• Extrait les n premières lignes d’un fichiers• Syntaxe : head [-<n>] [<fichier>]

– Par défaut n=10 et c’est l’entrée standard qui est prise

• Exemples :– $ head –2 prog.c– $ head lettre

Page 38: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande od

• Affiche le contenu d’un fichier sous des format de données spécifié (en option)

• Les options :– -o affiche le contenu en octal (option par défaut)– -c caractères ascii– -d, -D contenu affiché en décimal– -x, -X contenu affiché en hexadécimal

• Exemples : – od –c pgme– od –x prog.c

Page 39: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande sort

• Trie et fusionne des fichiers• Syntaxe : $ sort [<options>] [+pos1] [-pos2] [<fichier>]• Les options :

– -d ordre lexicographique (par défaut)– -n, -b trie suivant la valeur numérique des champs– -r trie selon l’ordre inverse– -tx le caractère x devient le caractère séparateur de

champs par défaut c’est l’espace)– +pos1-pos2 restreint la zone qui est utilisée pour le tri aux

champs qui commencent avec ppos1 et se terminant à pos2

Page 40: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples commande sort

• $ sort /etc/passwd• $ sort –r toto• $ sort +0 –1 +3 –4 toto

Page 41: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande tail

• Copie une partie d’un fichier depuis un certain point jusqu’à la fin

• Syntaxe : $ tail [+-n [lbc] [fr]] [<fichier>]– +n à partir du début– -n à partir de la fin– L’unité l pour les lignes (10 par défaut), b pour les

blocs (512 octets), et c pour les caractères– Si r est indiqué tail affiche alors en commençant par

la fin– f indique que tail ne s’arrête pas en fin de fichier,

mais boucle en attendant que le fichier grossisse

Page 42: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples commande tail

• $ tail –10 prog.c• $ tail +10 prog.c• $ cat >> /tmp/essai• $ tail –2lf /tmp/essai

Page 43: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Commandes de surveillance

• who, w, ps• nice, renice, kill• vmstat : statistiques sur la mémoire virtuelle• swapon, swapoff gestion espace pour la pagination• du espace sur les répertoires• df espace sur le système de fichiers

Page 44: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Commandes et flux

• Tubes nommés• Redidections • Arguments de commandes et entrées de

commandes

Page 45: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Toute commande Unix, dès son lancement, possède 3 fichiers ouverts :– L’entrée standard (stdin) ou 0– La sortie standard (stdout) ou 1– La sortie erreur (stderr) ou 2

• Dans le shell sh, tout fichier ouvert par un programme est représenté par &X, où X est un numéro qui s’incrémente à chaque ouverture de fichier.– stdin, stdout et stderr sont respectivement pour toute commande lancée dans

le shell &0, &1 et &2.

Page 46: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Rediriger la sortie :� $ ls –l 1>listeFich.txt

• Rediriger les deux flux dans un même fichier (en tapant une commande erronée)� $ ls –l >>erreur 2>&1

Exemples :

Page 47: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Exemple : compter le nombre d’utilisateurs connectés� $ who | wc –l

6� $ who | wc –l >temp

$ cat temp6

Page 48: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• $ ls ; who >tempbinuserstmp

• $ cat tempu1 tty05 Oct 8 08:35u2 tty05 Oct 8 09:55

Seule la sortie de la dernière commande est redirigée vers le fichier temp

• $(ls;who)>temp; cat tempbinuserstmpu1 tty05 Oct 8 08:35u2 tty05 Oct 8 09:55

Page 49: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exécution des commandes

1) Interactif (foreground)2) Asynchrone (arrière plan, background)3) Différé4) cyclique

Différents modes d’exécution des commandes

Page 50: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Mode dans lequel le système rend de façon interactive le résultat de la commande (vue précédement)

Mode d’exécution interactif (foreground)

Page 51: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• <commande> &• nohup <commande> &• les touches ctrl (contrôle) et z (simultanément), puis suivies de

la commande bg permet de lancer une commande en background

• nohup évite que les processus lancés en backgroud ne soit arrêtés lors du logout. Envoi résultat par mail à l’utilisateur.

• Lancement de plusieurs commandes sans attendre que chacune d’entre elles se termine

• cat essai1 & cat essai2… numéro du processus lancé par le Shell• $ cc pgme.c &124569On récupère le promt shell avant que la compilation ne soit terminée• $ (echo « Bonjour »;sleep 15; echo « Bye ») &

Mode d’exécution asynchrone (arrière plan, background)

Page 52: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• at <un temps> <commande>Démon atCommandes atq et atrmFichiers de configuration at.allow et at.deny (voir

plus loin fonctionnement similaire à ceux de cron)

Fichers : /var/spool/cron/atspool/var/spool/cron/at.jobs

Exemple : at 8:15 May 24 < fichCmde

Mode d’exécution différé

Page 53: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Démon cronCommande crontabPour un utilisateur quelconque :/var/spool/cron/crontabs/<nom utilisateur>

Pour le super utilisateur :/var/spool/cron/crontabs/root

Format d’une ligne de ce fichier :Minute heure jours_mois mois jours-semaine commandeOù :

– Minute : 1 à 60– heure : 1 à 60– jours_mois : 1 à 31– mois : 1 à 12– jours-semaine : 0 à 6 (0=dimanche) – Commande : commande à exécuter de façon cyclique.

Mode d’exécution différé cyclique

Page 54: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Fichiers de configuration associés :• /etc/cron.d/cron.allow• /etc/cron.d /cron.deny

• Accès autorisé à un utilisateur si :/etc/cron.d/cron.allow existe et le user n’y est pas

Ou bien :/etc/cron/cron.allow n’existe pas et si le nom user n’apparait pas dans cron.deny

• Acces refuse à un user si :/etc/cron.d/cron.allow existe et le user n’y est pasOu bien

/etc/cron/cron.deny existe et l’utilisateur est dedans et cron.allow n’existe pas• Si aucun des deux fichiers n’existe, seuls les utilisateurs ayant les autorisation

solaris.jobs.users peuvent soumetre des jobs

• Pour root, les règles s’appliquent si les 2 fichiers /etc/cron/cron.allow et /etc/cron/cron. deny existent

Contrôle du lancement de commandes cyclique

Page 55: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Comment changer shell de login ?1. Si le shell est valide (présent dans /etc/shells) et les

binaires disponibles (/etc/sh, /etc/csh/, /etc/bash,…): – chsh –s shellDeLogin utilisateur– passwd –sUne ligne du fichier /etc/passwd contient à la fin, le nom du shell

par défaut, à activer au moment du login.

2. Si les binaires ne sont pas disponibles :Acquérir les sources et effectuer la compilation soi-même.

Page 56: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• pdksh : version libre de ksh :– ftp://ftp.cs.mun.ca/pub/pdksh

• bourne shell : compilateur CCsh, commercialié par Comeau Computing :– [email protected]

• bash écrit et maintenu par Free Software Foundation

Page 57: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Quelques spécificités syntaxiques des différents shell

sh• Caractères spéciaux: * ? [akl] [a-g] [!A-Z]• # $ & ; < << > >> | ‘ « ` / () {}• Passage d’arguments :$0 $1… $9$# nombre arguments (sauf $0)$$ pid du shell qui exécute$* chaine des arguments (sauf $0)$@ liste des arguments (sauf $0)$? Code retour de la dernière commande$! Pid du dernier processus asynchrone

Page 58: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

sh (suite)• Variables nomDeVariable=valeur

Echo $ nomDeVariable

• Variables d’environnement– Créées au login (HOME, USER…)– Générales (MAIL, CLASSPATH, PATH,…°

• Le problème d’exportation de variablesecho $TOTOTOTO='bonjour je suis sh'echo $TOTObonjour je suis shsh

echo $TOTO (TOTO n'a pas été exporte)

Ctrl+Dexport TOTO sh

echo $TOTO (TOTO a été exporté)bonjour je suis sh

Page 59: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Structure de contrôle

• Condition : c’est toujours le code retour d’une commande (0 pour vrai, faux sinon)

Test expression où expression vaut :• -f nom• -d nom• -r (xw) nom• -s nom (taille)• -z chaine (chaine vide)• chaine1 = chaine2 chaine1 != chaine2 (égalité entre chaines)• Nombre1 –eq nombre2 (-ne –gt –ge –lt –le)

– Connecteurs ! –a -o

Page 60: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Permet l’arithmétique entière sur les variables. + - * / %

A = `expr $A + 1`• Permet la comparaison de chaînes de caractères (le

résultat est le nombre de caractères reconnus au début)expr « 1234trfhj » : ‘[0-9]*’ donne 4• Permet l’extraction de chaînes

expr « toto.c » : « \(.*\).c donne toto

expr

Page 61: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Conditionnelleif cond1thenCmde…elif cond2then

Cmde……else

Cmde…fi

• Conditionnelle multiplecase nomVariable in

chaine1) cmde…;;chaine2) cmde…;;…esac

Page 62: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Bouclesfor nomVar in listedo

Cmde…Done

while conddo

Cmde…done

until conddoCmde…done

Sortie exceptionnelle par break(n) continue exit(n)

Page 63: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Liste de commande :{commande…} && {commande} si code retour est 0{commande…} || {commande} si code retour n’est pas

0

• Fonction :nomFonction() {commande…}Peut renvoyer un code retour return(n)

Page 64: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Entrées/sorties

• read listeNomVariablesLit sur l’entrée standard. Les chaînes sont

séparées par des espaces ou des tab• echo chaine\c pas de passage à la ligne\b backspace\n newline,…

Page 65: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Compléments sur les variables

• ${nomVariable}chaine• ${nomVariable:-chaine} la substitution se

fait même si la variable est nulle ou non initialisée

• ${nomVariable:+chaine} la substitution se fait si la variable est initialisée, sinon substitution de la chaine vide

Page 66: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

ksh et bash• Fichiers de configuration ~/.profile /etc/profile

/etc/suid_profile• Variables d’environnement en plus• Des fonctions en plus• Autres spécificités :

Expansion de ~ en HOMECompléments des noms par EscCommande alias et unalias (alias nomAlias=chaine)Capture de la sortie standard par $(commande)Historique des commandes${nomVariable#chaine} enlève chaîne au début${nomVariable%chaine} enlève chaîne à la fin

Page 67: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

ksh et bash (suite)• ${#nomVariable} retourne le nombre de caractères• ${#*} ou ${#@} retourne le nombre de paramètres

positionnels• Génération des noms de fichiers

?(listeDechaine) reconnaît 0 ou une des chaines*(listeDechaine) reconnaît 0 ou plusieurs chaines+(listeDechaine) reconnaît une ou plusieurs chaines@(listeDechaine) reconnaît une des chaines!(listeDechaine) reconnaît tout sauf une des chaines

Page 68: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Ksh et bash (suite)

• Tableau de variables :typeset nomVariable[taille] déclarationset –A nomVariable listeChaine affectationnomVariable[rang]=chaine affectation${nomVariable[rang]} désignataion${nomVariable}[*]} retourne la taille du tableau

Page 69: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Commande let (préférable à la commande expr)+ - * / % < <= > >= == !== = (affectation)Exemples :let i=2let i=i+1let « j =i*2 » quoter si espacesou bien ((j =i*2)) pour ne pas quoterif ((j <=i*2)) ….

ksh bash (suite)

Page 70: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Expression conditionnelle[[expression]] où epxression peut être :fichier1 –nt fichier2 plus récentfichier1 –ot fichier2 plus ancienchaine1<chaine2 avant dasn l’ordre lexicographiquechaine1>chaine2 après dans l’ordre lexicographique-l c’est un lien

-s c’est un socketconnecteurs ! && ||

ksh bash (suite)

Page 71: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

csh• Ce qui change :

Fichier de configuration ~/.cshrcDéfinition des variables :

set nomVariable = valeur (unset)setenv nomVariable valeur (unsetenv)

Structures de contrôleif ( expression) then

commande…elsif (expression)

commande…else

commande…endif

Page 72: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

csh

• Switch ( chaine)case motif:

commande…[breaksw]…default:

commande…endsw

Page 73: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

csh (suite)

• foreach nomVariable (listeValeurs)Commande…

endwhile (expression)

commandeend

repeat nbFois commande

goto etiquetteetiquette:

Page 74: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

csh (suite)• Les paramètres positionnels ($0 $1… $9)• argv[] accepté• Les entrées : le read est remplacé par :

set nomVariable = $<• Expression dans if while … :

+ - * / % ++ --<= >= <> == != =~ !~• & ^ | (opération bit à bit)• ! && ||• if {commande} permet de tester le comde retour

Page 75: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Écriture de commandes shell

1. Fichier de commandes• Édition d’un fichier• Le nom du fichier sera le nom de la commande• Modification de la variable PATH

2. Mode interactif

Page 76: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Le langage awk

•Permet d’appliquer un programme, écrit dans une syntaxe spécifique, à un ensemble de fichiers donnés en entrée

•Basé sur la notion de pattern qui permet d’effectuer un filtrage sur les données des fichiers traités•Plus élaboré que sed (stream editor)

•Deux commandes/etc/bin/awket /usr/xpg4/bin/awk

Page 77: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La commande awk possède deux formes

1) awk ‘<programme>’ <fichier1> <fichier2> …2) awk –f <fichierPgme> -F <carSep> <fichier1>

<fichier2> …

Page 78: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Forme générale d’un programme awk

Awk lit chaque ligne d’entrée et la divise en des champs séparés par un séparateur.

BEGIN{<instructions initiales>

}

<sélecteur1 (pattern)> {<action1>}

<sélecteur2 (pattern)> {<action2>}

END{<instructions finales>

}

Lecture d’une ligne par awk

Page 79: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Dans une expression awk :• $0 représente la ligne d’entrée dans sa totalité• $1 représente le premier champ de la ligne• $2 représente le deuxième champ de la ligne• …• $i représente le i ième champ de la ligne• NF représente le nombre de champs de la ligne traitée• NR représente le nombre de lignes lues• FNR représente le nombre de lignes du fichier• FS représente le séparateur de champs (défaut espace ou tabulation)• RS représente le séparateur de ligne (défaut retour chariot)• ARGC représente le nombre d’arguments de la commande• ARGV représente un tableau des arguments (sans les option et le

programme et commence à zéro : ARGV[0] contient le nom de la commande, ARGV [1] le premier fichier, ARGV [2] le deuxième fichier,… de la commande

• FILENAME représente nom du fichier actuel• OFMT représente le format d’impression des nombres• OFS représente le séparateur de champs à l’impression• ORS représente le séparateur de lignes à l’impression

Page 80: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples• awk ‘/srb/’ $HOME/totoimprime toutes les lignes contenant la chaine srb dans le

fichier $HOME/toto• awk ‘END{print NR}’ $HOME/toto imprime le nombre de lignes du fichier $HOME/toto• awk ‘{print $3}’ $HOME/totoimprime le troisième champ de chaque ligne du fichier• awk ‘NR==10’ imprime la dixième ligne de l’entrée• awk ‘{champ=$NF}

END{print champ}’imprime le dernier champ de la dernière ligne

Page 81: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Et encore d’autres exemples awk utiles• awk ‘NF>4’ /$HOME/totoimprime toute ligne à plus de 4 champs• awk ‘$NF>4’ /$HOME/toto imprime toute ligne dont le dernier champ est supérieur à 4• awk ‘{nf=nf+NF}

END{print nf}’ /$HOME/toto imprime le nombre de champs de toutes les lignes d’entrées• awk ‘/jean/ {nlignes+=1; print nlignes} ‘imprime le nombre de lignes contenant le mot ‘jean’• awk ‘$1>max {max=$1;maxligne=$0}

END{print max,maxligne}’imprime le plus grand champ et la ligne qui le contient• awk ‘length($0)>80’ /$HOME/totoimprime toute ligne plus longue que 80

Page 82: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples (suite)• awk ‘{temp=$1;$1=$2;$2=temp;print}’ /$HOME/totoimprime chaque ligne en permutant le premier et le

deuxième champ• awk ‘{print NR,$0} ‘/$HOME/toto imprime chaque ligne précédée par le numéro de ligne• awk ‘{for (i=NF;i>0;i=i-1)

printf (« %s »,$i)printf(« \n »)}’

imprime les champs de chaque ligne en ordre inverse

Page 83: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Expression awk• Une expression awk peut prendre une valeur

numérique ou une chaine• Opérateurs disponibles:

+,-,*,/,%,^ et la concaténation (caractère espace)++,--,+=,-=,*=,/=,^= et %=

• Relations d’ordre (appliqués aux chaînes et aux nombres)

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

• Opérateurs de filtrage explicites :~ et !~ Exemples : $1~ /srb/ est vraie que pour les enregistrements dont le

premier champ est égal à srb(cf. Description ci dessous)

Page 84: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les expressions régulières• Pour être utilisées en tant que pattern (sélecteur) une

expression régulière doit être placée entre slash (/ et /) de la façon suivante : si r est une expression régulière, on écrit /r/<expression> ~ /r/ vérifiée si la ligne contient r<expression> !~ /r/ vérifiée si la ligne ne contient pas r

• Les métacaractères employés :^,$,.,[], |(),*,+,?,\ (cf. Tableau)\ sert à masquer un des autres caractères, placé devant certains

caractères il filtre une séquence de tabulation (tab chap2 p40

Page 85: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Expressions régulières utilisées

c le non méta caractère\c le caractère littéral c^ début de chaine$ fin de chaîne. tout caractère [c1c2…] tout caractère c1, c2,…[^c1c2…] tout caractère sauf c1, c2,…r1|r2 toute chaîne filtrée (matchée) par r1 ou bien r2(r1)(r2) toute chaîne xy où r1 filtre x et r2 filtre y(r)* zéro ou plusieurs chaînes consécutives filtrées par r(r)+ une ou plus d’une chaînes consécutives filtrées par r(r) ? La chaîne nulle ou bien la chaîne filtré par r(r) toute chaîne filtrée par r

Page 86: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Signification des caractères précédé de \

• \b backspace : supprime le dernier caractère d’une chaîne

• \f formfeed : nouvelle page• \n newline : nouvelle ligne• \r carriage return : retour à la ligne• \t tabulation : crée une tabulation de 10 espaces• \ddd valeur octale ddd où ddd est trois

nombres compris entre 0 et 7

Page 87: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples expressions régulières• /([a-zA-Z])(ee)/• /(forever|closer) (remain|and)/• /F*/• /FR+E/• /FRR*E/• /FR?E/• /[A-Z]+/• /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)([eE][+-]?[0-9]+)?$/

Page 88: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Utilisation des variables en awk

• Pas de déclaration ni d’initialisation explicite de variables ni de type• Une variable peut correspondre à un type nombre ou chaîne ou même aux

deux. Awk convertit la valeur de la chaîne en nombre ou en chaîne lors de l’exécution du programme.

• Initialisation à la chaîne videExemple : $1==« Fredo » {

Fredo=10;$2=$2+Fredoprint $2}

Affiche la valeur du deuxième champ augmentée de 10 pour toute ligne dont le premier champ est Fredo

• Exemples :– NF>5– $1> «s »

Page 89: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les actions awkUne action awk se compose d’une ou plusieurs instructions

séparées par un point-virgule ou un retour chariot. Une instruction peut être :

Une affectation,une instruction conditionnelle, une boucle ou l’appel d’une fonction standard telle que print. Voici la liste des instructions :

If (condition) <instruction1> [else <instruction2>]While (<condition>) <instruction>for (<expr1>;<cond>;<expr>) <instr>for (<var> in <tableau>) <inst>do <instr> while (expr)breakcontinue{[<instructions]…}Variable=exprprint [liste expr] [>epxr]

Page 90: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les tableaux awk• Pas de déclaration. • Indexation possible avec des chaines de caractères• D’où une utilisation possible comme mémoire

associative• Exemple : le premier champ du fichier /etc/passwd

contient les noms de login des utilisateurs.• awk ‘

BEGIN{FS=« : »}

{if (user[$1] {print $1, « dupliqué »}

user[$1]=NR}’ </etc/passwd

Page 91: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les fonctions prédéfinies awk• exp (x) retourne l’exponentiel de x• log(x)• sqrt (x)• int (x) retourne l’entier >0 le plus proche de x• rand() retourne un nombre au hasard entre 0 et 1 (>=0 et <1)• index (s,t) position de la première occurrence (apparition) de t dans s. rend zéro

si t n’apparaît pas dans s.• int (s) tronque s pour avoir un entier• length (s) longueur de s• match (s,x) position de l’expression régulière x dans la chaîne s• split (s,a,fs) disperse la chaine s dans un tableau a et retourne le nombre

d’éléments de a• sprint (fmt, listExpr) retourne listExpr formatée selon le format fmt• substr (s,m,n) retourne les n caractères, sous chaîne de s, en commençant à la

position m.• getline lit une ligne dans $0 (cf. ci-dessous)

Page 92: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Définition d’une fonction

• function <nom>(<liste de paramètres>){[return [<expression>]]<instructions>}

<liste de paramètres> =séquence de variables séparées par des virgules

Page 93: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les sorties

• print• print <expression1>, <expression2>,…• print <expression1>, <expression2>,…> <fichier>• print <expression1>, <expression2>,…>> <fichier>• print <expression1>, <expression2>,…| <commande>• printf (<format>,<expression1>, <expression2>,…)> <nomfichier>• printf (<format>,< expression1>, <expression2>,…)>> <fichier>• printf (<format>,< expression1>, <expression2>,…) | <commande>• close(<fichier>), cloture de la connexion entre printf et <fichier• close(<commande>) fermeture des pipes• system (<commande>) exécute une commande et retourne la

valeur retournée par la commande <commande>

Page 94: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Caractères d’écriture de formatsc caractère ASCIId partie entière d’un nombree [-]d.ddddddE[+-] ddf [-]ddd.ddddddg e ou f selon ce qui est le plus court; supprime les

zéros en tropo nombre octal non signés chaînex nombre hexadécimal non signé% écrit un % aucun argument n’étant utilisé

Page 95: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Exemples de formatsFormat : fmt expression résultat%c 97 a%d 97.5 97%5d 97.5 97%e 97.5 9.750000E+01%f 97.5 97.500000|%s| largeur |largeur||%.3s| largeur |lar|

Page 96: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Les entrées• awk ‘<programme>’ <liste fichiers en entrée>• awk ‘<programme>’ <entree standard>• L’entrée peut être un pipe :

Exemple: grep ‘toto’ /etc/temp | awk ‘{$1<=10 {print $0}

}’• Séparateurs d’entrée: FS (équivalent de OFS sur la sortie)

et RS (équivalent de ORS sur la sortie)

• Modification possible en ligne de commande de FS avec l’option –FExemple : awk –F’:’ –f fichpgme /etc/passwd

Page 97: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

La fonction getline, pour lire des enregistrement en entrée

• getline lit sur l’entrée standard et remplit les variables $0, $1, $2, $3,…, NR, NF et FNR

• getline <nom de variable> lit sur l’entrée standard et met le met dans une variable

• getline <nom de fichier> lit l’enregistrement suivant dans le fichier et le met dans $0 en mettant à jour NR

• getline <nom de variable> < <nom de fichier> lit le prochain enregistrement du fichier et le met dans une variable

• <commande> | getline lit la sortie de commande et le place dans $0 en mettant à jour NF

• <commande> | getline <nom de variable> lit la sortie de commande et le place dans une variable

Page 98: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Applications

• Validation, transformation et traitements de données

• Gestion de bases de données• Génération de texte, mise à des formats

spéciaux• Compilation, interprétation, transformation

de langage• Expérimentation sur des algorithmes

Page 99: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Etudes d’exemples

• Base de données• Mini langage

Page 100: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Base de données (spécifications)

• Interrogation d’une base de données d’une discothèque. Elle regroupe, par style de musique, les groupes, les titres des albums, le nombre de disques selon le type de support (cassette, CD, ou disque vinyl).

• On effectue plusieurs interrogations de la base :– par style de musique (liste de tous les groupes avec

renseignements associés), – Par groupe (liste des albums présents dans la base, le

nombre disponible et leur prix)– Par titre d’album (prix, disponibilité, groupe et style)

Page 101: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Le menu qui apparaîtrait est :� Style de musique�Groupe�Titre d’album�Quitter

Tant que le choix Quitter n’est pas choisi, le programme bouclera et chaque résultat d’interrogation sera à la fois affiché sur la sortie standard et mis dans un fichier out.dat où tous les résultats seront mémorisés.Il est également possible de modifier la base de données.

Page 102: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

• Nom du fichier = musique• Structure du fichier avec les particularités

suivantes :– Tous les caractères doivent être en majuscules– Le champ séparateur entre les éléments virtuels est

« : » qui est initialisé au début du programme– Le champ de détection du style de musique est « * »– Le champ « ; » est un sous champ de détection à

l’intérieur d’un élément virtuel qui permet de distinguer le type de support et le prix qui lui associé

Page 103: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

*STYLE : HARDGROUP : SCORPIONSALBUM : I’M STILL LOVING YOUSUPPORT : CD=546; VINYL=400; K7=71PRIX :110;63;44*STYLE :ROCKGROUP : ALAN PARSON PROJECTALBUM : AYE IN THE SKY: STEREOTOMYSUPPORT : CD=5346; VINYL=456; K7=96PRIX :115;70;52

Page 104: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

STYLE :ROCKGROUP : PINK FLOYDALBUM : THE ALL: ANIMALS: OBSCUED BY CLOUDSSUPPORT : CD=4200; VINYL=213; K7=45PRIX :105;75;42*

Page 105: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Un mini-langage: génération d’un calculateur

• Description des expressions arithmétiques par une grammaire :expr � terme

expr + termeexpr – terme

terme � faitterme*faitterme/fait

fait � nombre(expr)

Page 106: Programmation en exploitation sous UNIXabchiche/Documents/shell.pdf · Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Octobre 2003 Licence GSINFO Département

Bibliographie� ������������� ��������������� � ������������ �����

������� !"#$ �$%# "

Éditions Eyrolles� ����������&����'�&���������(��)�� *)���+&��

������� ,"-!! ��� %

Éditions Eyrolles� ��� .&���������(��)��� .�/��0� �/�������������

������� !"#$ �$## -

Édition Eyrolles� ���/ 1�&��&���'�&���������

1��� ��(&�����2�������������3����45�0�

������� !""$ -$,* 6

Éditions Eyrolles� ����������� �� ����������7�8�������.&����������������������������������