Le Shell: programmation et écriture de scripts

Documents pareils
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)

Environnements informatiques

Initiation à la programmation en Python

3IS - Système d'exploitation linux - Programmation système

Cours Informatique Master STEP

Cours d algorithmique pour la classe de 2nde

Arguments d un programme

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

Introduction au langage C

STAGE IREM 0- Premiers pas en Python


Introduction à MATLAB R

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

Corrigé des TD 1 à 5

Le prototype de la fonction main()

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

TP1. Outils Java Eléments de correction

Conventions d écriture et outils de mise au point

Algorithmique et Programmation, IMA

Introduction aux Systèmes et aux Réseaux

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

1. Structure d'un programme FORTRAN 95

Programmation système de commandes en C

Présentation du langage et premières fonctions

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours Programmation Système

L informatique en BCPST

TP 1. Prise en main du langage Python

Java Licence Professionnelle CISII,

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

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

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

TP1 - Prise en main de l environnement Unix.

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

V- Manipulations de nombres en binaire

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Table des matières Hakim Benameurlaine 1

TP 1 Prise en main de l environnement Unix

1 Description générale de VISFIELD

Licence Sciences et Technologies Examen janvier 2010

Outils pour la pratique

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

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

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Organigramme / Algorigramme Dossier élève 1 SI

Programme awk------introduction rapide

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

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

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

Programmer en JAVA. par Tama

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

Représentation d un entier en base b

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

Les commandes relatives aux réseaux

Programmation système en C/C++

Exercice sur les Dockers

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

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

Shell Bash Niveau débutant

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

Python - introduction à la programmation et calcul scientifique

Découverte de Python

Aide - mémoire gnuplot 4.0

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

Initiation à LabView : Les exemples d applications :

Projet Administration Réseaux

Introduction à l algorithmique et à la programmation M1102 CM n 3

Utilisation d objets : String et ArrayList

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

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

CM2 L architecture MIPS32

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

Cours d Algorithmique et de Langage C v 3.0

Client windows Nagios Event Log

Calcul Formel et Numérique, Partie I

2 Comment fonctionne un ordinateur, dans les grandes lignes

Initiation à la Programmation en Logique avec SISCtus Prolog

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

Java Licence Professionnelle CISII,

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours 1 : La compilation

as Architecture des Systèmes d Information

Programmation système I Les entrées/sorties

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

Les Boitiers de Vote Electroniques (Clickers)

TRIGONOMETRIE Algorithme : mesure principale

Qualité du logiciel: Méthodes de test

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

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

Architecture de la plateforme SBC

TP, première séquence d exercices.

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Chapitre 1 Qu est-ce qu une expression régulière?

Python Les fondamentaux du langage

Transcription:

Les scripts mentionnes dans les cadres gris devraient être testés. Les exercices devront être fournis sur un papier 1- Introduction : Un script SHELL ou fichier de commandes est un fichier texte qui contient des commandes du SHELL, qui seront exécutées de manière non interactive. La toute première ligne du fichier it contenir le nom de l interpréteur à utiliser (cela est valable pour tous les langages de script). Cette ligne it commencer par #! (SHEBANG!) suivi de l exécutable à utiliser pour lancer le SHELL. Le Shebang est nc un commentaire spécial. En effet, il est évalué par le Shell appelant, qui va se charger d appeler le bon interpréteur. Tout script it commencer par une ligne commençant par #! suivi du résultat de la commande : $ which langagedescript Exemple : $ which bash /bin/bash Votre script it commancer par : #! /bin/bash Pour exécuter un script Soit on indique de façon explicite l interpréteur : perl script.pl python script.py bash script.sh Soit on laisse le SHELL appeler le bon interpréteur. Dans ce cas, il faut nner les droits en exécution : chmod +x script.pl On pourra nc appeler le script comme n importe quelle autre commande à condition que le répertoire où se trouve le script soit contenu dans le PATH). C est dans ce cas-là que le Shebang est nécessaire!! 2- Les variables : HOME=/home/esprit Nom de variable : HOME

Valeur de la variable : $HOME Le Shell: programmation et écriture de scripts Afficher la valeur de la variable : echo $HOME Créer et affecter une variable : VAR=toto NB : Supprimer une variable : unset VAR Attention : pas d espace autour de l opérateur = Ecrire votre premier script SHELL qui permet de : Afficher votre répertoire personnel, votre nom de connexion, le type de votre machine, votre SHELL votre répertoire courant et votre ancien répertoire Indication : Utiliser les variables d environnements (LOGNAME, HOME, PWD, OLDPWD, SHELL) et la commande uname. Affectation des variables Créer une variable avec l affectation : VAR=toto Attention NB : pas d espace autour de l opérateur = Commande read variables... affecte à chaque variable un mot de la première ligne lue sur l entrée standard. read var1 var2 var3 var4 Fonctionnement : 1 read attend qu une ligne arrive sur l entrée standard (\n). 2 Cette ligne est découpée en mots (séparateurs : espace, tabulation). 3 Le nième mot est affecté à la nième variable. 4 S il y a plus de mots que de variables, la dernière variable contient toute la fin de la ligne. La liste des séparateurs se trouve dans la variable IFS. On peut la modifier. 3- Les arguments d un script : $# est équivalent à argc (-1) en C : c est le nombre d arguments que l on a passé au script lors de l appel. "$*" est équivalent à argv en C : c est la liste des arguments que l on a passé au script. $0 est le nom complet du script (pour avoir le nom court : basename $0) $1 est le premier argument passé au script.... $9 est le neuvième. NB : Impossible d accéder directement aux suivants ($10 n existe pas).

Commande interne shift On perd le premier. Le second devient le premier et se trouve nc dans $1... Le dixième devient le neuvième et se trouve nc dans $9 Set et IFS La commande set chaine de caractères permet d affecter la liste d arguments ($1,..., $9, "$*", $#). Elle se sert aussi des séparateurs, et nc de la variable d environnement IFS. Ex : set salut tout le monde, modifiera $1, $2, $3, $4 et $# vaudra 4 Ecrivez le script s1.sh qui affiche le nombre et la valeur des arguments la ligne de commande. Ecrivez le script s2.sh qui affiche le nom du script, le 1er et le 10eme argument Code de retour : - Sur votre prompt, taper une commande correcte - Afficher la valeur de la variable? (echo $?) - Taper une commande erronée - Quelle est la valeur de? La commande exit : Tout script it indiquer au système s il s est d déroulé avec succès ou s est terminé sur un échec. Pour cela, on se sert de la commande exit entier qui termine l exécution du script. exit 0 indique un succès, exit n (avec n 6= 0) indique un échec. Tous vos scripts ivent se terminer par un exit. 4- Les expressions conditionnelles et les structures de contrôle : 4.1 La commande test La commande test est une commande qui ne fait rien d autre que réussir ou échouer. Elle sert très souvent d argument à la commande if. Elle possède un grand nombre d options. Elle peut aussi s écrire [... ] Ex : test -f /home/test ou [ -f /home/test ] permet de savoir si le fichier /home/test est un fichier ordinaire. test $1 \> a permet de savoir si le premier argument est supérieur (lexicographique) à a. test $1 = help permet de savoir si le premier argument est help. test $# -gt 3 permet de savoir si le nombre d arguments est supérieur ou égal (numériquement) à 3. L'évaluation d'expressions concernant le type ou les droits d'accès des fichiers sont prévues avec l'utilisation d'options. Les tableaux 1 et 2 vous nnent quelques options.

Options Le Shell: programmation et écriture de scripts Vraie si -a fichier ou -e fichier le fichier existe -b fichier le fichier existe et est de type bloc -c fichier le fichier existe et est de type caractère -d fichier le fichier existe et c'est un répertoire -f fichier le fichier existe et c'est un fichier régulier -p fichier le fichier existe et c'est un tube nomme -s fichier le fichier existe et a une taille non nulle -L fichier le fichier existe et c'est un lien symbolique fichierl -nt fichiers fichierl est plus récent que fichier2 fichierl -ot fichiers fichierl est moins récent que fichier2 fichierl -ef fichiers les 2 fichiers ont le même numéro d'inode (lien simple) Tab. 1 - Tests sur le type de fichier Options Vraie si -r fichier le fichier est lisible -w fichier le fichier est modifiable -x fichier le fichier est exécutable -g fichier le fichier possède le bit set-gid -k fichier le fichier possède le bit sticky -u fichier le fichier possède le bit set-uid -O fichier le fichier a le propriétaire du processus comme propriétaire -G fichier le fichier a le groupe du processus comme groupe TAB. 2 - Tests sur les droits de fichier 4.2 La construction if D'autres options Vraie si permettent de manipuler des chaines de caractères pour -n chaine des comparaisons la chaine est de longueur non nulle -z chaine la chaine est de longueur nulle chainel -eq chaines les 2 valeurs sont égales chainel -ne chaines les 2 valeurs sont différentes chainel -gt chaines la valeur chainel est la plus grande chainel -ge chaines la valeur chainel est plus grande ou égale chainel -It chaines la valeur chainel est plus petite chainel -le chaines la valeur chainel est plus petite ou égale chainel = chaines les 2 chaines sont égales chainel!= chaines les 2 chaines sont différentes chainel > chaines chainel est la plus grande chainel < chaines chainel est la plus petite TAB. 3 - Tests sur les chaines de caractères Vous trouverez ci-dessous un exemple pour chacune des structures de contrôle utilisables dans le bash.

if [ -e UNIX5.tex -a -r UNIX5.tex ] then echo -e "Le fichier existe\n" echo -e "Et il est lisible\n" else echo -e "Le fichier n'existe pas\n" fi Ecrivez le script s3.sh qui réussit s il a au moins un argument et si la valeur du premier argument est comprise entre b et d. Ecrivez le script s4.sh qui appelle s3.sh avec son premier argument et qui affiche (echo) si s3.sh a réussi. 4.3 La construction case case 'echo $SHELL' in '/bin/bash') echo -e "Votre shell est le bash\n";; '/bin/tcsh') echo -e "Votre shell est le tcsh\n";; '/bin/csh') echo -e "Votre shell est le csh\n";; *) echo -e "Je ne connais pas votre shell\n";; Esac 4.4 La construction for set a b c for i in $* echo $i 4.5 La construction select La commande select est particulièrement bien adaptée pour réaliser des menus interactifs. En voici un exemple : PS3="Votre Choix: " select COM in fin Is 'cat /etc/profile' if [ "$C0M" = fin ] then echo "Vous avez choisi $REPLY" exit 0 else echo -e "Vous avez choisi $REPLY\n" $C0M fi

4.6 La construction while 1=0 while [ $1 -It 10 ] echo $1 let I=$I\+1 4.7 La construction until 1=0 until [ $1 -gt 256 ] echo $1 let I=$I\+2 le mot clef break II permet de forcer la sortie d'une boucle for, while ou until. Le mot clef break peut prendre un argument strictement supérieur a 1 afin de spécifier le nombre de boucles imbriquées nt il faut sortir. Si la valeur spécifiée est supérieure au nombre de boucles imbriquées, on sort de toutes les boucles imbriquées. le mot clef continue II permet de passer à la prochaine itération d'une boucle for, while ou until. Le mot clef continue peut aussi prendre un argument strictement supérieur à 1 afin de spécifier le nombre d'itérations à "sauter". Si la valeur spécifiée est supérieure au nombre d'itérations possibles, la dernière itération est toutefois exécutée. Le mot clef exit II permet de stopper le programme en précisant en argument le code retour. Par convention, ce code retour est un entier nul en cas de sortie normale du programme et non nul en cas de fin de programme avec erreur. 5- Calcul numérique : La commande interne let permet d'effectuer des calculs arithmétiques dans le shell. Cependant l'interpréteur de commande bash ne permet pas d'effectuer des calculs en virgule flottante. Pour ces opérations, nous sommes obligés de faire appel à une commande externe, la commande bc. Cette commande prend des nnées à calculer sur son entrée standard et affiche le résultat sur sa sortie standard. L'option "-l" permet de charger la bibliothèque mathématique.

I=23 let J=$I\+100 echo $J RES =`echo 3/41 bc l` Le Shell: programmation et écriture de scripts echo $EES 6- Gestion évolué de la ligne de commande : La syntaxe générale " commande [-options] arguments" est utilisée pour les commandes Unix. Nous avons étudié dans un précédent T.P. comment obtenir les arguments de la ligne de commande ($0, $1,...). II existe une commande qui permet une gestion plus évoluée des arguments de la ligne de commande : getopts. Prenons l exemple suivant: while getopts ":ab:c" opt case $opt in esac shift $(($0PTIND-1)) a) echo "Traitement de l'option -a";; b) echo "Traitement de l'option -b" echo "L'argument est $0PTARG";; c) echo "Traitement de l'option -c"?) echo "Usage: commande [-a] [-b arg] [ c] arguments" exit 1;; echo "$1 est le premier argument après les options..." L'appel à getopts dans la boucle while prépare la boucleà accepter les options -a, -b et -c et spécifie que l'option -b it traiter un argument ( :). Le : qui se trouve au début permet de traiter la saisie d'options invalides et place? dans la variable $opt. Si une option prend un argument, la valeur de celui-ci sera contenue dans $OPTARG Pour chaque option spécifiée sur la ligne de commande, une variable nominée $OPTIND est incrémentée. Par exemple, si vous spécifiez 2 options (-ab), la variable vaudra 2. Cela explique le décalage des arguments qui est effectué par la commande shift afin de retrouver les "vrais" arguments de la commande avec les variables $1, $2, etc... Réalisez un script appelé " Convertisseur" qui vous permet de convertir en Euros une somme en Francs passée en argument. Le taux de conversion sera contenu dans un fichier nomme Taux sous la forme : Taux : 6.55957. Pensez à tester si ce fichier est existant et lisible par votre processus. Si ce n'est pas le cas, votre script it afficher une erreur et quitter en indiquant un code retour 1. Seconde partie Modifiez votre script afin de pouvoir traiter l'option -e qui permet d'inverser la conversion (Euros vers Francs). En cas d'erreur de syntaxe, le script affiche l'usage du programme et quitte avec un code retour égal a 2.