CH.6 LE LANGAGE SHELL

Documents pareils
Environnements informatiques


Introduction aux Systèmes et aux Réseaux

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TP1 - Prise en main de l environnement Unix.

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)

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

Outils pour la pratique

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

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

Algorithmique et Programmation, IMA

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

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

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

Recherche dans un tableau

Introduction au Système d Exploitation Unix/Linux

ACTIVITÉ DE PROGRAMMATION

Utilisation d objets : String et ArrayList

Premiers pas en Linux

Initiation à la programmation en Python


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

Client windows Nagios Event Log

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

1. Structure d'un programme FORTRAN 95

Cours Programmation Système

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

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

Cours Informatique Master STEP

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

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

Corrigé des TD 1 à 5

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

Le prototype de la fonction main()

Java Licence Professionnelle CISII,

Programmer en JAVA. par Tama

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Sauvegarde sous MAC avec serveur Samba

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

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

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

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

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

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

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

Java Licence Professionnelle CISII,

TP1. Outils Java Eléments de correction

OCL - Object Constraint Language

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

Algorithmique et programmation : les bases (VBA) Corrigé

TP 1 Prise en main de l environnement Unix

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

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

Organigramme / Algorigramme Dossier élève 1 SI

Programmation système en C/C++

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

sshgate Patrick Guiran Chef de projet support

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Shell Bash Niveau débutant

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

Introduction à l Administration Systèmes et Réseaux

Cours 14 Les fichiers

TP 1. Prise en main du langage Python

La Comptabilité UNIX System V Acctcom

Les clients GNU/Linux

Les Boitiers de Vote Electroniques (Clickers)

D r o i t s D r o i t s Q u i z z : i n t e r n e t t e x t e

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

Table des matières Hakim Benameurlaine 1

Arguments d un programme

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

NON URGENTE TEMPORAIRE DEFINITIVE OBJET : RÉCUPÉRATION DES DONNÉES CLIENT SUR DISQUE DUR DÉFECTUEUX OU INVALIDÉ

INF 321 : mémento de la syntaxe de Java

Projet Administration Réseaux

Introduction à MATLAB R

Introduction au langage C

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

Cours d algorithmique pour la classe de 2nde

STAGE IREM 0- Premiers pas en Python

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Chapitre 10. Les interfaces Comparable et Comparator 1

EES : Engineering Equation Solver Fiche récapitulative - Marie-Sophie Cabot

Notions fondamentales du langage C# Version 1.0

TP Service HTTP Serveur Apache Linux Debian

Exercice sur les Dockers

Python Les fondamentaux du langage

Cours 420-KEG-LG, Gestion de réseaux et support technique. Atelier No5-1

I. Introduction aux fonctions : les fonctions standards

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

Sendmail milter/greylisting

Principe, applications et limites

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

Travaux Pratiques sur GRID 5000

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

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

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

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

Transcription:

CH.6 LE LANGAGE SHELL 6.1 Les langages de commandes 6.2 Les caractères spéciaux 6.3 Les variables du Shell 6.4 Les fichiers de commandes 6.5 Les variables maintenues par le shell 6.6 Les opérations 6.7 Les tests 6.8 Les itérations 6.9 D'autres commandes utiles Info S4 ch6 1 6.1 Les langages de commandes Les langages de commandes réalisent l'interface entre le système et l'utilisateur. Ce sont tous des langages interprétés permettant de transmettre des commandes avec une (plus ou moins) grande souplesse : - usage de métacaractères (*) ; - contrôle de l'environnement ; - présence de nombreuses commandes prédéfinies ; - possibilité d'écrire des commandes complexes ; - possibilité d'écrire des fichiers de commandes (script-shell). La plupart des problèmes courants de gestion du travail peuvent être résolus par des commandes Shell. Info S4 ch6 2 1

Les divers langages existants sont très semblables : sh, csh, ksh ou bash (utilisé ici). Le même mot désigne l'interpréteur de commandes (shell) et le langage dans lequel les commandes sont écrites (Shell). Info S4 ch6 3 6.2 Les caractères spéciaux Caractères d'abréviation : *? (Le point en début de chaîne n'est pas reconnu par * ou?) : $ ls *.c $ ls toto.? Caractères liés au lancement d'une commande : ; ( ) > >> 2> 2>> < & # \ ' ' " " Déspécialisation des métacaractères : En les faisant précéder de la contre-oblique : \ ou en les incluant dans des délimiteurs : ' ' ou " " : $ echo "bonjour > toto" bonjour > toto Info S4 ch6 4 2

6.3 Les variables du Shell On peut affecter des variables. Si a est une variable, $a représente sa valeur et echo permet d'en prendre connaissance : $ x=gh $ echo $x gh $ echo $xijk $ echo ${x}ijk ghijk Les caractères spéciaux ' et " permettent une délimitation des chaînes de caractères. Dans le premier cas $nom n'est pas évalué, mais il l'est dans le second : Info S4 ch6 5 $ a=truc $ x='machin$a' $ y="machin$a" $ echo $x machin$a $ echo $y machintruc Les accents graves permettent d'affecter à une variable le résultat qui serait produit par la commande placée entre accents : $ a= whoami $ echo $a desar Enfin la commande read permet de lire des valeurs entrées directement : Info S4 ch6 6 3

$ read prenom nom adresse Jacques Desarmenien bureau 4B089 $ echo $prenom Jacques $ echo $nom Desarmenien $ echo $adresse bureau 4B087 Un certain nombre de variables sont prédéfinies, suivant le contenu de fichiers du genre.bashrc ou.profile : $ echo $HOME /users/ens/desar $ echo $PATH /bin:/usr/bin:/usr/local/bin:/users/ens/desar/bin: $ echo $PS1 $ $ PS1='& ' & Info S4 ch6 7 La liste des variables et de leurs valeurs peut être obtenue par la commande set. Une variable peut être effacée de l'environnement par la commande unset : $ a=bonjour $ set HOME=/users/ens/desar IFS= LOGNAME=desar PATH=/bin:/usr/bin:/usr/local/bin:/users/ens/desar/bin: PS1=$ PS2=> TERM=xterm a=bonjour $ echo $a bonjour $ unset a $ echo $a $ Info S4 ch6 8 4

Les variables sont locales à un processus (par exemple le shell courant). Lorsque ce processus (père) en crée un nouveau (fils), seule une partie des variables est transmise au nouveau processus. Ce sont les variables exportables. La commande env permet de connaître les variables exportables. Pour exporter une variable, il faut le spécifier avec la commande export. Enfin, les variables créées par le fils ne sont pas transmises au père. Exemples : Info S4 ch6 9 $ env HOME=/users/ens/desar LOGNAME=desar PATH=/bin:/usr/bin:/usr/local/bin:/users/ens/desar/bin: TERM=xterm $ PS1='& ' & bash (Nouveau shell) $ a=salut $ echo $a salut $ <ctrl-d> & echo $a (Retour à l'ancien shell) (a n'existe pas) & a=bonjour & export a & env a=bonjour (a est exportable) HOME=/users/ens/desar LOGNAME=desar PATH=/bin:/usr/bin:/usr/local/bin:/users/ens/desar/bin: TERM=xterm & Info S4 ch6 10 5

6.4 Les fichiers de commandes On peut fabriquer un fichier de commandes (ou script-shell). On rassemble des commandes dans un fichier qu'on peut exécuter de plusieurs façons. $ cat bonjour echo Bonjour, `whoami`! $ bash bonjour (crée un nouveau shell) Bonjour, desar! $. bonjour (redirige l'entrée du shell) Bonjour, desar! La façon "classique" de procéder est de rendre le fichier exécutable : $ chmod u+x bonjour de la sorte le nom devient une commande "de plein droit" : $ bonjour (comme bash bonjour) Bonjour, desar! Info S4 ch6 11 Les différences entre ces méthodes apparaît quand des variables sont créées ou des "effets de bord" engendrés. Avec les première et dernière méthodes, un nouveau shell est créé. Tous les effets de bord sont donc perdus, alors qu'ils sont conservés avec la deuxième méthode. Attention de ne mettre qu'une commande par ligne, ou d'utiliser des séparateurs ;. Info S4 ch6 12 6

6.5 Les variables maintenues par le shell En plus des variables de l'environnement, chaque processus shell maintient un certain nombre de variables de contrôle : $ sleep 100 & [1] 576 $ ps PID TTY TIME COMMAND 514 pts/0 0:00 /bin/bash 576 pts/0 0:00 sleep 100 577 pts/0 0:00 ps u $ echo $$ (processus en cours) 514 $ echo $! (dernier processus détaché) 576 $ echo $? (statut de la dernière commande) 0 $ ls truc ls: truc: Aucun fichier ou répertoire de ce type $ echo $? 1 $ Info S4 ch6 13 Les fichiers de commandes peuvent comporter des paramètres, qui sont entrés sur la ligne de commande à l'exécution : $ cat echange ln -f $1 -tempo ln -f $2 $1 ln -f tempo $2 rm _tempo $ cat tintin Je suis Tintin! $ cat milou Et moi Milou! $ echange tintin milou $ cat tintin Et moi Milou! $ cat milou Je suis Tintin! Info S4 ch6 14 7

* est la liste des arguments ; # est le nombre d'arguments ; 0 est le nom de la commande ; 1,..., 9 sont les 9 premiers arguments. S'il y a plus de 9 arguments, on peut accéder aux suivants par la commande shift. Mais il est souvent préférable de manipuler la liste des arguments. Bien entendu, il est possible de définir des variables locales dans un fichier de commandes. Attention toutefois au passage des variables! Info S4 ch6 15 6.6 Les opérations La commande expr pemet de faire des opérations entre ses arguments. Attention à tous les blancs entre arguments! Se souvenir que les variables ont comme valeur des chaînes de caractères. Penser à déspécialiser les métacaractères. $ expr 4 + 5 9 $ a=5 $ expr 4$a + 5 50 $ expr $a \< 7 1 $ expr 1 \< z 1 $ expr tintin \< milou 0 Info S4 ch6 16 8

Les opérations possibles sont : + - * / % (reste) sur des opérandes entiers ; < > = >= <=! (différent de) sur des opérandes quelconques, avec comparaisons faites suivant l'ordre lexicographique entre chaînes de caractères ; & opérations booléennes. La priorité est la priorité usuelle. On peut grouper avec des parenthèses, qu'il faut penser à déspécialiser ; l'arithmétique est assez pénible. $ a=`expr 2 \* \( 3 + 4 \)` (affectation) $ echo $a 14 $ a=`expr $a + 1` (incrémentation) $ echo $a 15 Info S4 ch6 17 6.7 Les tests Deux formes possibles : test expression ou [ expression ]. Attention aux espaces! Cette commande renvoie 0 si expression est vraie et un autre entier sinon. Attention, cette convention, cohérente avec celle d'unix est contraire au résultat fourni par la commande expr! Tests sur les chaînes de caractères : test -z chaîne est vrai ssi chaîne est vide test -n chaîne est vrai ssi chaîne est non vide test chaîne 1 = chaîne 2 test chaîne 1!= chaîne 2 Info S4 ch6 18 9

Exemple : if test `pwd`= $HOME then echo le catalogue est bien le catalogue de travail fi Tests sur les nombres entiers : test chaîne 1 -eq chaîne 2 test chaîne 1 -ne chaîne 2 test chaîne 1 -lt chaîne 2 test chaîne 1 -le chaîne 2 test chaîne 1 -gt chaîne 2 test chaîne 1 -ge chaîne 2 Info S4 ch6 19 Tests sur les fichiers (entre autres...) : test -f nom est vrai ssi nom est un fichier test -d nom est vrai ssi nom est un répertoire test -r nom est vrai ssi nom est autorisé en lecture test -w nom est vrai ssi nom est autorisé en écriture test -x nom est vrai ssi nom est autorisé en exécution test -s nom est vrai ssi nom est de taille non nulle Connecteurs :! (non), -a (et), -o (ou). L'ordre d'évaluation peut être forcé par des parenthèses déspécialisées \( \). Les tests sont rarement utilisés seuls (bien que cela soit possible). Ils le sont en général dans une conditionnelle. Info S4 ch6 20 10

Les formes possibles sont : if commande 1 si le code de retour de commande 1 vaut 0 then commande 2 commande 2 est exécuté, else commande 3 sinon c'est commande 3. fi Attention : les mots-clés then, else et fi doivent être en début de ligne ou précédés de ; La clause else est facultative. Si on enchaîne des tests, on peut utiliser la syntaxe if... then... elif... then... else... fi Enfin exit n interrompt le fichier de commandes et renvoie n comme code de retour (au lieu de 0). Info S4 ch6 21 Quelques exemples : $ cat rencontre ls $1 > /dev/null 2> /dev/null if test $? -eq 0 then echo "Oui, $1 existe, je l\'ai rencontre." else echo "Pour $2, repassez plus tard." fi $ ls adieu affiche rencontre tintin $ rencontre tintin Oui, tintin existe, je l'ai rencontre. $ rencontre Dieu Pour Dieu, repassez plus tard. $ cat affiche if [ $# -ne 1 ] ; then echo "syntaxe : $0 nom_de_fichier"; exit 1; fi if [ - f $1 ]; then cat $1 elif [ -d $1 ]; then ls $1 else echo "$1 est un fichier special ou n'existe pas." fi Info S4 ch6 22 11

$ ls adieu affiche rencontre tintin $ affiche adieu tintin syntaxe :./affiche nom_de_fichier $ echo $? 1 $ affiche adieu Bonsoir! $ echo $? 0 $ affiche. adieu affiche rencontre tintin $ affiche Dieu Dieu est un fichier special ou n'existe pas. L'aiguillage case... esac a une syntaxe différente du switch de C : case chaîne in motif 1 ) commande 1 ;; motif 2 ) commande 2 ;;... esac Info S4 ch6 23 On examine si chaîne satisfait au motif 1 ; si oui, commande 1 est exécutée et on sort de la structure ; sinon on examine motif 2 et ainsi de suite. Pour la constitution d'un motif, on peut utiliser les caractères? et * ainsi qu'une liste de caractères [chaîne], un intervalle [c1-c2] et l'opérateur d'union. Par exemple : [0-9] [1-9][0-9] représente les nombres de un ou deux chiffres, *.[cp] représente tous les noms de fichiers d'extension c ou p. Comme exemple, la commande suivante appelle le bon compilateur selon l'extension du fichier. Le nom de celui-ci peut être entré en argument ou entré en ligne : Info S4 ch6 24 12

case $# in 0) echo -n "Fichier a compiler : " (pas de passage à la ligne) read reference set $reference;; (affecte reference à 1) esac case $1 in *.c) cc $1 ;; *.p) pc $1 ;; *.f) ff $1 ;; *) echo "Compilation de $1 impossible" ;; esac Info S4 ch6 25 6.8 Les itérations L'itération bornée : for variable in chaîne 1 chaîne 2... do commande done La liste de chaînes peut être explicite, la valeur d'une variable, souvent $*, le résultat d'une commande entre accents graves, le répertoire de travail avec *. Les mots-clés do et done doivent être en début de ligne ou précédes de ; Exemple : Pour afficher le contenu de tous les fichiers dont l'extension est.txt : for i in `ls *.txt`; do cat $i; done Info S4 ch6 26 13

Autres itérations : while... ; do... ; done et until... ; do... ; done Exemple : $ cat invite echo Repondre par oui ou non : read reponse while [ "$reponse"!= oui -a "$reponse"!= non ] do echo Repondre par oui ou non : read reponse echo "Votre reponse est : $reponse." done $ invite Repondre par oui ou non : oui Votre reponse est : oui. $ invite Repondre par oui ou non : zut Repondre par oui ou non : non Votre reponse est : non. Info S4 ch6 27 Création dynamique de fichiers : $ cat cree i=1 until [ $i -gt $1 ] do echo "valeur $i" > xx$i i=`expr $i + 1` done $ cree 3 $ ls xx* xx1 xx2 xx3 $ cat xx2 valeur 2 Info S4 ch6 28 14

La commande break fait sortir d'une itération et break n fait sortir de n niveaux d'imbrication. La commande continue fait passer au pas suivant de l'itération. On peut aussi faire continue n. Exemple : $ cat options for i in $*; do case $arg in _*) opt="$opt $i";; *) continue;; esac done echo $opt $ options -a toto -z -gh lulu -k -a -z -gh -k Info S4 ch6 29 6.8 D'autres commandes utiles Faire man bash, pour avoir une liste de ce que comprend le shell. La commande alias nom="chaîne" crée un alias nom pour une chaîne. La commande alias permet de connaître la liste des alias actifs. La commande cut pour sélectionner des champs. Les filtres lisent sur l'entrée standard, la modifient et renvoient le résultat sur la sortie standard. L'entrée standard peut souvent être remplacée par une liste de fichiers spécifiés en paramètres. On peut les utiliser dans des tubes. Pour chacune de ces commandes, voir le man correspondant. Info S4 ch6 30 15

Identité cat ; Décompte de lignes, mots et caractères wc ; Les premières et les dernières head et tail : head -n garde les n premières lignes ; tail -n garde les n dernières lignes ; tail +n garde les lignes à partir de la ligne n ; Remplacement de caractères tr : $ tr "[a-z]" "[A-Z]" < fichier met toutes les lettres en majuscules dans le fichier. Ordre sort ; Édition de texte sed : sed s/motif/chaîne/g fait une substitution globale de motif par chaîne. La syntaxe est celle des expressions régulières. Sélection grep : grep motif sélectionne les lignes contenant motif, suivant la même syntaxe. Info S4 ch6 31 16