UNIX STATION La programmation "Shell" Version 2.0 Edition mars 2009 Frédéric La
UNIX STATION La programmation "Shell" Version 2.0 Edition mars 2009 Frédéric Lang (fr.lang@free.fr) 1/89 LA PROGRAMMATION "SHELL" UNIX STATION La programmation "Shell" Version 2.0 Edition mars 2009 Frédéric Lang (fr.lang@free.fr) 2/89 Licence de ce document Permission est accordée de copier, distribuer et/ou modifier ce document selon les termes de la "Licence de Documentation Libre GNU" (GNU Free Documentation License), version 1.1 ou toute version ultérieure publiée par la Free Software Foundation. En particulier le verbe "modifier" autorise tout lecteur éventuel à apporter au document ses propres contributions ou à corriger d'éventuelles erreurs et lui permet d'ajouter son propre copyright dans la page "Registre des éditions" mais lui interdit d'enlever les copyrights déjà présents et lui interdit de modifier les termes de cette licence. Ce document ne peut être cédé, déposé ou distribué d'une autre manière que l'autorise la "Licence de Documentation Libre GNU" et toute tentative de ce type annule automatiquement les droits d'utiliser ce document sous cette licence. Toutefois, des tiers ayant reçu des copies de ce document ont le droit d'utiliser ces copies et continueront à bénéficier de ce droit tant qu'ils respecteront pleinement les conditions de la licence. La version actuelle de ce document est la 2.0 et sa version la plus récente est disponible en téléchargement à l'adresse http://fr.lang.free.fr Copyright © 2007 Frédéric Lang (fr.lang@free.fr) UNIX STATION La programmation "Shell" Version 2.0 Edition mars 2009 Frédéric Lang (fr.lang@free.fr) 3/89 Registre des éditions Version Date Description des modifications Auteur des modifications 1.0 30 juillet 2004 Mise en place du registre des éditions Corrections mineures (syntaxe, etc) © Frédéric Lang (fr.lang@free.fr) 1.1 26 août 2004 Relecture – Corrections mineures © Frédéric Lang (fr.lang@free.fr) 1.2 24 novembre 2004 Rajout du test de la numéricité d'une variable en "réel" Vérification et corrections majeures de tous les exercices © Frédéric Lang (fr.lang@free.fr) 1.3 24 février 2005 Rectification sur le paragraphe des fonctions Corrections mineures © Frédéric Lang (fr.lang@free.fr) 1.4 15 septembre 2005 Rajout de la variable "REPLY" dans le "select" et dans la liste des variables internes Corrections mineures © Frédéric Lang (fr.lang@free.fr) 2.0 26 juin 2007 Rajout d'un paragraphe dans l'introduction Prise en compte de nouveaux shells Réécriture complète du chapitre des fonctions Correction sur les substitutions de variables Rajout de la variable "REPLY" dans le "read" Correction sur la commande "test" Création du chapitre sur les outils avancés Révision de l'instruction "set" Rajout de l'instruction "source" Rajout de l'instruction "trap" Rajout de l'instruction "let" Rajout des instructions "typeset" et "declare" Rajout des instructions "locale"" Révision de l'instruction "getopts" Correction sur la commande "expr" Correction sur la commande "exec" Rajout de la commande "seq" Rajout de la commande "xargs" Rajout de la commande "getopt" Révision majeure des exemples "division" et "résolution polynômes" Rajout de l'exemple "tours de Hanoï" Remplacement de l’adresse email "frederic-lang@fr.fm" par "fr.lang@free.fr" © Frédéric Lang (fr.lang@free.fr) UNIX STATION La programmation "Shell" Version 2.0 Edition mars 2009 Frédéric Lang (fr.lang@free.fr) 4/89 SOMMAIRE I) INTRODUCTION_________________________________________________________________________ 7 1) POURQUOI PROGRAMMER EN SHELL ? _________________________________________________________ 8 2) PRESENTATION __________________________________________________________________________ 8 3) IMPERATIFS____________________________________________________________________________ 10 4) CONVENTIONS DU SUPPORT DE COURS _______________________________________________________ 10 II) ELEMENTS DE BASE DU LANGAGE______________________________________________________ 11 1) L'AFFICHAGE___________________________________________________________________________ 11 2) LES COMMENTAIRES _____________________________________________________________________ 11 3) LE DEBOGUEUR_________________________________________________________________________ 11 4) QUI EXECUTE ? _________________________________________________________________________ 12 III) LES VARIABLES________________________________________________________________________ 13 1) L'AFFECTATION – L'ACCES ________________________________________________________________ 13 a) Les variables simples__________________________________________________________________ 13 b) Les tableaux (shells évolués) ____________________________________________________________ 14 c) Remarque___________________________________________________________________________ 14 2) LA SUBSTITUTION _______________________________________________________________________ 15 a) Tous types de Shell ___________________________________________________________________ 15 b) Uniquement en Korn Shell et Bourne Again Shell (et shells descendants) _________________________ 16 c) Uniquement en Bourne Again Shell (et shells descendants) ____________________________________ 16 d) Remarque___________________________________________________________________________ 16 3) LA SAISIE EN INTERACTIF _________________________________________________________________ 17 4) LA PROTECTION ________________________________________________________________________ 17 5) LA SUPPRESSION ________________________________________________________________________ 18 6) LA VISIBILITE __________________________________________________________________________ 18 7) LE TYPAGE ("KORN SHELL" ET "BOURNE AGAIN SHELL" ET SHELLS DESCENDANTS) ___________________ 20 8) LES VARIABLES PREDEFINIES ______________________________________________________________ 21 IV) LA "SOUS-EXECUTION" ________________________________________________________________ 22 V) LES PARAMETRES _____________________________________________________________________ 24 1) RECUPERATION DES PARAMETRES___________________________________________________________ 24 2) DECALAGE DES PARAMETRES ______________________________________________________________ 25 3) RE AFFECTATION VOLONTAIRE DES PARAMETRES_______________________________________________ 26 4) LE SEPARATEUR DE CHAMPS INTERNES _______________________________________________________ 26 VI) NEUTRALISATION DES META CARACTERES ____________________________________________ 27 1) RAPPEL SUR LES META CARACTERES_________________________________________________________ 27 2) LE "BACKSLASHE"_______________________________________________________________________ 28 3) L'APOSTROPHE OU "QUOTTE SIMPLE" ________________________________________________________ 28 4) LE DOUBLE GUILLEMET___________________________________________________________________ 28 VII) LES CONTROLES BOOLEENS ___________________________________________________________ 29 1) INTRODUCTION _________________________________________________________________________ 29 2) LA COMMANDE "TEST" ___________________________________________________________________ 30 a) Test simple sur les fichiers______________________________________________________________ 30 b) D'autres test simple sur les fichiers ("Korn Shell" et "Bourne Again Shell" et shells descendants) ______ 30 c) Test complexe sur les fichiers ("Korn Shell" et en "Bourne Again Shell" et shells descendants) ________ 31 d) Test sur les longueurs de chaînes de caractères _____________________________________________ 31 e) Test sur les chaînes de caractères ________________________________________________________ 31 f) Test sur les numériques ________________________________________________________________ 32 g) Connecteurs d'expression ______________________________________________________________ 32 3) LES COMMANDES "TRUE" ET "FALSE" ________________________________________________________ 33 4) LA COMMANDE "READ" ___________________________________________________________________ 33 VIII) LES STRUCTURES DE CONTROLES______________________________________________________ 34 1) INTRODUCTION _________________________________________________________________________ 34 UNIX STATION La programmation "Shell" Version 2.0 Edition mars 2009 Frédéric Lang (fr.lang@free.fr) 5/89 2) L'ALTERNATIVE SIMPLE __________________________________________________________________ 34 3) L'ALTERNATIVE COMPLEXE________________________________________________________________ 35 4) LE BRANCHEMENT A CHOIX MULTIPLE _______________________________________________________ 36 5) LA BOUCLE SUR CONDITION _______________________________________________________________ 37 6) LA BOUCLE SUR LISTE DE VALEURS__________________________________________________________ 38 7) INTERRUPTION D'UNE OU PLUSIEURS BOUCLES _________________________________________________ 39 8) INTERRUPTION D'UN PROGRAMME___________________________________________________________ 40 9) LE GENERATEUR DE MENUS EN BOUCLE (KORN SHELL ET BOURNE AGAIN SHELL ET SHELLS DESCENDANTS)_ 40 IX) LES FONCTIONS _______________________________________________________________________ 41 1) INTRODUCTION _________________________________________________________________________ 41 2) PASSAGE DE VALEURS____________________________________________________________________ 42 3) RETOUR DE FONCTION____________________________________________________________________ 43 4) RENVOI D'UNE VALEUR PAR UNE FONCTION ___________________________________________________ 44 5) PORTEE DES VARIABLES __________________________________________________________________ 45 6) IMBRICATION DE FONCTIONS_______________________________________________________________ 46 7) LA TRACE DE L'APPELANT _________________________________________________________________ 48 X) LES INSTRUCTIONS AVANCEES_________________________________________________________ 49 1) L'INCLUSION DE SCRIPT DANS UN SCRIPT______________________________________________________ 49 2) LA PROTECTION CONTRE LES SIGNAUX _______________________________________________________ 50 3) TRANSFORMER UNE EXPRESSION EN ORDRE "SHELL" ____________________________________________ 51 4) ARITHMETIQUE SUR LES VARIABLES ("KORN SHELL" ET "BOURNE AGAIN SHELL" ET SHELLS DESCENDANTS) 51 5) CREER DE NOUVEAUX CANAUX D'ENTREES/SORTIES _____________________________________________ 52 6) GERER LES OPTIONS _____________________________________________________________________ 53 XI) LES COMPLEMENTS____________________________________________________________________ 55 1) EVALUER DES EXPRESSIONS REGULIERES AVEC LA COMMANDE "EXPR" ______________________________ 55 a) Arithmétique ________________________________________________________________________ 55 b) Comparaison ________________________________________________________________________ 56 c) Travail sur chaînes de caractères ________________________________________________________ 56 2) RECHERCHER DES CHAINES AVEC LA COMMANDE "GREP"_________________________________________ 57 3) DECOUPER DES LIGNES AVEC LA COMMANDE "CUT"_____________________________________________ 58 4) TRIER LES INFORMATIONS AVEC LA COMMANDE "SORT"__________________________________________ 58 5) FILTRER LES INFORMATIONS AVEC LA COMMANDE "SED"_________________________________________ 59 6) TRANSFORMER LES INFORMATIONS AVEC LA COMMANDE "TR" ____________________________________ 59 7) COMPTER LES OCTETS AVEC LA COMMANDE "WC" ______________________________________________ 60 8) AFFICHER UNE SEQUENCE DE NOMBRES AVEC LA COMMANDE "SEQ" ________________________________ 60 9) AFFICHER DES DONNEES FORMATEES AVEC LA COMMANDE "PRINTF"________________________________ 60 10) DECOUPER LES NOMS AVEC LES COMMANDES "BASENAME" ET "DIRNAME" ___________________________ 61 11) FILTRER LES ARGUMENTS AVEC LA COMMANDE "XARGS"_________________________________________ 61 12) MATHEMATIQUES EN VIRGULE FLOTTANTE AVEC LA COMMANDE "BC" ______________________________ 62 13) GERER LES OPTIONS AVEC LA COMMANDE "GETOPT" ____________________________________________ 62 14) GERER SON AFFICHAGE A L'ECRAN AVEC LES CODES "ESCAPE" ____________________________________ 64 XII) EXEMPLES DIVERS_____________________________________________________________________ 66 1) AFFICHER UNE PHRASE SANS QUE LE CURSEUR PASSE A LA LIGNE SUIVANTE __________________________ 66 2) VERIFIER L'EXISTENCE D'UN FICHIER QUEL QUE SOIT SON TYPE ____________________________________ 66 3) VERIFIER LA NUMERICITE D'UNE VARIABLE EN TERME DE "NOMBRE ENTIER"__________________________ 66 4) VERIFIER LA NUMERICITE D'UNE VARIABLE EN TERME DE "NOMBRE REEL" ___________________________ 67 5) NOM DE BASE DU REPERTOIRE COURANT _____________________________________________________ 67 6) VERIFICATION DE L'AUTORISATION D'ACCES D'UN UTILISATEUR QUELCONQUE_________________________ 68 7) MEMBRES D'UN GROUPE __________________________________________________________________ 69 8) SERVEURS GERES PAR "INETD" _____________________________________________________________ 70 9) RECHERCHE D'UNE COMMANDE ____________________________________________________________ 71 10) ARBORESCENCE D'UN REPERTOIRE __________________________________________________________ 72 11) FACTORIELLE D'UN NOMBRE _______________________________________________________________ 74 12) PGCD DE DEUX NOMBRES ________________________________________________________________ 76 13) DIVISION EN NOMBRES REELS ______________________________________________________________ 78 14) RESOLUTION DE POLYNOME DU SECOND DEGRE : AX2 + BX + C = 0 ________________________________ 83 15) TOURS DE HANOÏ _______________________________________________________________________ 86 UNIX STATION La programmation "Shell" Version 2.0 Edition mars 2009 Frédéric Lang (fr.lang@free.fr) 6/89 INDEX ______________________________________________________________________________________ 88 UNIX STATION La programmation "Shell" Version 2.0 Edition mars 2009 Frédéric Lang (fr.lang@free.fr) 7/89 I) INTRODUCTION Le Shell est un "INTERPRETEUR DE COMMANDE". Il ne fait pas partie du système d'exploitation UNIX; et c'est la raison pour laquelle il porte ce nom "coquille", qui indique son état détaché du "noyau" Unix. Son rôle est d'analyser la commande tapée afin de faire réagir le système pour qu'il réponde aux besoins de l'utilisateur. C'est le premier langage de commandes développé sur Unix par Steve Bourne. Une comparaison rapide pourrait l'apparenter au DOS (Disc Operating System) développé par Microsoft, mais cette comparaison n'est là que pour illustrer le rôle du Shell par rapport à Unix. De par sa qualité de "programme externe", il n'est pas unique. En effet, rien n'empêche n'importe quel programmeur de programmer une boucle qui attend une chaîne au clavier, analyse cette chaîne et appelle ensuite le système pour exécuter l'ordre demandé. C'est la raison pour laquelle il existe plusieurs shells. Nous trouvons entre autres (liste non-exhaustive) : le Bourne Shell ("/bin/sh") uploads/Industriel/ programmation-shell-unix.pdf
Documents similaires
-
16
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Fev 13, 2022
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.4406MB