Première partie. Qu est-ce qu un script?

Documents pareils
Outils pour la pratique

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

TP1 - Prise en main de l environnement Unix.

TP 1 Prise en main de l environnement Unix

Premiers pas en Linux

Année Cours Unix-Shell. par. Karam ALLALI. Ecole Spéciale d Informatique

Introduction au Système d Exploitation Unix/Linux

«Astrophysique et instrumentations associées» Cours UNIX Benoît Semelin


Environnements informatiques

La Comptabilité UNIX System V Acctcom

TP 4 de familiarisation avec Unix

Introduction aux Systèmes et aux Réseaux

Programmation C. Apprendre à développer des programmes simples dans le langage C

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

C.M. 1 & 2 : Prise en main de Linux

Contents. 1 Premiers pas en Linux. 1.2 Généralités. 1.1 Bref historique Linux

Linux et le Shell. Francois BAYART. Atelier du samedi 20 Novembre

Shell Bash Niveau débutant

TD séances n 3 et n 4 Répertoires et Fichiers sous Unix

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

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

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

TP1 : Initiation à l algorithmique (1 séance)

1 Démarrage de Marionnet

Licence Sciences et Technologies Examen janvier 2010

Les Boitiers de Vote Electroniques (Clickers)

Client windows Nagios Event Log

Algorithmique et Programmation, IMA

TP 1. Prise en main du langage Python

STAGE IREM 0- Premiers pas en Python

Table des matières Hakim Benameurlaine 1

Atelier individuel. Linux 101. Frédérick Lefebvre & Maxime Boissonneault frederick.lefebvre@calculquebec.ca U. Laval - Janv. 2014

Le système GNU/Linux IUP NTIC /11/05

Cours 1 : Qu est-ce que la programmation?

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

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

L informatique en BCPST

Configurer une sauvegarde FTP simple et efficace

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)

TP1. Outils Java Eléments de correction

Bon ben voilà c est fait!


1. Structure d'un programme FORTRAN 95

Cours Programmation Système

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

Algorithmique et programmation : les bases (VBA) Corrigé

sshgate Patrick Guiran Chef de projet support

Programmation système I Les entrées/sorties

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

Informatique I. Sciences et Technologies du Vivant (Semestre 1)

Introduction à MATLAB R

Introduction à l Administration Systèmes et Réseaux

Classe et groupe : 1P 3 SEN TRI. Ubuntu : serveur Contrôleur de Domaine (PDC) avec SAMBA

La mémoire. Un ordinateur. L'octet. Le bit

I. Présentation du serveur Samba

Introduction aux Systèmes et aux Réseaux

Atelier La notion de session utilisateur sous Linux

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

PROXY SQUID-SQARD. procédure

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

Projet Administration Réseaux

Sauvegarde sous MAC avec serveur Samba

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

Guide d'installation de la base de données ORACLE 10g ( ) pour linux FEDORA CORE 4.

Cours Unix 1. Présentation d UNIX. Plan du cours 1

TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

IFT Systèmes d exploitation - TP n 1-20%

Programmation système en C/C++

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

Python Les fondamentaux du langage

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

Année Universitaire ième année IMAC Mardi 6 janvier Cloud computing Travaux Pratiques

ASR4 Réseaux Département Informatique, IUT Bordeaux 1. DHCP Prénom : Nom : Groupe :

Séance n o 5 : Alternatives, gestion des utilisateurs et des processus

Exercice sur les Dockers

INFO-F-404 : Techniques avancées de systèmes d exploitation

PPe jaune. Domingues Almeida Nicolas Collin Leo Ferdioui Lamia Sannier Vincent [PPE PROJET FTP]

Installation d ORACLE 10g sous Debian Etch

Initiation à la programmation en Python

Polycopié Cours Système d Exploitation I. Programme : Filière SMI S3

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Installation de Zabbix

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Compilation (INF 564)

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Introduction à l informatique en BCPST

Tuto 2 : Configuration Virtual box, Configuration et installation du serveur XiBO

04/02/2014 Tutoriel. Lubuntu & glpi. thomas [NOM DE LA SOCIETE]

Dans l'article précédent, vous avez appris

Service Déposant: Procédure d installation. Page 1. Service déposant. Procédure d installation Version 2.3

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

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

Installer un domaine DNS

Couche application. La couche application est la plus élevée du modèle de référence.

Séance 0 : Linux + Octave : le compromis idéal

Formation Technicien Supérieur de Support en Informatique T2SI. Le module LINUX. Session J04 Version 01

TP Bases de données réparties

ftp & sftp : transférer des fichiers

Transcription:

Unix : shell scripts ASR1 - Systèmes d exploitation Première partie Semestre 1, année 2012-2013 Département d informatique HCM IUT Bordeaux 1 Qu est-ce qu un script? 1 Dialogue en ligne de commande 2 Interprète de commande 3 Exécution d un script 4 5 Intérêt des scripts 6 s 7 Programmer des scripts Janvier 2013 1 / 148 2 / 148 3 / 148 Dialogue en ligne de commande Interprète de commande Script Pour dialoguer avec la machine, vous utilisez une interface graphique (Gnome, Kde, etc.) un terminal (console) où vous tapez des lignes de commandes L interprète de commandes (ou interpréteur), est un programme qui 1 lit une ligne de commande 2 l analyse 3 exécute l action indiquée 4 et recommence. Vous utilisez l interprète /bin/bash Les commandes peuvent provenir d un utilisateur (fonctionnement interactif) d un fichier texte, appelé script. 4 / 148 5 / 148 6 / 148 de script Exécution d un script Dans sa forme la plus simple, un script est une suite de commandes exemple de s c r i p t 2 3 echo Nous sommes l e 4 date 5 6 echo À Bordeaux i l e s t 7 TZ=Europe / P a r i s date qui sont exécutées séquentiellement. Un script est dans un fichier # b o n j o u r. sh echo Xin chào echo Bonjour echo H e l l o qui peut être lancé en tapant son chemin d accès si on l a d abord rendu exécutable par chmod +x bonjour.sh./bonjour.sh À partir de l exemple 2 3 echo À Bordeaux i l e s t 4 TZ=Europe / P a r i s date écrivez un script qui affiche l heure de plusieurs grandes villes. 7 / 148 8 / 148 9 / 148 Intérêt des scripts s Programmer des scripts Intérêt Définir des séquences d opérations complexes. les faire exécuter facilement et automatiquement tâches répétitives tâches programmées Installation d un logiciel tester la présence de composants indispensables créer des répertoires y désarchiver le logiciel et ses nnées Séquence de démarrage d un système d exploitation assurer le démarrage des différents services Procédures d administration enregistrement des utilisateurs lancement de travaux à heures fixées (sauvegardes) Un script ne contient pas seulement une séquence de commandes, il y a aussi la possibilité d indiquer des paramètres d utiliser des variables de faire des répétitions (boucles) de prendre des décisions de découper le scripts en fonctions Le langage de commandes est nc un véritable langage de programmation 10 / 148 11 / 148 12 / 148

En résumé Les shell-scripts sont des programmes qui lancent des commandes Unix. Ils permettent d automatiser des tâches répétitives et/ou complexes Pour écrire des scripts il faut connaître les principales commandes Unix, les mécanismes de redirection, etc. apprendre à écrire des boucles, des décisions etc. dans le langage de l interprète Le langage de commande est un véritable langage de programmation Deuxième partie Paramètres 8 8 Paramètres d un script 9 Essais 10 Application 13 / 148 14 / 148 15 / 148 Paramètres Paramètres $1 $2 Essais de script avec un paramètre # c l o c k. sh # affiche l heure dans une capitale d Europe # paramètre : nom de l a v i l l e echo À $1 i l e s t : TZ=Europe /$1 date Usage du script : $./clock.sh Paris Déroulement : le premier paramètre effectif Paris est affecté à $1 pour l exécution du script. le premier paramètre de la ligne de commande est affecté à $1 le second à $2 la liste des paramètres va dans à $* le nombre de paramètres dans $# Question : et $0? Essayez le script suivant # # params. sh # echo paramètre 1 = $1 echo paramètre 2 = $2 echo l i s t e = $ echo nombre = $# $./params.sh un $./params.sh un deux trois $./params.sh "un deux" "trois quatre" 16 / 148 17 / 148 18 / 148 Application Écrivez un script qui reçoit comme paramètres 1 le nom d un répertoire 2 un numero de version construit une archive (commande tar) de ce répertoire dans /archives d utilisation Troisième partie Quelques commandes utiles 11 Quelques commandes que vous connaissez déjà 12 Les redirections 13 Pipe 14 Pipeline 15 Encore des commandes grep cut sort join s a u v e r. sh p r o j e t v3 lancera la commande tar czf / archives / projet v3. tgz projet 19 / 148 20 / 148 21 / 148 Vous connaissez déjà Les redirections Redirections de la sortie standard éditeur de textes (geany, ) compilateur (g++) cp, rm, mv, ls cat, less, more mkdir, rmdir, cd, pwd echo, clear man Les commandes produisent du texte sur leur sortie standard s de commandes echo "Bonjour" ls date "+%H:%M" Ce texte peut être redirigé vers un fichier s : redirections sortie standard echo "bonjour" > message.txt date "+%H:%M" >> message.txt Remplacement d un fichier : > echo "bonjour" > message.txt Extension d un fichier : >> date >> fichier 22 / 148 23 / 148 24 / 148

Sortie d erreur Autres usages de la sortie d erreur Redirection de l entrée standard Certains messages sont produits sur la sortie d erreur Mise en évidence $ g++ essai.cc > resultat.log essai.cc:1: error: ISO C++ forbids declaration of exemple with no type $ Redirection de la sortie d erreurs 2 > 2 >> $ g++ mon-programme.cc 2> erreurs.txt $ $ dialog --inputbox "Votre nom?" 8 40 2> /tmp/nom Depuis un fichier : < tr [a-z] [A-Z] < texte.txt here cument : << $ tr [a-z] [A-Z] <<XXX ceci Est un exemple XXX 25 / 148 26 / 148 27 / 148 Redirection entre deux commandes Pipeline de plusieurs commandes Quelques commandes L opérateur (pipe) redirige la sortie standard d une commande vers l entrée standard d une autre commande w cat -n On peut constituer un pipeline de plusieurs commandes : redimensionner une image anytopnm dscn3214.jpg pnmscale -width 100 pnmtopng > statue-hcm-100px.png grep : sélection de lignes cut : sélections de colonnes sort : tri join : jointure Ces commandes permettent de manipuler des nnées représentées sous forme de textes. On s en servira surtout pour des nnées en tableau P a r i s : France : Europa :GMT+1 Lonn : France : Europa :GMT Ho Chi Minh City : Vietnam : Asia :GMT+7 28 / 148 29 / 148 30 / 148 La commande grep : sélection de lignes grep : essayez grep : ancrage Sélectionne les lignes qui contiennent un motif (pattern) Le fichier villes.txt contient : 1 france : p a r i s 2 vietnam : ho c h i minh 3 i t a l i e : roma 4 france : bordeaux 5 vietnam : hanoi 6 inde : d e l h i la commande grep italie villes.txt affiche les lignes du fichier qui contiennent italie villes.txt 1 france : p a r i s 2 vietnam : ho c h i minh 3 i t a l i e : roma 4 france : bordeaux 5 vietnam : hanoi 6 inde : d e l h i Essayer grep i villes.txt grep :h villes.txt Les caractères ^ et $ servent à ancrer le motif de recherche au début ˆ ou à la fin $ d une ligne. Essayer grep ^i villes.txt grep i$ villes.txt 31 / 148 32 / 148 33 / 148 La commande cut la commande sort s sort La commande cut sélectionne une colonne de nnées. Essayer cut -c 1-3 villes.txt cut -d: -f1 villes.txt grep vietnam villes.txt cut -d: -f2 Ornne les lignes sort villes.txt tri par ligne tri selon la seconde colonne (délimitée par des deux-points). sort -t: -k2 villes.txt Créer un fichier villes-pays.txt (villes ornnées par pays) Créer un fichier continents-pays.txt (continents ornnées par pays) à partir de continents.txt 1 europe : f r a n c e 2 europe : i t a l i e 3 a s i e : vietnam 4 a s i e : chine 34 / 148 35 / 148 36 / 148

Commande join Rapproche deux fichiers sur une clé commune. Les fichiers ivent être triés join -t: -1 2-2 1 continents-pays.txt villes-pays.txt Quatrième partie Droits d accès 16 Les droits d accès (bases) 17 chmod : changer les droits d accès -t: : délimiteur de champs -1 2 : clé du premier fichier = second champ -2 1 : clé du second fichier = premier champ 37 / 148 38 / 148 39 / 148 Droits d accès Droits d accès : suite Les droits d accès La commande ls -l montre les droits d accès billaud@feathers:~/essais/c++$ ls -l total 64 drwxr-xr-x 2 billaud profs 4096 ao^u 29 12:22 Heap -rwxr-xr-x 1 billaud profs 6495 nov 2 21:19 inittab -rw-r--r-- 1 billaud profs 236 nov 2 21:19 inittab.cc Premier caractère d pour les répertoires (directory) - pour les fichiers drwxr-xr-x 2 billaud profs 4096 ao^u 29 12:22 Heap -rwxr-xr-x 1 billaud profs 6495 nov 2 21:19 inittab -rw-r--r-- 1 billaud profs 236 nov 2 21:19 inittab.cc Lettres suivantes : indiquent les droits d accès Présentation par groupe de trois : - rwx r-x r-x rwx pour le propriétaire du fichier (billaud) r-x les utilisateurs du groupe profs r-x pour les autres Les lettres indiquent les droits d accès (ou mode, ou permissions) r pour read (droit de lecture) w pour write (droit d écriture, modification) x pour execute (droit d exécution) pour les fichiers, x=cross (droit de traverser) pour les répertoires. 40 / 148 41 / 148 42 / 148 s : s : s : drwxr-xr-x 2 billaud profs 4096 ao^u 29 12:22 Heap -rwxr-xr-x 1 billaud profs 6495 nov 2 21:19 inittab -rw-r--r-- 1 billaud profs 236 nov 2 21:19 inittab.cc inittab.cc peut être lu et modifié par son propriétaire (rwx), lu par les membres du groupe (r) et par les autres (r). inittab? drwxr-xr-x 2 billaud profs 4096 ao^u 29 12:22 Heap -rwxr-xr-x 1 billaud profs 6495 nov 2 21:19 inittab -rw-r--r-- 1 billaud profs 236 nov 2 21:19 inittab.cc inittab.cc peut être lu et modifié par son propriétaire (rwx), lu par les membres du groupe (r) et par les autres (r). inittab peut être lu, modifié et exécuté par son propriétaire (rw-), lu et exécuté par les utilisateurs du groupe (rx) ainsi que par les autres (rx). drwxr-xr-x 2 billaud profs 4096 ao^u 29 12:22 Heap -rwxr-xr-x 1 billaud profs 6495 nov 2 21:19 inittab -rw-r--r-- 1 billaud profs 236 nov 2 21:19 inittab.cc le répertoire Heap peut être lu, modifié et traversé par le propriétaire (rwx), lu et traversé par les membres du groupe (rx) et les autres. 43 / 148 44 / 148 45 / 148 chmod : changer les droits d accès s s La commande chmod change les droits d accès (CHange MODe) Notation octale : chmod 750 mon-fichier chaque groupe de trois bits est codé en octal, avec r=4, w=2, x=1. Donc chmod 750 nne les droits rwx r-x --- au fichier : notation octale Complétez la table d équivalence octal droits octal droits 0 - - - 4 1 5 r - x 2 6 3 7 r w x : droits sur les fichiers 1 Tapez ls -l > mon-fichier chmod 777 mon-fichier pouvez-vous lire le fichier (cat mon-fichier)? le modifier (echo >> mon-fichier)? 2 même question après chmod 666 mon-fichier 3 droits lire? modifier? 000 non non 111 222 333 444 555 666 777 oui oui 46 / 148 47 / 148 48 / 148

s chmod : notation symbolique chmod : modification des droits : droits 1 Tapez ls -l > mon-fichier chmod 777 mon-fichier pouvez-vous lire le fichier? le modifier? 2 Changez les droits chmod 077 mon-fichier pouvez-vous le lire? le modifier? 3 Conclusions? chmod u=rwx,g=rx,o= mon-fichier u user (propriétaire) g groupe o others (autres) Sous forme symbolique, permet de modifier certains droits. + ajouter des droits - enlever chmod go-w f enlève le droit w au groupe (g) et aux autres (o), sans changer les autres permissions. chmod +x f ajoute les droits x 49 / 148 50 / 148 51 / 148 Variables Cinquième partie Variables, paramètres, expressions 18 Variables 19 Environnement, export 20 Paramètres positionnels 21 Affectations 22 Lecture de variables Essais read, exercice read, IFS Les variables du shell contiennent des chaînes de caractères. la liste des variables est affichée par set Variables définies automatiquement : HOME PWD SHELL USERNAME PATH LANG etc. 52 / 148 53 / 148 54 / 148 Affectation / Expansion Variables : exemple Environnement, export affectation de variable : NOM=[CHAINE] expansion par $NOM ou ${NOM} 1 message= Bienvenue parmi nous 2 echo $message! / b i n / bash 2 3 echo Bonjour $USER 4 echo n aujourd hui 5 date 6 7 france= Europe / Paris 8 vietnam= A s i a /Ho Chi Minh 9 10 echo n heure Vietnam = 11 TZ=$vietnam date 12 13 echo n heure France = 14 TZ=$ f r a n c e date 15 e x i t 0 un processus s exécute dans un environnement (valeurs de variables) commande printenv les variables système sont transmises (exportées) automatiquement lors d un appel de script les autres ivent être exportées explicitement (= ajoutées à l environnement) commande export NOM[=VALEUR] liste des variables exportées : export 55 / 148 56 / 148 57 / 148 Paramètres positionnels Paramètres positionnels (suite) Invocation d un script Un script peut être invoqué avec des paramètres, exemple :./mon-script Hanoi Paris Bordeaux "Ho Chi Minh City" Pendant l exécution $1="Hanoi", $2="Paris", $3="Bordeaux", $4="Ho Chi Minh City" Autres variables utiles $# = 4 le nombre de paramètres $* = Hanoi Paris Bordeaux "Ho Chi Minh City" $0 = "./mon-script" le nom du script Ecrire un script à un paramètre qui indique les villes d un pays. $ villes.sh france paris bordeaux $ Utiliser le fichier de nnées précédent. 58 / 148 59 / 148 60 / 148

Affectation Affectation (suite) Affectations (suite) Met une valeur dans une variable. Noms de variable lettres, des chiffres, blancs soulignés ne commence pas par un chiffre MAJUSCULES/minuscules différenciées Deux formes NOM=CHAINE affectation simple let NOM=EXPRESSION affectation du résultat d un calcul arithmétique let est une commande interne du bash (help let) Essayez 1 a=12 2 b=42 3 4 c=a+b 5 echo $c 6 7 d=$a+$b 8 echo $d 9 10 l e t e=a+b 11 echo $e 61 / 148 62 / 148 63 / 148 Lecture de variables Essais avec read read La commande read v1 v2 lit une ligne au terminal, et affecte les mots dans les variables citées. read nom prenom Essayez read nom prenom que se passe-t-il si on tape plus de mots qu il n y a de variables? Écrire un script qui demande l année de naissance, imprime l âge. d exécution $./quel_age.sh Votre année de naissance? 1990 Vous ^etes né en 1990, vous avez nc 24 ans. 64 / 148 65 / 148 66 / 148 Séparateur La variable IFS indique le séparateur reconnu par read (input field separator) $ export IFS=, $ read NOM PRENOM einstein,albert $ echo $PRENOM albert Alternative à export Affectation temporaire : IFS=, read NOM PRENOM Sixième partie Expansions 23 Expansions s 24 Une petite application 25 Affectation du résultat d une commande 26 Chaînes et expansion 27 Substitution 28 Complément : Commandes dirname et basename valide pendant la durée d exécution du read 67 / 148 68 / 148 69 / 148 Expansion Expansion (suite) s Définition Expansion : remplacement d une expression par sa valeur s expansion de variables : echo bonjour $USER expansion numérique : echo périmetre = $((2*(longueur+hauteur))) expansion du résultat d une commande : echo il y a $(who wc -l) connexions Autre notation Historiquement, sh utilisait des anti-quotes pour $() : echo il y a who wc -l connexions Moins lisible, risque de confusion avec les apostrophes echo il y a who wc -l connexions 1. simple Dans le script qui calcule l âge, remplacez la constante 2013 par un appel à date +%Y 70 / 148 71 / 148 72 / 148

s 2. Mieux Écrire un script qui affiche le nombre de processus qui vous appartiennent. Exécution : Sur tuba, adupont a 45 processus Indication : comptez les lignes qui commencent par votre nom dans le résultat de ps axu. 73 / 148 s (suite) Écrire un script qui indique les 5 plus gros sous-répertoires d un répertoire nné. Exécution 1 $ plus gros. sh / E s s a i s 2 196 /home/ billaud / Essais /LATEX 3 152 /home/ billaud / Essais /C++ 4 96 /home/ billaud / Essais /Python 5 36 /home/ billaud / Essais /PHP 6 32 /home/ billaud / Essais /PyUNO Indications script à 1 paramètre du -s repertoire/* tri numérique commande tail -n nombre 74 / 148 Application : carnet de téléphone Sous forme de trois commandes tel-ajouter numero nom tel-chercher nom tel-afficher qui agissent sur un fichier de nnées telephones.dat Format : un numéro et un nom par ligne exemple 01234578 PUF 98765444 Charlie 75 / 148 application (suite), suite Commande et variable 2 # tel afficher 3 # 4 nomfichier= telephones. dat 5 cat $nomfichier 2 # tel ajouter numero nom 3 # 4 nomfichier= telephone. dat 5 echo $ >> $nomfichier 2 # tel chercher nom 3 # 4 nomfichier= telephone. dat 5 grep $1 $nomfichier Améliorez la présentation avec la commande dialog dialog --infobox message hauteur largeur dialog --textbox nomfichier hauteur largeur dialog --inputbox message hauteur largeur Attention : Avec une inputbox, le résultat va sur la sortie d erreur. Ne pas confondre v=date affectation de la chaine date date > f redirection de la sortie vers un fichier v=$(date) affectation de la sortie dans une variable : que fait ceci $cmd > $f? 76 / 148 77 / 148 78 / 148 (suite) Chaînes et expansion Substitution : que fait ceci $cmd > $f? 2 format= %Y %M %d 3 cmd= date +$format 4 f=/tmp/ r e s u l t a t 5 6 $cmd > $ f L expansion se fait dans les chaînes délimitées par pas dans les chaines délimitées par echo la variable $USER "contient $USER" On peut demander une substitution pendant l expansion d une variable. : remplacement d un suffixe source=monprogramme.cc g++ $source -o ${source/.cc/ } Plus simple que : g++ $source $(echo $source sed -e s/.cc//}) 79 / 148 80 / 148 81 / 148 dirname, basename Commandes très utiles, permettent de décomposer un chemin d accès en morceaux $ dirname /home/ john / projet / prog. cc /home/ john / p r o j e t $ basename /home/ john / projet / prog. cc prog. cc $ basename /home/ john / projet / prog. cc. cc prog Écrire un script archiver.sh qui reçoit en paramètre le chemin d accès d un répertoire archiver.sh AP1/projet/projet-v1 crée dans le répertoire d accueil une archive projet-v1.2013-01-23. Le nom de l archive est composé du dernier élement du chemin d accès (projet) de la date (obtenue par date Septième partie Fonctions 82 / 148 83 / 148 84 / 148

Fonctions Fonctions : exemple 29 Les fonctions 30 31 Avantages 32 Variables globales 33 Variables locales Un script peut comporter des fonctions, avec des paramètres positionnels Syntaxe function nom-de-fonction { commande commande } 2 function a r c h i v e r 3 { 4 tar czf / var / svgd /$1. tgz $2 5 } 6 7 archiver photos /home/ billaud / photos 8 archiver musique /home/ billaud /musique 85 / 148 86 / 148 87 / 148 Fonctions : avantages Avantages : découpage logique, code plus facile à lire fonctions réutilisables Fonctions : exemple Par défaut, les variables sont globales 2 d e s t i n a t i o n =/v a r / svgd 3 4 function a r c h i v e r 5 { 6 tar czf $destination /$1. tgz $2 7 } 8 9 archiver photos /home/ billaud / photos 10 archiver musique /home/ billaud /musique Variables locales kes fonctions peuvent avoir des variables locales : 2 d e s t i n a t i o n =/v a r / svgd 3 o p t i o n s=c z f 4 5 function a r c h i v e r 6 { 7 l o c a l nom=$ ( basename $1 ) 8 tar $options $destination /$nom. tgz 10 9 } 11 archiver /home/ billaud / photos 12 archiver /home/ billaud /musique 88 / 148 89 / 148 90 / 148 Let : affectation arithmétique Syntaxe Huitième partie Arithmétique 34 Let : affectation arithmétique 35 s 36 3 37 Expansion arithmétique 38 let VARIABLE=EXPRESSION à essayer! / b i n / bash 2 3 l e t somme=$1+$2 4 echo $somme Comparer let somme=$1+$2 somme=$1+$2 91 / 148 92 / 148 93 / 148 Note 1 2 Dans une affectation arithmétique, l expansion des variables est automatique let c=a+b let c=$a+$b Ecrire un script qui demande l année de naissance affiche l age scenario $ exercice1.sh Vous ^etes né en quelle année? 1992 Vous avez nc 21 ans $ Convertir une heure (nnée sous la forme HHMM) en nombre de minutes scenario $ exercice2.sh 1015 615 $ 94 / 148 95 / 148 96 / 148

Expansion arithmétique Ecrire un script qui calcule la durée d un trajet, à partir des heures de départ et d arrivée sous la forme HHMM Scénario $./duree.sh 630 2215 1545 A la place de let surface=hauteur*largeur echo la surface du rectangle est $surface m2 On peut écrire let surface=hauteur*largeur echo la surface du rectangle est $((largeur*hauteur)) m2 Utiliser la boite de dialogue calendar et la commande date +%Y pour faire un script qui demande une date de naissance affiche l âge Conseil : afficher le résultat par une msgbox $ dialog --msgbox "hello, world" 5 20 97 / 148 98 / 148 99 / 148 Structure de contrôle case Neuvième partie Structure de contrôle : case 39 Présentation 40 41 Motifs d un case Choisit les commandes à exécuter en fonction d un sélecteur semblable au switch de C++ le sélecteur est une chaîne de caractères 100 / 148 101 / 148 102 / 148 sérieux #! / b i n / bash # Usage : a r c h i v e r nom de r é p e r t o i r e echo Format = normal gz? r e a d format c a s e $format i n gz ) o p t i o n=z ; s u f f i x e=t g z ; ; normal ) o p t i o n= ; s u f f i x e=t a r ; ; ) echo format $format non reconnu >&2 e x i t 1 ; ; e s a c p r e f i x e=$ ( basename $1 ) tar c$ { option } f $ p r e f i x e. $ s u f f i x e $1 case 13 ; ; 14 c h e r c h e r ) 2 # usage : 15 grep $2 $nomfichier 3 # t e l a j o u t e r num nom 16 ; ; 4 # t e l c h e r c h e r nom 17 v o i r ) 5 # t e l v o i r 18 cat $nomfichier 6 # 19 ; ; 7 nomfichier= telephone. dat 20 ) 8 21 echo E r r e u r 22 e x i t 1 9 case $1 i n 10 a j o u t e r ) 11 s h i f t 12 echo $ >> $nomfichier 23 ; ; 24 e s a c Motifs d un case Plusieurs motifs pour un même cas case $response of oui o ) echo "d accord" ;; non n ) echo "tant pis" ;; esac 103 / 148 104 / 148 105 / 148 Motifs d un case jokers Utilisation des jokers de bash case $response of [oo][uu][ii] [oo] ) echo "d accord" ;; [nn][oo] ) echo "tant pis" ;; *) echo "quoi?" ;; esac Dixième partie Processus 42 Définitions 43 Table des processus 44 kill 45 Pilotage des processus 46 Une application Un exemple de service Le code principal Les fonctions 106 / 148 107 / 148 108 / 148

Définitions La table des processus Un processus = un programme qui tourne Un programe lancé depuis le shell peut tourner en avant plan (foreground) : il faut attendre sa fin pour lancer une autre commande tourner en arrière-plan (background) être stoppé Pour lancer une commande en avant-plan xclock stopper la commande en avant-plan CTRL-Z relancer la commande stoppée en avant-plan fg relancer la commande stoppée en arrière plan bg lancer une commande en arrière-plan xclock & Note : Si il y a plusieurs commandes en arrière-plan, commandes jobs, fg %n, etc. On peut la voir par la commande ps, ou top, $ ps PID TTY TIME CMD 4056 pts/1 00:00:00 bash 4236 pts/1 00:00:07 xpdf.bin 4243 pts/1 00:00:10 emacs 4471 pts/1 00:00:00 xterm 4613 pts/1 00:00:00 ps ps sans option montre les processus issus du shell options intéressantes : axule voir aussi pstree 109 / 148 110 / 148 111 / 148 La commande kill La commande kill (suite) Pilotage des processus Syntaxe : kill [-signal] num-processus Rôle : envoie un signal à des processus $ xclock & [6] 4734 $ ps PID TTY TIME CMD 4056 pts/1 00:00:00 bash 4236 pts/1 00:00:07 xpdf.bin 4734 pts/1 00:00:00 xclock 4739 pts/1 00:00:00 ps $ kill -TERM 4734 Par défaut, utilise le signal TERM (9) qui termine le programme. le signal STOP arrête un processus le signal CONT le relance kill -l affiche la liste des signaux commande & lance une commande en arrière-plan la variable $! contient son numéro de processus la variable $$ = numero du shell courant mplayer funny-music.mp3 >/dev/null & music=$! # sauvegardes tar czf.. # arr^eter la musique à la fin kill -9 $music 112 / 148 113 / 148 114 / 148 Wait wait nnn attend un processus mplayer funny-music.mp3 >/dev/null & music=$! # sauvegardes en parallèle tar czf archive1.tar.. & svgd1=$! tar czf archive2.tar.. & svgd2=$! wait $svgd1 wait $svgd2 kill -9 $music # arr^ete la musique Un exemple de service Une commande pour faire apparaître / disparaître une pendule sur le bureau Usage./pendule.sh start./pendule.sh stop./pendule.sh usage./pendule.sh restart Le code principal Code 2/2 case "$1" in start) _start ;; stop) _stop ;; restart) _stop _start ;; usage) print_usage ;; *) print_usage exit 1 esac utilise 3 fonctions : _start, _stop et print_usage 115 / 148 116 / 148 117 / 148 Constantes et Fonctions Code 1/2 prog=/usr/bin/xclock pid_file=/tmp/$user.pid function _start { $prog & echo $! > $pid_file } Onzième partie Boucle for 47 Boucle for 48 49 (seq) 50 (find) function _stop { kill -9 $(cat $pid_file)) } function usage { echo "usage: pendule {start stop restart usage}" } 118 / 148 119 / 148 120 / 148

Boucle for Boucle for, exemples simples Boucle for, exercice Forme générale for VAR in LISTE COMMANDE COMMANDE. ne Boucle avec une variable qui parcourt une liste de mots. for f in *.cc astyle --syle=gnu $f ne for f in *.cc echo "le fichier $f contient $(wc -l $f) lignes" ne Ecrire une commande qui calcule la somme de ses paramètres (en nombre illimité) $ somme 100 3 20 123 121 / 148 122 / 148 123 / 148 (seq) (find) Analyser le script r=1 for i in $(seq 1 $1) let r*=i ne Analyser le script for f in $(find ~ -name *.cc -ctime -7) ls -l "$f" ne rôle de find ~ rôle de find ~ -name *.cc rôle de find ~ -name *.cc -ctime -7r pourquoi les guillemets dans ls? Douzième partie Décisions 124 / 148 125 / 148 126 / 148 Code de retour (exit status) code de retour 51 Code de retour (exit status) 52 if-then-else-fi 53 La commande test 54 Enchaînement conditionnel 55 if-then-elif-else, forme générale Le code de retour d un programme indique si il s est bien terminé. Le code de retour de la dernière commande est dans la variable $? Par convention : 0 = OK. $ ls -ld /tmp drwxrwxrwt 10 root root 12288 déc 22 17:32 /tmp $ echo code de retour = $? code de retour = 0 $ ls -l qsdsqd ls: ne peut accéder qsdsqd: Aucun fichier ou répertoire de ce type $ echo code de retour = $? code de retour = 2 127 / 148 128 / 148 129 / 148 Codes de retour et cumentation Les codes de retour des commandes sont décrits dans le manuel : man ls Exit status is 0 if OK, 1 if minor problems, 2 if serious trouble. exit Par défaut, un script returne le code de sa dernière commande Il peut retourner un code spécifique par exit [code]! / b i n / bash 2 echo Something s t r a n g e happened 3 e x i t 42 La structure de contrôle if then else fi utilise le code de retour d une commande 2 # usage : 3 # c o m p i l e r. sh p r e f i x e 4 # 5 i f g++ o $1 $1. cc 6 then 7 echo la compilation s est bien passée 8 e l s e 9 echo i l y a eu un problème 10 f i 130 / 148 131 / 148 132 / 148

Test Le code de retour du programme test dépend d une condition. : test -f nomfichier indique si le fichier existe. Application fichier compiler.sh! / b i n / bash 2 3 i f t e s t f $1. cc 4 then 5 g++ Wall o $1 $1. cc 6 echo C o m p i l a t i o n t e r m i n é e 7 e l s e 8 echo E r r e u r : pas de f i c h i e r $1. cc 9 e x i t 1 10 f i Autre notation : [ condition ] Autres tests : [ -d nom ] # nom désigne un répertoire [ chaine1 = chaine2 ] # comparaison de chaines [ chaine1!= chaine2 ] [ chaine1 \< chaine2 ] [ chaine1 \> chaine2 ] [ nombre1 -eq nombre2 ] # comparaison de nombres [ nombre1 -ne nombre2 ] [ nombre1 -le nombre2 ] # less or equal [ nombre2 -ge nombre2 ] # greater or equal # voir aussi -lt et -gt 133 / 148 134 / 148 135 / 148 Enchaînement conditionnel Ecrire une commande qui affiche le maximum de deux paramètres. Scénario $ max.sh 37 421 421 Syntaxe COMMANDE1 && COMMANDE2 COMMANDE1 COMMANDE2 Exécute la seconde commande seulement si la première a réussi (&&) ou échoué ( ) g++ prog.cc && echo OK Application 2 max=$1 3 [ $2 ge $max ] && max=$2 4 echo $max 136 / 148 137 / 148 138 / 148 if-then-elif-else, forme général Syntaxe if COMMANDES then COMMANDES [ elif COMMANDES then COMMANDES ] [ else COMMANDES ] fi Treizième partie Boucle while 56 Boucle while Syntaxe 57 Boucle while-read 58 break 139 / 148 140 / 148 141 / 148 Boucle while while COMMANDE COMMANDES ne 2 # f a c nombre 3 # c a l c u l e l a f a c t o r i e l l e d un nombre 4 # 5 # exemple : f a c 5 6 i =1 7 f=1 8 while [ $ i l e $1 ] 9 10 l e t f=f i 11 l e t i++ 12 ne 13 echo $ f Boucle while-read Tournure habituelle pour exploiter le contenu d un fichier, ligne par ligne. while read numero nom printf " %12s %-30s \n" $numero $nom ne < $nomfichier 142 / 148 143 / 148 144 / 148

L instruction break permet de sortir d une boucle while true. echo "voulez-vous arr^eter?" read reponse [ $reponse = oui ] && break Quatorzième partie Structures de Contrôle ne 145 / 148 146 / 148 147 / 148 Il y en a d autres select until 148 / 148