Programmation Unix 1 cours n 5

Documents pareils
Java Licence Professionnelle CISII,

Environnements informatiques

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Plan du cours. Historique du langage Nouveautés de Java 7

Programmation Web. Madalina Croitoru IUT Montpellier

STAGE IREM 0- Premiers pas en Python

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Programmation système en C/C++

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Introduction à MATLAB R

Premiers pas. Shell? Les processus vu comme des filtres. commandes

Cours Informatique Master STEP

1 Lecture de fichiers

Attaques applicatives

1. Structure d'un programme FORTRAN 95

Exonet : sauvegarde automatisée d une base de données

TP1 - Prise en main de l environnement Unix.

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Initiation à la programmation en Python

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

CM2 L architecture MIPS32

as Architecture des Systèmes d Information

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

SERVEUR DE SAUVEGARDE POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Aide-Mémoire unix. 9 février 2009

TP 1 Prise en main de l environnement Unix

Présentation du langage et premières fonctions

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)


Conventions d écriture et outils de mise au point

Bases de programmation. Cours 5. Structurer les données

Cours d initiation à la programmation en C++ Johann Cuenin

TD3: tableaux avancées, première classe et chaînes

TP1. Outils Java Eléments de correction

Perl Orienté Objet BioPerl There is more than one way to do it

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Corrigé des exercices sur les références

Cours d algorithmique pour la classe de 2nde

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Shell Bash Niveau débutant

TP 1. Prise en main du langage Python

Algorithmique et Programmation, IMA


Programmation en Java IUT GEII (MC-II1) 1

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

sshgate Patrick Guiran Chef de projet support

Programme Compte bancaire (code)

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?


Cours Programmation Système

1 Recherche en table par balayage

Outils pour la pratique

Python Les fondamentaux du langage

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Client windows Nagios Event Log

Introduction aux Systèmes et aux Réseaux

ACTIVITÉ DE PROGRAMMATION

Corrigé des TD 1 à 5

Algorithmes et programmation en Pascal. Cours

Programmation système de commandes en C

AWS avancé. Surveiller votre utilisation d EC2

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Principes des langages de programmation INF 321. Eric Goubault

Programmation C++ (débutant)/instructions for, while et do...while

PHP 4 PARTIE : BASE DE DONNEES

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

Utilisation d objets : String et ArrayList

Découverte de Python

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Programmer en JAVA. par Tama

Programmation système I Les entrées/sorties

Introduction au langage C

Chap III : Les tableaux

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Initiation à Excel. Frédéric Gava (MCF)

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

Nouvelle version de Zonecheck, la 3.0, avec tests DNSSEC

INF 321 : mémento de la syntaxe de Java

TP, première séquence d exercices.

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Recherche dans un tableau

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

CORRECTION EXERCICES ALGORITHME 1

Transcription:

Programmation Unix 1 cours n 5 Edouard THIEL Faculté des Sciences Université d Aix-Marseille (AMU) Septembre 2016 Les transparents de ce cours sont téléchargeables ici : http://pageperso.lif.univ-mrs.fr/~edouard.thiel/ens/unix/ Lien court : http://j.mp/progunix Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 1/35

Plan du cours n 5 1. Syntaxe avancée 2. Substitutions 3. Tableaux indexés 4. Tableaux associatifs 5. Redirections avancées Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 2/35

1 - Syntaxe avancée Exécution en arrière-plan Séparateurs entre deux commandes Grammaire des commandes Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 3/35

Exécution en arrière-plan Le shell peut exécuter une commande dans un sous-shell en arrière-plan : commande arguments & le shell n attend pas qu elle soit terminée $?= 0 (succès) même si la commande n est pas trouvée la commande est détachée du terminal On peut mettre en arrière-plan la dernière commande lancée : ^Z puis bg Remettre en avant-plan la dernière commande en arrière-plan : fg Liste des commandes qui tournent en arrière-plan : jobs -l Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 4/35

Séparateurs entre deux commandes com1 ; com2 com1 & com2 com1 && com2 com1 com2 séquentiel : attend la fin de com1 avant de lancer com2 ( ; ou RC) parallèle : lance com1 en arrière-plan puis lance tout de suite com2 séquentiel conditionnel : si com1 réussi, alors lance com2 séquentiel conditionnel : si com1 échoue, alors lance com2 Le résultat est celui de la dernière commande exécutée. Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 5/35

Séparateur conditionnel Attention : com1 && com2 com3 n est pas équivalent à if com1 ; then com2 ; else com3 ; fi $ if true ; then false ; else echo "perdu" ; fi $ true && false echo "perdu" perdu Usage typique : (cd progs && make monprog &&./monprog) mkdir svg { echo "Échec." > /dev/stderr ; exit 1;} for fichier in * ; do test -f "$fichier" continue echo "$fichier" done Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 6/35

Grammaire des commandes Commande simple : [var=valeur...] commande [arguments] [redirections] Pipeline de commandes : [time] [!] simple [ simple...] Liste de commandes : pipeline [séparateur pipeline...] Commande composée : où séparateur est parmi ; & && (liste) { liste ;} if liste ; then liste ; fi while liste ; do liste ; done Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 7/35

2 - Substitutions Indirections Référence de nom Passage par référence Expansion du tilde Ordre des substitutions Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 8/35

Indirections Il est possible de mémoriser le nom d une variable, puis de retrouver sa valeur : $ a=12 ; x=a $ echo "$x" a $ echo "$$x" 2158x $ echo "${$x}" bash: ${$x} : mauvaise substitution $ echo "${!x}" 12 Dernier argument : $ set ga bu zo ; echo "${!#}" zo Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 9/35

Référence de nom Nouveauté bash 4.3 : attribut nameref (inspiré de ksh) Une variable peut faire référence à une autre variable. declare -n nouvelle=originale local -n nouvelle=originale Exemple : $ a=ga $ declare -n b=a $ echo $b ga $ a=bu ; echo $b bu $ b=zo ; echo $a zo Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 10/35

Passage par référence Ce mécanisme permet de passer un paramètre par référence : afficher_valeur () # var { local -n var="$1" echo "$var" } modifier_valeur () # var valeur { local -n var="$1" ; local valeur="$2" var="$valeur" } $ x=lundi $ modifier_valeur x mardi $ afficher_valeur x mardi Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 11/35

Expansion du tilde ~ répertoire principal ~user répertoire principal du user +~ répertoire courant -~ répertoire précédent Délicat à manipuler : ne doit pas être protégé par "" ou hors affectation, doit figurer en tête dans une affectation, doit suivre le premier = ou un : Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 12/35

Ordre des substitutions Les substitutions sont effectuées dans cet ordre : 1) Expansion des accolades {ga,bu} 2) Expansion du tilde ~ ~thiel 3) Expansion des arguments $1 $# $* "$@" 4) Expansion des variables $foo ${t[]} 5) Substitution des commandes $() 6) Évaluation arithmétique $(()) 7) Découpage des mots 8) Développement noms fichiers *? [] Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 13/35

3 - Tableaux indexés Tableaux de chaînes de caractères à 1 dimension, indexés par entiers 0 élastiques, de taille illimitée creux, cases non contigües declare -a tab declare -a tab[$n] tab[$i]=valeur ${tab[$i]} crée un tableau tab idem, taille ignorée affectation + création automatique expansion de la valeur "" si non affectée Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 14/35

Accolades obligatoires Lors de l expansion de valeur, les accolades sont obligatoires. Exemple : $ t[0]=ga ; t[1]=bu $ echo $t # incorrect ga $ echo $t[1] # incorrect ga[1] $ echo ${t[1]} bu Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 15/35

Expansion arithmétique de l indice Bash fait une expansion arithmétique de l indice : même syntaxe entre [ ] que dans (( )) on peut omettre les $. Exemple : $ i=2 $ x[i]="ga" ; x[i+1]="bu" $ echo "${x[i]} ${x[i+1]}" ga bu Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 16/35

Liste On peut exprimer les éléments d un tableau par une liste : tab=() tab=(val1 val2.. valn) vide le tableau écrase le tableau, indices 0..n-1 tab=([2]=val1 [5]=val2..) idem, pour les indices donnés tab+=(valx..) Exemple : concatène la liste à la fin de tab $ t=(ba bu) $ t+=(zo meu) $ declare -p t declare -a t= ([0]="ba" [1]="bu" [2]="zo" [3]="meu") Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 17/35

Valeur des cases Récupérer la liste des valeurs : ${tab[*]} ou "${tab[@]}" séparées par ou " " Exemple : $ t=(ga bu zo meu) $ echo "${t[1]}" bu $ echo "${t[*]}" ga bu zo meu Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 18/35

Itérer sur les cases Utiliser ${tab[*]} ou "${tab[@]}"? $ t=(ga "bu zo" meu) $ for e in ${t[*]}; do echo -n " $e "; done ga bu zo meu $ for e in "${t[*]}"; do echo -n " $e "; done ga bu zo meu $ for e in ${t[@]}; do echo -n " $e "; done ga bu zo meu $ for e in "${t[@]}"; do echo -n " $e "; done ga bu zo meu Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 19/35

Affectation mixte $ t=(zero un deux [5]=cinq [4]=quatre) $ echo ${t[*]} zero un deux quatre cinq $ t=(zero un deux [5]=cinq [4]=quatre ga) $ echo ${t[*]} zero un deux quatre ga Élément inséré au dernier index utilisé + 1 Spécifié ainsi dans le man de bash ; à éviter. Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 20/35

Nombre de cases Longueur d une case : ${#tab[i]} Nombre d éléments : ${#tab[*]} Exemple : $ t=(ga "bu zo") ; echo "${#t[*]}" 2 $ t[6]="meu" ; echo "${#t[*]}" 3 $ declare -p t declare -a t= ([0]="ga" [1]="bu zo" [6]="meu") $ echo "${#t[1]}" 5 Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 21/35

Suppression Supprimer le tableau : unset tab une case : unset tab[i] $ t=(ga bu zo meu) $ unset t[1] t[2] $ echo "${t[*]}" ga meu $ echo "${#t[*]}" 2 $ declare -p t declare -a t= ([0]="ga" [3]="meu") # tableau creux Ne pas se servir du nombre d éléments pour itérer si le tableau n est pas tassé. Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 22/35

Liste des indices Liste des indices des éléments : ${!tab[*]} Exemple : $ t=([2]=ga [8]=bu [5]=zo) $ echo ${!t[*]} 2 5 8 Boucle sur les indices d un tableau creux : $ for i in ${!t[*]}; do echo "t[$i] = ${t[i]}" done t[2] = ga t[5] = zo t[8] = bu Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 23/35

Compléments Tableau local à une fonction : local -a tab Lire une ligne sur l entrée standard puis mémoriser les mots dans un tableau : read -a tab Placer les arguments dans un tableau : args=("$@") Recopier un tableau et tasser : B=("${A[@]}") Concaténer 2 tableaux et tasser : C=("${A[@]}" "${B[@]}") Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 24/35

Passage de tableau en paramètre Les paramètres sont des chaînes de caractères. On peut passer un tableau par recopie avec "${tab[@]}" Depuis bash 4.3 on peut passer des tableaux par référence : afficher_case () # tableau indice { local -n tab="$1" # -n = attribut nameref local ind="$2" echo "${tab[ind]}" } $ ga=(le "lundi au" soleil) $ afficher_case ga 1 lundi au Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 25/35

Modification d un tableau en paramètre C est réellement un passage par référence : modifier_case () # tableau indice valeur { local -n tab="$1" local ind="$2" val="$3" tab[ind]="$val" } $ ga=(bu zo) $ modifier_case ga 5 meu $ declare -p ga declare -a ga= ([0]="bu" [1]="zo" [5]="meu") Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 26/35

Tableaux d entiers On peut utiliser les expressions arithmétiques : $ t=(7 9 6 4 11 8) $ n=${#t[*]} $ for ((i=1; i<n; i++)); do if ((t[i] > t[i-1])); then echo $((t[i])) fi done 9 11 Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 27/35

4 - Tableaux associatifs Tableau dont les indices sont des chaînes (non vides) : encore appelés hash table ou dictionnaire. Associe des clés à des valeurs. Permet de représenter des tables de bases de données outil très puissant (Javascript, Php, Perl, Python, Ruby,...) Déclaration obligatoire : declare -A dico puis même syntaxe que pour les tableaux. Incompatibilité avec tableaux normaux unset avant Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 28/35

Exemple $ declare -A dico $ dico=([lundi]=poisson [mardi]=viande) $ echo ${!dico[*]} lundi mardi $ echo ${dico[*]} poisson viande # clés # valeurs $ for cle in "${!dico[@]}"; do echo "dico[$cle] = ${dico[$cle]} " done dico[lundi] = poisson dico[mardi] = viande Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 29/35

Passage de tableau en paramètre Passage par référence possible depuis bash 4.3 : afficher_case () # tableau cle { local -n tab="$1" # attribut nameref local cle="$2" echo "${tab[$cle]}" # $cle car non entier } $ declare -A dico=([lundi]=poisson [mardi]=viande) $ afficher_case dico mardi viande Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 30/35

Modification d un tableau en paramètre Test du passage par référence : modifier_case () # tableau cle valeur { local -n tab="$1" local cle="$2" val="$3" tab[$cle]="$val" # $cle car non entier } $ modifier_case dico jeudi oeuf $ declare -p dico declare -A dico= ([lundi]="poisson" [jeudi]="oeuf" \ [mardi]="viande" ) Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 31/35

5 - Redirections avancées On a vu : < redirection stdin > redirection stdout >> append > écrasement forcé << <<< document en ligne 2> redirection stderr Redirection sur un descripteur existant : [n]<&k en entrée [n]>&k en sortie Le descripteur n devient une copie du descripteur k existant (fonction C : dup2). Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 32/35

Exemples de redirections Redirection de la sortie d erreur dans le fichier : ls -R / > liste.txt 2>&1 Ordre important : 2 terminal puis 1 fichier ls -R / 2>&1 > liste.txt Pour écrire sur stderr : echo "message" > /dev/stderr ou echo "message" >&2 préféré Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 33/35

Nouveaux descripteurs On peut créer des descripteurs : $ echo "foo" 3> trace.txt 1>&3 $ cat trace.txt foo On peut rediriger le script ou le terminal de façon permanente : $ exec 4> trace.txt $ echo "bar" >&4 $ cat trace.txt bar $ exec 4>&- # ferme le fichier Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 34/35

Exemple : lecture en parallèle while read ligne1 <&3 && read ligne2 <&4 do echo "Lu $ligne1 et $ligne2 " done 3< fichier1 4< fichier2 Cette construction permet : de lire à chaque itération une ligne dans chaque fichier ; de s arrêter dès que la fin de l un des deux fichiers est atteinte. Voir chapitre 20 de l ABSG. Edouard.Thiel@univ-amu.fr Programmation Unix 1 cours n 5 CC BY-NC 35/35