Top Posters
Since Sunday
A free membership is required to access uploaded content. Login or Register.

Programmation Shell.docx

Uploaded: 6 years ago
Contributor: redsmile
Category: Data Structures
Type: Other
Rating: N/A
Helpful
Unhelpful
Filename:   Programmation Shell.docx (116.66 kB)
Page Count: 103
Credit Cost: 1
Views: 106
Last Download: N/A
Transcript
La programmation Shell Introduction Le Shell est un interpr teur 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 le Korn Shell bin ksh le c Shell bin csh pour les utilisateurs pr f rant un langage apparent au C le Job Shell bin jsh le Shell r seau bin rsh le Bourne Again Shell bin bash qui a repris le Bourne Shell mais qui l'a agr ment de nouvelles fonctionnalit s rappel de commandes compl tion automatique etc le c Shell am lior bin tcsh am liorant le c Shell tout en lui restant compatible l'Almquist Shell bin ash am liorant le Bourne Shell tout en tant plus compact que le Bourne Again Shell le z Shell bin zsh et d'autres encore venir C'est un langage de commandes mais aussi un langage de programmation Il permet donc l'utilisation de variables la mise en s quence de commandes l'ex cution conditionnelle de commandes la r p tition de commandes Un programme shell appel aussi script est un outil facile utiliser pour construire des applications en regroupant des appels syst mes outils utilitaires et programmes compil s Concr tement le r pertoire entier des commandes Unix des utilitaires et des outils est disponible partir d'un script shell Les scripts shell conviennent parfaitement pour des t ches d'administration du syst me et pour d'autres routines r p titives ne r clamant pas les particularit s d'un langage de programmation structur Pourquoi programmer en shell Aucun langage de programmation n'est parfait Il n'existe m me pas un langage meilleur que d'autres il n'y a que des langages en ad quation ou peu conseill s pour des buts particuliers Herbert Mayer Une connaissance fonctionnelle de la programmation shell est essentielle quiconque souhaite devenir efficace en administration syst me car toute l'administration dans Unix est crite en shell Une compr hension d taill e des scripts d'administration est importante pour analyser le comportement du syst me voire le modifier De plus la seule fa on pour vraiment apprendre la programmation des scripts est d' crire des scritpts Quand ne pas programmer en shell Pour des t ches demandant beaucoup de ressources ou beaucoup de rapidit Pour une application complexe o une programmation structur e est n cessaire typage des variables prototypage de fonctions tableaux multi dimensionels listes cha n es arbres etc Pour des situations o la s curit est importante protection contre l'intrusion le vandalisme Pour des applications qui acc dent directement au mat riel Pour des applications qui devront g n rer ou utiliser une interface graphique utilisateur G U I Pour des applications propri taires un script est forc ment lisible par celui qui l'utilise Pour toutes ces situations Unix offre une gamme de langages de scripts plus puissants comme le Perl Tcl Python Ruby voire des langages compil s de haut niveau comme le C et le C Pr sentation Il existe deux moyens de programmer en Shell Le premier est dit en direct L'utilisateur tape directement la ou les commandes qu'il veut lancer Si cette commande a une syntaxe qui l'oblige tre d coup e en plusieurs lignes le Shell indiquera par l'affichage d'un prompt secondaire que la commande attend une suite et n'ex cutera r ellement la commande qu' la fin de la derni re ligne Exemple Prompt date Tue Jan NFT Prompt pwd tmp Prompt if test Prompt secondaire then Prompt secondaire echo vrai Prompt secondaire fi vrai Le second est dit en script appel aussi batch ou source Shell L'utilisateur cr e un fichier texte par l' diteur de son choix ex vi Il met dans ce script toutes les commandes qu'il voudra lui faire ex cuter en respectant la r gle de base de ne mettre qu'une seule commande par ligne Une fois ce script fini et sauvegard il le rend ex cutable par l'adjonction du droit x cf Gestion des fichiers Il peut ensuite lancer l'ex cution de ce fichier comme n'importe quelle autre commande Unix attention cependant au contenu de la variable PATH qui indique o aller chercher une commande lorsqu'on la lance sans pr ciser o elle se trouve Toutes les commandes inscrites dans le fichier texte seront ex cut es s quentiellement Exemple Lancement de l' diteur Prompt vi prog Mise jour du droit d'ex cution Prompt chmod a x prog Ex cution du script pris dans le r pertoire courant Prompt prog Tue Jan NFT tmp oui Contenu du fichier prog date pwd if test then echo vrai fi Remarque L'adjonction du droit x n'est pas obligatoire mais l'utilisateur devra alors demander sp cifiquement un Shell quelconque d'interpr ter le script Exemple L'utilisateur demande d'interpr ter le script par l'interm diaire du Bourne Shell Prompt sh prog Tue Jan NFT tmp oui Exemple L'utilisateur demande d'interpr ter le script par l'interm diaire du Korn Shell Prompt ksh prog Tue Jan NFT tmp oui Imp ratifs Comme il l'a t dit le Shell est un interpr teur C'est dire que chaque ligne est analys e v rifi e et ex cut e Afin de ne pas trop limiter la rapidit d'ex cution il y a tr s peu de r gles d'analyse Cela implique une grande rigidit d' criture de la part du programmeur Une majuscule n'est pas une minuscule et surtout deux l ments distincts sont toujours s par s par un espace une exception pr s qui sera vue plus tard Enfin le premier mot de chaque ligne si la ligne n'est pas mise en commentaire doit tre une instruction Shell correcte On appelle instruction soit l'appel d'une commande Unix ex date l'appel d'un autre script Shell ex prog une commande interne du langage ex cd Exemple Prompt echoBonjour sh echoBonjour not found Prompt echo Bonjour Bonjour Conventions du support de cours Il est difficile d' crire un support de cours en essayant de faire ressortir des points importants par l'utilisation de caract res sp cifiques guillemets parenth ses etc sur un langage utilisant certains caract res comme instructions sp cifiques guillemets parenth ses etc De plus le lecteur ne sait pas forc ment distinguer les l ments provenant de l'ordinateur des l ments qu'il doit taper au clavier C'est pourquoi il est n cessaire de d finir des conventions La cha ne Prompt ou Prompt pr sente dans les exemples de ce cours est une invite appel e aussi prompt C'est une cha ne affich e par l'interpr teur dans lequel travaille l'utilisateur afin de lui indiquer qu'il attend une instruction Cette cha ne n'est pas forc ment la m me pour des utilisateurs diff rents Dans ce support sa pr sence signifie que l'exemple propos peut tre tap directement en ligne sans obligatoirement passer par un fichier script La cha ne bin sh pr sente dans les exemples de ce cours est expliqu e plus tard Dans ce support sa pr sence signifie qu'il vaut mieux crire l'exemple propos dans un fichier script afin de pouvoir ex cuter l'exemple plusieurs fois pour mieux analyser son fonctionnement Les syntaxes pr sentes en d but de paragraphe donnent la syntaxe exacte d'une commande Elles sont donc pr sent es sans prompt ni ligne bin sh Des l ments mis entre crochets elem signifient qu'ils sont facultatifs L'utilisateur peut les utiliser ou pas mais ne doit en aucun cas mettre de crochets dans sa frappe ou son programme Le caract re n employ dans la syntaxe signifie nombre entier quelconque positif ou parfois nul Le caract re employ dans la syntaxe signifie choix entre l' l ment situ gauche ou droite du Les points de suspension signifient que l' l ment plac juste avant eux peut tre r p t autant de fois que l'on d sire El ments de base du langage L'affichage L'affichage est la premi re commande qu'un programmeur d butant pourra tre tent de faire Cela lui permet en effet de visualiser directement l' cran le r sultat de ses actions L'affichage en Shell se fait avec la commande echo Exemple Prompt echo Hello World Les commentaires Un commentaire sert am liorer la lisibilit du script Il est plac en le faisant pr c der du caract re di se Tout ce qui suit ce di se est ignor jusqu' la fin de la ligne ce qui permet de mettre un commentaire sur une ligne d'instructions Il ne faut pas oublier alors l'espace s parant la fin de l'instruction et le d but du commentaire Exemple bin sh Ce programme affiche la date date Cette ligne est la ligne qui affiche la date Le d bogueur Une proc dure longue et difficile peut ne pas r ussir du premier coup Afin de d tecter l'erreur le Shell offre un outil de d bogage Il s'agit de l'instruction set agr ment e d'une ou plusieurs options suivantes v affichage de chaque instruction avant analyse il affiche le nom des variables x affichage de chaque instruction apr s analyse il affiche le contenu des variables e sortie imm diate sur erreur Chaque instruction set - active l'outil demand qui sera d sactiv par l'instruction set On peut ainsi activer le traqueur sur une portion pr cise du programme source Exemple bin sh set x Activation du d bogage partir de maintenant date Cette ligne est la ligne qui affiche la date set x D sactivation du d bogage partir de maintenant Remarque Compte tenu du flot important d'informations produit par ces outils il peut tre avantageux de lui pr f rer un affichage des variables pouvant causer l'erreur commande echo Qui ex cute Rappelons qu'il existe plusieurs shells et que chacun d'eux poss de des caract ristiques diff rentes De plus chaque utilisateur Unix peut demander travailler dans le Shell de sa convenance Il s'ensuit qu'un script crit par un utilisateur travaillant en Bourne Shell ne fonctionnera pas forc ment s'il est ex cut par un utilisateur travaillant en CShell L'utilisateur peut visualiser le Shell dans lequel il travaille en tapant la commande suivante Prompt echo Cependant Unix cherche assurer la portabilit de ses programmes Il est donc n cessaire qu'un script crit par un utilisateur travaillant en Bourne Shell puisse tre ex cut par tous les utilisateurs quels que soient leurs propres shells de travail Pour cela il convient d'indiquer dans le script quel interpr teur utiliser pour ex cuter ledit script Si cette indication n'existe pas le syst me utilisera l'interpr teur de travail affect l'utilisateur pour analyser et ex cuter le script en question interpr teur pas forc ment compatible avec la syntaxe du script Cette indication se porte en d but de script avec la ligne interpr teur Exemple en Bourne Shell bin sh Ce script sera trait par le programme bin sh Bourne Shell date Demande l'interpr teur bin sh de lancer le programme date Exemple en Korn Shell bin ksh Ce script sera trait par le programme bin ksh Korn Shell date Demande l'interpr teur bin ksh de lancer le programme date Ici cas particulier le caract re point d'exclamation de la premi re ligne annihile l'effet commentaire du caract re di se et devient une instruction indiquant quel programme a la charge d'analyser le script Mais le caract re reste n cessaire car certains outils peuvent int grer un script dans un autre Remarque Ce cours proposera globalement une syntaxe Bourne Shell avec quelques l ments sp cifiques aux shells de m me famille dits plus volu s Korn Shell ou Bourne Again Shell qui seront indiqu s au moment o cela sera n cessaire Le Bourne Shell tant int gralement support par le Korn Shell et le Bourne Again Shell et leurs descendants cela permet une compatibilit ascendante un script en Bourne Shell fonctionnera toujours en environnements Korn Shell ou Bourne Again Shell ou shells descendants Autre exemple ne fonctionne qu'une seule fois bin rm Ce script sera trait par le programme bin rm effacement Le script s'efface donc lui-m me - Ici le script est d j effac Quoi que l'on mette ici cela ne sera pas ex cut cela n'existe d j plus Les variables Il n'est pas de langage sans variable Une variable sert m moriser une information afin de la r utiliser ult rieurement Elles sont cr es par le programmeur au moment o il en a besoin Il n'a pas besoin de les d clarer d'un type particulier et peut en cr er quand il veut o il veut Leur nom est repr sent par une suite de caract res commen ant imp rativement par une lettre ou le caract re soulign ou underscore et comportant ensuite des lettres des chiffres ou le caract re soulign Il ne doit pas correspondre un des mots clefs du Shell Leur contenu est interpr t exclusivement comme du texte Il n'existe donc pas en Bourne Shell d'instruction d'op ration sur des variables ou sur du nombre addition soustraction etc Il n'est pas non plus possible d'avoir des variables dimensionn es tableaux Mais cela est possible en Korn Shell et Bourne Again Shell et shells descendants Il est important de noter que le Shell reconna t pour toute variable deux tats non d finie non-existence elle n'existe pas dans la m moire d finie existence elle existe dans la m moire m me si elle est vide L'affectation L'acc s Les variables simples Syntaxe variable cha ne L'affectation d'une variable simple il n'y a pas de possibilit de cr er de tableau en Bourne Shell se fait par la syntaxe variable cha ne C'est la seule syntaxe du Shell qui ne veuille pas d'espace dans sa structure sous peine d'avoir une erreur lors de l'ex cution Dans le cas o on voudrait entrer une cha ne avec des espaces dans la variable il faut alors encadrer la cha ne par des guillemets simples ou doubles la diff rence entre les deux sera vue plus tard A partir du moment o elle a t affect e une variable se met exister dans la m moire m me si elle a t affect e avec rien L'acc s au contenu de la variable s'obtient en faisant pr c der le nom de la variable du caract re Exemples Prompt nom Pierre Affectation de Pierre dans la variable nom Prompt objet voiture Affectation de voiture dans la variable objet Prompt coul bleue Affectation de bleu dans la variable coul Prompt echo Il se nomme nom Affichage d'un texte et d'une variable Prompt txt nom a une objet coul M lange de variables et texte dans une variable Prompt echo txt Attention ne pas oublier le caract re Prompt echo txt Affichage de la variable txt Les tableaux shells volu s Syntaxe variable n cha ne variable cha ne cha ne Le Korn Shell Bourne Again Shell et shells descendants permettent de cr er des tableaux une seule dimension L'affectation d'un l ment d'un tableau se fait par la syntaxe variable n cha ne Dans ce cas pr cis les crochets ne signifient pas l ment facultatif mais bien crochets et le programmeur doit les mettre dans sa syntaxe L'indice n que l'on sp cifie entre les crochets doit tre imp rativement positif ou nul mais il n'a pas de limite maximale De plus rien n'oblige le programmeur remplir le n me l ment avant d'aller remplir le n me Il est possible de remplir en une seule instruction les n premiers l ments du tableau en utilisant la syntaxe variable cha ne cha ne Dans cette syntaxe o l'utilisation de parenth ses est obligatoire le texte cha ne ira dans la variable variable le texte cha ne ira dans la variable variable etc Cette syntaxe remplace tout le tableau par les seules cha nes situ es entre parenth ses L'ancien contenu ventuel dispara t alors pour tre remplac par le nouveau L'acc s au contenu de la variable d'indice n s'obtient en encadrant le nom de la variable indic e par des accolades et en faisant pr c der le tout du caract re Si on remplace la valeur de l'indice par le caract re le Shell concat nera tous les l ments du tableau en une cha ne unique et renverra cette derni re Et si on remplace la valeur de l'indice par le caract re le Shell transformera chaque l ment du tableau en cha ne et renverra ensuite l'ensemble de toutes ces cha nes concat n es Visuellement il n'y a aucune diff rence dans le r sultat entre l'utilisation des caract res ou Dans des environnements de shells acceptant les tableaux toute variable simple est automatiquement transform e en tableau un seul l ment d'indice Exemple Prompt nom Pierre Affectation de Pierre dans la variable nom Prompt nom Paul Affectation de Paul dans la variable nom Prompt nom Jacques Affectation de Jacques dans la variable nom Prompt i Affectation de la variable i ou i Prompt prenom Pim Pam Poum Affectation de pr noms dans un tableau Prompt echo Voici mes noms nom nom et nom i Prompt echo Mon tableau de noms contient nom Prompt echo Mon tableau de pr noms contient prenom Remarque M me si cela est possible de fa on limit e cf commande eval il est difficile et d conseill de vouloir manipuler des variables de variable connues dans d'autres langages sous le nom pointeurs Autrement dit la syntaxe var qui pourrait vouloir dire contenu du contenu de la variable var signifie en r alit contenu de la variable sera vue ult rieurement suivi de la cha ne var La substitution On peut utiliser des s quenceurs sp ciaux pour modifier la mani re dont le Shell va renvoyer le contenu de ou des variables demand es Tous types de Shell var renvoie le contenu de var Il sert isoler le nom de la variable par rapport au contexte de son utilisation Ceci vite les confusions entre ce que l'utilisateur d sire prix F variable prix suivi du caract re F et ce que le Shell comprendrait si on crivait simplement prixF variable prixF var-texte renvoie le contenu de la variable var si celle-ci est d finie existe en m moire sinon renvoie le texte texte var -texte renvoie le contenu de la variable var si celle-ci est d finie et non vide sinon renvoie le texte texte var texte renvoie le texte texte si la variable var est d finie sinon ne renvoie rien var texte renvoie le texte texte si la variable var est d finie et non-vide sinon ne renvoie rien var texte renvoie le contenu de la variable var si celle-ci est d finie sinon affiche le texte texte comme message d'erreur implique donc l'arr t du script var texte renvoie le contenu de la variable var si celle-ci est d finie et non-vide sinon affiche le texte texte comme var -texte comme message d'erreur implique donc l'arr t du script var texte renvoie le contenu de la variable var si celle-ci est d finie sinon affecte le texte texte la variable var avant de renvoyer son contenu var texte renvoie le contenu de la variable var si celle-ci est d finie et non-vide sinon affecte le texte texte la variable var avant de renvoyer son contenu Uniquement en Korn Shell et Bourne Again Shell et shells descendants var n renvoie le contenu du ni me l ment du tableau var var concat ne tous les l ments pr sents dans le tableau var en une cha ne unique et renvoie cette derni re var transforme individuellement chaque l ment pr sent dans le tableau var en une cha ne et renvoie la concat nation de toutes les cha nes var texte Si texte contient un m ta caract re alors il sera tendu jusqu' la plus petite correspondance avec le contenu de var pris partir du d but Si cette correspondance est trouv e elle est alors supprim e du d but de var var texte Si texte contient un m ta caract re alors il sera tendu jusqu' sa plus grande correspondance avec le contenu de var pris partir du d but Si cette correspondance est trouv e elle est alors supprim e du d but de var var texte Si texte contient un m ta caract re alors il sera tendu jusqu' sa plus petite correspondance avec le contenu de var pris partir de la fin Si cette correspondance est trouv e elle est alors supprim e de la fin de var var texte Si texte contient un m ta caract re alors il sera tendu jusqu' sa plus grande correspondance avec le contenu de var pris partir de la fin Si cette correspondance est trouv e elle est alors supprim e de la fin de var var renvoie le nombre de caract res contenus dans la variable var Si la variable est un tableau renvoie alors le nombre d' l ments du tableau expression renvoie la valeur num rique de l'expression demand e Uniquement en Bourne Again Shell et shells descendants var utilise le contenu de la variable var comme un nom de variable et renvoie le contenu de cette derni re permet donc de simuler un pointeur var x y renvoie les y caract res de la variable var partir du caract re n x attention le premier caract re d'une variable porte le n Si la variable est un tableau renvoie alors les y l ments du tableau var partir de l' l ment n x var x renvoie la fin de la variable var partir du caract re n x attention le premier caract re d'une variable porte le n Si la variable est un tableau renvoie alors les derniers l ments du tableau var partir de l' l ment n x var texte texte renvoie le contenu de var mais en lui rempla ant la premi re occurrence de la cha ne texte par la cha ne texte var texte texte renvoie le contenu de var mais en lui rempla ant chaque occurrence de la cha ne texte par la cha ne texte Remarque L'imbrication de s quenceurs est possible Ainsi la syntaxe var - var -texte renvoie le contenu de la variable var si celle-ci est d finie et non nulle sinon renvoie le contenu de la variable var si celle-ci est d finie et non nulle sinon renvoie le texte texte La saisie en interactif Syntaxe read var var Cette action est n cessaire lorsque le programmeur d sire demander une information ponctuelle celui qui utilise le programme A l'ex cution de la commande le programme attendra du fichier standard d'entr e cf Gestion des processus une cha ne termin e par la touche Entr e ou fin de ligne Une fois la saisie valid e chaque mot s par par un espace sera stock dans chaque variable var var etc En cas d'exc dent celui-ci sera stock dans la derni re variable En cas de manque les variables non-remplies seront automatiquement d finies mais vides Si aucune variable n'est demand e la cha ne saisie sera stock e dans la variable interne REPLY uniquement en Korn Shell Bourne Again Shell et shells descendants Syntaxe read a tableau Korn Shell et Bourne Again Shell et shells descendants Le Korn Shell et le Bourne Again Shell et les shells descendants permettent d'affecter automatiquement chaque mot en provenance du fichier standard d'entr e cf Gestion des processus dans les l ments d'un tableau Le premier mot ira dans le tableau d'indice le second dans le tableau d'indice etc Cette syntaxe remplace tout le tableau par les seules cha nes provenant de l'entr e standard L'ancien ventuel contenu dispara t alors pour tre remplac par le nouveau La protection Syntaxe readonly var var readonly Cette commande lorsqu'elle est employ e sur une variable la verrouille contre toute modification et ou suppression volontaire ou accidentelle Une fois verrouill e la variable ne dispara tra qu' la mort du processus qui l'utilise cf Gestion des processus Employ e sans argument l'instruction readonly donne la liste de toutes les variables prot g es La suppression Syntaxe unset var var Cette instruction supprime la variable sur laquelle elle est appliqu e condition que cette derni re n'ait pas t prot g e par l'instruction readonly Le mot suppression rend la variable l' tat de nond fini ou nonexistant Il y a lib ration de l'espace m moire affect la variable cibl e Il ne faut donc pas confondre variable supprim e et variable vide La visibilit Syntaxe export var var export Lorsque un script Shell est lanc depuis l'environnement d'un utilisateur ce script commence son ex cution cf Gestion des processus avec une zone m moire vierge qui lui est propre Il ne conna t donc par d faut aucune des variables de l'environnement qui lui a donn naissance environnement p re Pour qu'un processus p re puisse faire conna tre une variable un processus fils il doit l'exporter avec la commande export var Ceci fait la variable export e depuis un environnement particulier sera connue de tous les processus fils et de tous les processus fils des fils etc Cependant modifier le contenu d'une variable dans un processus quelconque ne reporte pas cette modification dans les environnements sup rieurs Dans la m me optique il n'y a aucun moyen simple pour renvoyer une variable quelconque d'un processus vers un processus parent Employ e seule la commande export donne la liste de toutes les variables qui ont t export es Exemple d'un script prog affichant et modifiant une variable qu'il n'a pas cr e bin sh echo Contenu de var var Affichage de la variable var var Salut Modification de la variable dans le script pour voir si elle remonte echo Contenu de var var De nouveau affichage de la variable var Exemple sans exportation Action Affectation de var Prompt var Bonjour Action Affichage de var Prompt echo var Bonjour R sultat var est bien cr e Action Lancement du script prog Prompt prog Contenu de var Contenu de var Salut R sultat prog ne conna t pas var ou var n'existe pas dans prog Puis var est cr e et ensuite elle est affich e Action Affichage de var Prompt echo var Bonjour R sultat Malgr la modification faite dans le script var n'a pas chang Exemple avec exportation Action Affectation et exportation de var Prompt var Bonjour Prompt export var Action Affichage de var Prompt echo var Bonjour R sultat var est bien cr e Action Lancement du script prog Prompt prog Contenu de var Bonjour Contenu de var Salut R sultat Ici prog conna t var puis var est modifi e et ensuite elle est affich e Action Affichage de var Prompt echo var Bonjour R sultat Malgr la modification faite dans le script et bien qu'il y ait un export var n'a toujours pas chang Le typage Korn Shell et Bourne Again Shell et shells descendants Syntaxe typeset -a -i -r -x var var typeset Les shells volu s Korn Shell Bourne Again Shell et autres descendants permettent de restreindre les propri t s des variables et correspond une certaine forme de typage simpliste typeset -a var la variable sera trait e comme un tableau typeset -i var la variable sera trait e comme un entier et peut tre incluse dans des op rations arithm tiques typeset -r var la variable sera mise en lecture seule quivalent de readonly typeset -x var la variable sera export e automatiquement dans les processus fils quivalent de export A noter L'instruction declare accessible uniquement en Bourne Again Shell et autres descendants est un synonyme de l'instruction typeset Les variables pr d finies Un utilisateur poss de lors de sa connexion plusieurs variables automatiquement d finies par le syst me Certaines sont modifiables certaines ne le sont pas mais toutes sont utiles Quelques variables prises parmi les plus courantes Variable Signification HOME R pertoire personnel de l'utilisateur PWD R pertoire courant uniquement en Korn Shell ou Bourne Again Shell et shells descendants OLDPWD R pertoire dans lequel on tait avant notre dernier changement de r pertoire uniquement en Korn Shell ou Bourne Again Shell et shells descendants LOGNAME Nom de login PATH Chemins de recherche des commandes CDPATH Chemins de recherche du r pertoire demand par la commande cd PS Prompt principal invite taper une commande PS Prompt secondaire indique que la commande n'est pas termin e PS Prompt utilis par la commande select uniquement en Korn Shell et Bourne Again Shell et shells descendants PS Prompt affich lors de l'utilisation du mode d bogueur set x TERM Type de terminal utilis REPLY Cha ne saisie par l'utilisateur si la commande read a t employ e sans argument uniquement en Korn Shell et Bourne Again Shell et shells descendants Num ro choisi par l'utilisateur dans la commande select uniquement en Korn Shell et Bourne Again Shell et shells descendants IFS S parateur de champs internes SHELL Nom du Shell qui sera lanc chaque fois qu'on demandera l'ouverture d'un Shell dans une application interactive vi ftp etc RANDOM Nombre al atoire entre et uniquement en Korn Shell et Bourne Again Shell et shells descendants Num ro du processus courant Num ro du dernier processus lanc en arri re-plan Statut tat final de la derni re commande La sous-ex cution La sousex cution de commande est un des m canismes les plus importants en Shell Il permet de remplacer lors de l'ex cution du programme une partie du script par le texte qu'une commande affiche normalement l' cran Ce m canisme s'obtient en encadrant la commande remplacer par des accents grave caract re obtenu en pressant la touche sur un clavier Azerty tout en maintenant la touche Alt Gr enfonc e Ce m canisme peut tre utilis en coordination avec beaucoup d'autres qui seront vus ult rieurement Mais l'utilisation la plus courante est l'affectation de variables Exemples utiles Prompt var echo Salut Ce qu'affiche la commande echo Salut ira dans var Prompt var date Ce qu'affiche la commande date ira dans var Prompt var ls l Ce qu'affiche la commande ls l ira dans var Prompt var pwd Ce qu'affiche la commande pwd ira dans var Exemples inutiles Prompt var cd Ce qu'affiche la commande cd donc rien ira dans var Prompt var pwd La cha ne pwd ira dans var oubli des accents grave Bien entendu lorsque le programmeur veut ex cuter normalement une commande sans avoir besoin de r cup rer ce que la commande affiche il ne met pas d'accent grave Exemple Prompt date R sultat Ex cution normale de la commande date comme avant depuis le d but du cours Prompt date R sultat Erreur de syntaxe La commande date est sousex cut e et son r sultat est alors interpr t par le Shell dans le contexte o la sousex cution s'est produite Or le premier mot d'une ligne en Shell doit tre une commande Unix et il est peu probable que le premier mot affich par la commande date soit une commande Unix Prompt echo date R sultat Inutile La commande echo date est sousex cut e et son r sultat en l'occurrence le mot date est alors interpr t par le Shell dans le contexte ou la sousex cution s'est produite Ici la cha ne date produite par la sousex cution du echo correspond une commande Unix valide et comme son contexte la place en d but de ligne le Shell interpr tera cette cha ne comme une instruction et ex cutera cette derni re On aura donc comme r sultat final l'ex cution de la commande date Cette remarque sera valable chaque fois que le programmeur sera tent de sousex cuter la commande echo Remarques Il est tout fait possible d'imbriquer des niveaux de sousex cution Mais chaque niveau doit tre prot g du sup rieur par l'emploi de backslashes Et ces backslashes doivent eux-m mes tre prot g s du niveau sup rieur par des backslashes Ainsi une affectation avec niveaux de sousex cution par exemple s' crira var cmd cmd cmd Ce m canisme de protection sera vu ult rieurement plus en d tail cf Neutralisation des m ta caract res mais il conduit rapidement une criture assez lourde qui devient vite illisible si on commence empiler les sousniveaux le plus bas niveau d'une commande n imbrications s' crira avec n - backslashes Il vaut mieux dans ce cas d composer les sousex cutions en plusieurs tapes utilisant des variables La sousex cution peut tre aussi obtenue en Korn Shell et en Bourne Again Shell et shells descendants par la syntaxe commande Cette syntaxe permet une criture plus simple et plus lisible des sousniveaux commande mais n'est pas compatible avec le Bourne Shell Ce m canisme permet au Shell de d l guer d'autres programmes tout ce qu'il ne sait pas faire par luim me calculs travail sur chaines recherches dans fichier etc et de r cup rer le r sultat dudit programme Si le programme n'existe pas il suffit de l' crire en n'importe quel langage et lui faire sortir ses valeurs sur l' cran pour pouvoir r cup rer ensuite lesdites valeurs dans le script Il permet donc une imbrication totale de tout programme Unix quel qu'il soit dans un script shell L'excellente compr hension de ce m canisme est primordiale dans la compr hension de la programmation en Shell Les param tres Un param tre appel aussi argument est un l ment cha ne de caract res situ entre le nom du programme et la touche Entr e qui active le programme Il s'agit en g n ral d' l ments que le programme ne conna t pas l'avance et dont il a videmment besoin pour travailler Ces l ments peuvent tre n cessaires au programme pour son bon fonctionnement cp fic fic ou facultatifs pour lui demander une variation dans son travail c'est dire un travail optionnel ls l Ils constituent g n ralement un substitut plus avantageux qu'une saisie en interactif car le programme n'a alors pas besoin durant son traitement de la pr sence d'un utilisateur qui r pondra ses questions Cellesci sont d j pr vues par les arguments que le programme conna t et qu'il utilisera au moment opportun Exemple Prompt cp fic fic Commande cp argument fic argument fic Prompt ls l Commande ls argument l Prompt cd Commande cd sans argument R cup ration des param tres Dans un script les param tres ou arguments positionn s par l'utilisateur ex cutant le script sont automatiquement et toujours stock s dans des variables automatiques remplies automatiquement par le Shell Ces variables sont nom du script Le contenu de cette variable est invariable Il peut tre consid r comme tant part du reste des arguments argument plac en premi re seconde troisi me neuvi me position derri re le nom du script etc nombre d'arguments pass s au script liste de tous les arguments sauf concat n s en une cha ne unique liste de tous les arguments sauf transform s individuellement en cha ne Visuellement il n'y pas de diff rence entre et Exemple d'un script prog bin sh echo Affichage nom du script echo Affichage argument n echo Affichage argument n echo Affichage argument n echo Affichage nb d'arguments echo Affichage tous arguments R sultat de l'ex cution Prompt prog prog Prompt prog a b c d e f g h i j k l m prog a b e a b c d e f g h i j k l m D calage des param tres Syntaxe shift n Comme on peut le remarquer le programmeur n'a acc s de fa on individuelle qu'aux variables Si le nombre de param tres d passe neuf ils sont pris en compte par le script Shell mais le programmeur n'y a pas acc s de mani re individuelle Bien entendu il peut y acc der en passant par la variable mais il devra alors se livrer des manipulations difficiles d'extraction de cha ne Ainsi la commande echo produira l'affichage de la variable suivi du caract re Remarque La syntaxe echo fonctionne en Korn Shell et Bourne Again Shell et shells descendants mais pas en Bourne Shell Il existe n anmoins en Bourne Shell un moyen d'acc der aux arguments sup rieurs neuf il s'agit de l'instruction shift n n tant facultativement positionn s'il n'est pas renseign Cette instruction produit un d calage des param tres vers la gauche de n positions Dans le cas de shift ou shift le contenu de dispara t pour tre remplac par celui de celui de fait de m me pour recevoir le contenu de etc jusqu' qui re oit le contenu du dixi me argument Ainsi un d calage de n param tres fait dispara tre les n premiers mais r cup re les n suivants De plus les variables et sont aussi modifi es pour correspondre la nouvelle r alit Seule la variable reste invariante Ainsi une simple boucle testant la valeur d croissante de en utilisant l'instruction shift permet d'acc der individuellement tous les arguments Remarque L'instruction shift ne d cale pas les param tres mais elle est autoris e afin de ne pas g n rer d'erreur dans un programme si par exemple la valeur qui suit le shift est issue d'un calcul il sera inutile d'aller v rifier que ce calcul ne vaut pas Exemple Script qui r cup re et affiche le er et param tres bin sh Ce script r cup re et affiche le er et param tre R cup ration des deux premiers param tres qui seront perdus apr s le shift prem sec D calage de positions pour pouvoir acc der aux et param tres shift Affichage des param tres demand s le et le ont t amen s en position et par le shift echo Les param tres sont prem sec R affectation volontaire des param tres Syntaxe set -- valeur valeur L'instruction set -- valeur valeur qui sert activer des options du Shell comme le d bug permet aussi de remplir les variables au m pris de leur ancien ventuel contenu avec les valeurs indiqu es Il y a d'abord effacement de toutes les variables puis remplissages avec les valeurs provenant du set Bien videmment les variables et sont aussi modifi es pour correspondre la nouvelle r alit Comme toujours la variable n'est pas modifi e Dans le cas o il serait n cessaire d affecter la valeur x ou toute autre valeur avec tiret il est alors n cessaire de faire suivre le set d'un double tiret -- pour viter que le Shell interpr te ce x comme une option d'activation Remarque Rien n'oblige les valeurs plac es apr s set d' tre des cha nes fig es Il est donc possible d'y inclure des variables ou des sousex cutions de commandes En revanche l'instruction set est la seule permettant de modifier les variables etc Autrement dit on ne peut pas modifier ces variables par une instruction du style valeur ou valeur Le s parateur de champs internes Syntaxe IFS cha ne Lorsque l'instruction set valeur valeur est ex cut e le Shell arrive isoler et d concat ner les diff rentes valeurs dans les diff rentes variables etc gr ce la variable d'environnement IFS Internal Field Separator en majuscules qui contient le ou les caract res devant tre utilis s pour s parer les diff rentes valeurs espace par d faut Une modification du contenu de cette variable permet d'utiliser un ou plusieurs autres caract res pour s parer des valeurs avec la commande set Remarque La variable IFS tant tr s importante pour l'analyseur syntaxique du Shell il est conseill de la sauvegarder avant de la modifier pour pouvoir la restaurer dans son tat original apr s l'avoir utilis e Exemple bin sh chaine toto titi tata Pr paration de la cha ne affecter old IFS Sauvegarde de la variable IFS IFS L'IFS devient le shell utilisera ou comme s parateur set chaine D concat nation de la cha ne suivant l'IFS IFS old R cup ration de l'ancien IFS echo Affichage du troisi me argument tata Neutralisation des m ta caract res Certains caract res alphanum riques du Shell ont une signification particuli re Exemple Essayer de faire afficher tel quel l' cran le texte encadr cidessous une toile Il a cri assez mais cela ne suffisait pas L'habit ne fait pas le moine A A B B Les probl mes rencontr s pour afficher ces quelques lignes proviennent des caract res toile parenth se ouvrante parenth se fermante guillemet pointvirgule dollar apostrophe backslashe inf rieur et sup rieur qui ont une signification sp ciale en Shell On les appelle m ta caract res m ta en grec signifie transformer parce que le Shell les transforme avant de les traiter Afin de les utiliser tels quels par le langage on est oblig d'y appliquer un m canisme de neutralisation de transformation C'est dire qu'il faut demander au Shell de ne pas les transformer en autre chose que ce qu'ils sont Rappel sur les m ta caract res Les m ta caract res suivants sont utilis s lorsque l'on d sire r f rencer un fichier sans conna tre exactement son nom M ta caract re Signification Toute cha ne de caract re m me une cha ne vide Un caract re quelconque mais pr sent xyz Tout caract re correspondant l'un de ceux contenus dans les crochets x-y Tout caract re compris entre x et y x-y Tout caract re qui n'est pas compris entre x et y Les m ta caract res suivants sont utilis s dans le Shell M ta caract re Signification Contenu d'une variable Neutralisation de certains m ta caract res plac s l'int rieur ' ' Neutralisation de tous les m ta caract res plac s l'int rieur Neutralisation de tout m ta caract re plac apr s Groupement de commandes S parateur de commande permet d'en placer plusieurs sur une ligne Redirection en entr e partir d'un fichier Redirection en entr e partir des lignes suivantes Redirection en sortie vers un fichier Redirection en sortie vers un fichier en mode ajout Redirection vers une commande pipe m moire Le backslashe Le m ta caract re backslashe a pour effet de neutraliser tout m ta caract re qui le suit quel qu'il soit Mais il n'en neutralise qu'un seul Exemple Solution avec le m ta caract re backslashe Prompt echo une toile Prompt echo Il a cri assez mais cela ne suffisait pas Prompt echo L 'habit ne fait pas le moine Prompt echo A et B A B B L'apostrophe ou quotte simple Le m ta caract re apostrophe appel aussi quotte simple a pour effet de neutraliser tous les m ta caract res situ s apr s sauf luim me Cette exception permet ainsi d'avoir un d but et une fin de zone de neutralisation Mais on ne peut pas avec cette option neutraliser le m ta caract re apostrophe puisqu'il marque la fin de la zone Et le m ta caract re backslashe qui pourrait r soudre cet inconv nient ne fonctionnera pas puisqu'il sera luim me neutralis Exemple Solution avec le m ta caract re quotte simple Prompt echo ' une toile ' Prompt echo 'Il a cri assez mais cela ne suffisait pas' Prompt Impossible d'afficher la troisi me ligne avec la quotte simple Prompt echo 'A et B A B B' Le double guillemet Le m ta caract re double guillemet a pour effet de neutraliser tous les m ta caract res situ s apr s sauf le m ta caract re dollar qui permet d'acc der au contenu d'une variable le m ta caract re accent grave qui permet la sousex cution le m ta caract re double guillemet qui permet de marquer la fin de la zone de neutralisation et le m ta caract re backslashe s'il est suivi d'un m ta caract re de la liste cidessus ce qui permet donc de neutraliser ledit m ta caract re On peut donc avec cette option neutraliser le m ta caract re double guillemet puisqu'il fait partie de la liste donc qu'il est neutralisable par le m ta caract re backslashe Exemple Solution avec le m ta caract re double guillemet Prompt echo une toile Prompt echo Il a cri assez mais cela ne suffisait pas Prompt echo L'habit ne fait pas le moine Prompt echo A et B A B B Les contr les bool ens Introduction Le Shell tant un langage il permet l'utilisation de contr les vrai faux appel s aussi bool ens Le principe est que chaque commande chaque programme ex cut par Unix donc par le Shell lui retransmet en fin d'ex cution un code de retour appel aussi code de statut La convention qui a t tablie veut que si la commande s'est bien ex cut e le code de statut ait pour valeur z ro En revanche si la commande a eu un probl me dans son ex cution pas de droit d'acc s pas de fichier diter etc son code de statut aura une valeur diff rente de z ro En effet il existe toujours plusieurs raisons qui peuvent faire qu'un programme ne s'ex cute pas ou mal en revanche il n'y a qu'une seule raison qui fait qu'il s'ex cute correctement Cette convention ayant t tablie le Shell consid rera alors un programme de statut comme tant vrai et un programme de statut diff rent de comme tant faux Gr ce cette convention l'utilisateur peut programmer de mani re bool enne en v rifiant le statut du programme qui s'est ex cut Remarque Une convention n'est jamais une obligation Rien n'emp che donc un programmeur de faire renvoyer un statut quelconque par ses programmes En retour les autres utilisateurs ou les autres scripts ne pourront jamais se fier au statut du programme en question Le statut de la derni re commande ex cut e se trouve dans la variable du processus ayant lanc la commande On peut donc visualiser facilement un r sultat vrai ou faux de la derni re commande avec la syntaxe echo Bien videmment visualiser un statut de cette mani re perd ledit statut puisque la variable prend la valeur de la derni re commande ex cut e ici echo Attention Il ne faut pas confondre affichage ce que la commande affiche l' cran et statut tat de son ex cution Une commande peut ne rien afficher mais renvoie toujours un statut Exemple Prompt cd tmp La commande n'affiche rien mais elle r ussi Prompt echo Prompt rm tmp Si on efface un r pertoire sans en avoir le droit rm - Cannot remove directory tmp Prompt echo Prompt rm tmp dev null M me si on redirige l'affichage des erreurs Prompt echo Prompt echo L'affichage pr c dant s' tant bien ex cut La commande test La commande test est une commande A ce titre test renvoie donc un statut vrai ou faux Mais cette commande n'affiche rien l' cran Il faut donc pour conna tre le r sultat d'un test v rifier le contenu de la variable La commande test a pour but de v rifier tester la validit de l'expression demand e en fonction des options choisies Elle permet ainsi de v rifier l' tat des fichiers comparer des variables etc La syntaxe g n rale d'une commande test est test expression mais elle peut aussi tre expression condition de ne pas oublier les espaces s parant l'expression des crochets Ici les crochets ne signifient pas l ment optionnel mais bien crochets Test simple sur les fichiers Syntaxe test option fichier Option Signification s fichier non-vide f fichier ordinaire d fichier r pertoire b fichier sp cial mode bloc c fichier sp cial mode caract re p fichier tube L fichier lien symbolique -h fichier lien symbolique identique -L r fichier a le droit en lecture w fichier a le droit en criture x fichier a le droit en ex cution u fichier a le setuid g fichier a le setgid k fichier a le sticky bit t n fichier n n est associ un terminal par d faut n vaut D'autres test simple sur les fichiers Korn Shell et Bourne Again Shell et shells descendants Syntaxe test option fichier Option Signification S fichier socket Korn Shell et Bourne Again Shell et shells descendants e fichier existe quel que soit son type Bourne Again Shell et shells descendants O fichier m'appartient Korn Shell et Bourne Again Shell et shells descendants G fichier appartient mon groupe Korn Shell et Bourne Again Shell et shells descendants -N fichier modifi depuis sa derni re lecture Korn Shell et Bourne Again Shell et shells descendants Test complexe sur les fichiers Korn Shell et en Bourne Again Shell et shells descendants Syntaxe test fichier option fichier Option Signification nt fichier plus r cent que fichier date de modification ot fichier plus vieux que fichier date de modification ef fichier li fichier m me num ro d'inode sur m me syst me de fichiers Test sur les longueurs de cha nes de caract res Syntaxe test option cha ne Option Signification z cha ne de longueur nulle n cha ne de longueur non nulle Test sur les cha nes de caract res Syntaxe test cha ne option cha ne Option Signification cha ne identique cha ne cha ne diff rente de cha ne Attention L'emploi des doubles guillemets dans les syntaxes faisant intervenir des cha nes est important surtout lorsque ces cha nes sont prises partir de variables En effet il est possible d' crire l'expression sans double guillemets mais si la variable est vide ou inexistante l'expression re ue par le Shell sera bancale et ne correspondra pas au sch ma attendu dans la commande test test a bonjour Si a est vide le shell voit test bonjour incorrect test a bonjour Si a est vide le shell voit test bonjour correct Test sur les num riques Syntaxe test nb option nb Option Signification eq nb gal nb equal ne nb diff rent de nb non equal lt nb inf rieur nb less than le nb inf rieur ou gal nb less or equal gt nb sup rieur nb greater than ge nb sup rieur ou gal nb greater or equal Attention Utiliser ou la place de -eq ou -ne peut produire des r sultats erron s test Renvoi faux ce qui est math matiquement incorrect test -eq Renvoi vrai correct Connecteurs d'expression Les connecteurs permettent de composer des expressions plus complexes Option Signification a ET logique o OU logique NOT logique Groupement d'expressions doit tre prot g de backslashes pour ne pas que le shell l'interpr te comme une demande de cr ation de sousshell Exemple V rifie si l'ann e courante est bissextile divisible par mais pas par ou divisible par y date ' Y' R cup re l'ann e courante dans la variable y test expr y eq a expr y ne o expr y -eq Remarque Il n'y a aucune optimisation faite par la commande test Ainsi lors d'un et m me si la premi re partie du et est fausse la seconde partie sera inutilement v rifi e De m me lors d'un ou m me si la premi re partie est vraie la seconde partie sera tout aussi inutilement v rifi e Les commandes true et false Syntaxe true false Les commandes true et false n'ont d'autre but que de renvoyer un tat respectivement vrai ou faux Ces commandes jouent le r le de commandes neutres lorsque le Shell attend une instruction alors que le programmeur n'a rien besoin de faire il peut toujours mettre l'instruction true ou bien permettent la cr ation de boucles infinies cf Chapitre sur les structures de contr les Exemple Prompt true La commande renvoi la valeur vrai Prompt echo Prompt false La commande renvoi la valeur faux Prompt echo La commande read Syntaxe read var var Cette commande a d j t vue lors de la saisie de variables Mais elle est reprise ici pour y apporter un compl ment En effet en plus de lire l'entr e standard et de remplir la ou les variables demand es avec la saisie du clavier cette commande renvoie un tat vrai quand elle a lu l'entr e standard ou faux quand l'entr e standard est vide Il est donc possible de programmer une alternative ou une boucle cf Chapitre sur les structures de contr les sur une saisie r ussie ou pas Les structures de contr les Introduction Comme tout langage volu le Shell permet des structures de contr les Ces structures sont l'alternative simple l'alternative complexe if le branchement sur cas multiples case la boucle while until for L'alternative simple Syntaxe cde cde cde cde La premi re syntaxe correspond un cde ET cde et se traduit par ex cuter la commande n ET sous entendu si celle-ci est vrai donc s'est ex cut e enti rement ex cuter la commande n La seconde syntaxe correspond un cde OU cde et se traduit par ex cuter la commande n OU sous entendu si celle-ci est faux donc ne s'est pas ex cut e enti rement ex cuter la commande n Exemple Ecrire un script affichant si on lui a pass z ro un ou plusieurs param tres Ensuite il affiche les param tres re us bin sh Script affichant si on lui passe z ro un ou plusieurs param tres Ensuite il affiche ces param tres Test sur aucun param tre test -eq echo n'a re u aucun param tre Test sur un param tre test -eq echo a re u un param tre qui est Test sur plusieurs param tres test -gt echo a re u param tres qui sont Remarque Il est possible d'encha ner les alternatives par la syntaxe cde cde cde L'inconv nient de cette syntaxe est qu'on ne peut placer qu'une commande en ex cution de l'alternative ou alors si on d sire placer plusieurs commandes on est oblig de les grouper avec des parenth ses L'alternative complexe Syntaxe if liste de commandes then commande commande else commande commande fi La structure if then else fi value toutes les commandes plac es apr s le if mais ne v rifie que le code de retour de la derni re commande de la liste Dans le cas o le programmeur voudrait placer plusieurs commandes dans la liste de commandes il doit les s parer par le caract re pointvirgule qui est un s parateur de commandes Shell Dans la pratique cette possibilit est tr s rarement utilis e un script tant plus lisible si les commandes nonv rifi es par le if sont plac es avant celuici Si l' tat de la derni re commande est vrai le Shell ira ex cuter l'ensemble des instructions plac es apr s dans le bloc then sinon il ira ex cuter l'ensemble des instructions plac es dans le bloc else si celuici existe Dans tous les cas le Shell ira ex cuter les instructions ventuellement plac es derri re le motclef fi car celuici termine le if Il est possible d'imbriquer plusieurs blocs if fi condition de placer un motclef fi pour chaque motclef if On peut se permettre de raccourcir une souscondition else if par le motclef elif Dans ce cas il n'y a plus qu'un seul fi correspondant au if initial Exemple avec des if imbriqu s bin sh echo Entrez un nombre read nb if test nb eq if n then echo C' tait z ro else if test nb eq if n then echo C' tait un else echo Autre chose fi fi n fi fi n Exemple avec des elif bin sh echo Entrez un nombre read nb if test nb eq if n then echo C' tait z ro elif test nb eq Sinon si then echo C' tait un else echo Autre chose fi fi n Le branchement choix multiple Syntaxe case chaine in val commande commande val commande commande esac La structure case esac value la cha ne en fonction des diff rents choix propos s A la premi re valeur trouv e les instructions correspondantes sont ex cut es Le double pointvirgule indique que le bloc correspondant la valeur test e se termine Il est donc obligatoire sauf si ce bloc est le dernier tre valu La cha ne et ou les valeurs de choix peuvent tre construites partir de variables ou de sousex cutions de commandes De plus les valeurs de choix peuvent utiliser les constructions suivantes Construction Signification x-y La valeur correspond tout caract re compris entre x et y xy La valeur test e correspond x ou y xx yy La valeur correspond deux caract res xx ou yy La valeur test e correspond un caract re quelconque La valeur test e correspond toute cha ne de caract res cas autre cas Exemple Script qui fait saisir un nombre et qui value ensuite s'il est pair impair compris entre et ou autre chose bin sh Script de saisie et d' valuation simple du nombre saisi Saisie du nombre echo Entrez un nombre read nb Evaluation du nombre case nb in echo nb vaut z ro echo nb est impair echo nb est pair - - echo nb est sup rieur ou gal et inf rieur echo nb est un nombre trop grand pour tre valu esac La boucle sur condition Syntaxe while liste de commandes do commande commande done until liste de commandes do commande commande done La boucle while do done ex cute une s quence de commandes tant que la derni re commande de la liste de commandes est vrai statut gal z ro La boucle until do done ex cute une s quence de commandes tant que la derni re commande de la liste de commandes est faux statut diff rent de z ro Exemple Script qui affiche tous les fichiers du r pertoire courant et qui pour chaque fichier indique si c'est un fichier de type r pertoire de type ordinaire ou d'un autre type bin sh Script d'affichage d'informations sur les fichiers du r pertoire courant La commande read lit l'entr e standard Mais cette entr e peut tre redirig e d'un pipe De plus read renvoie vrai quand elle a lu et faux quand il n'y a plus rien lire On peut donc programmer une boucle de lecture pour traiter un flot d'informations ls while read fic Tant que le read peut lire des infos provenant du ls do Evaluation du fichier trait if test d fic then echo fic est un r pertoire elif test f fic then echo fic est un fichier ordinaire else echo fic est un fichier sp cial ou lien symbolique ou pipe ou socket fi done La boucle sur liste de valeurs Syntaxe for var in valeur valeur do commande commande done La boucle for do done va boucler autant de fois qu'il existe de valeurs dans la liste A chaque tour la variable var prendra s quentiellement comme contenu la valeur suivante de la liste Les valeurs de la liste peuvent tre obtenues de diff rentes fa ons variables sousex cutions etc La syntaxe in valeur est optionnelle Dans le cas o elle est omise les valeurs sont prises dans la variable contenant les arguments pass s au programme Dans le cas o une valeur contient un m ta caract re de g n ration de nom de fichier toile point d'interrogation etc le Shell examinera alors les fichiers pr sents dans le r pertoire demand au moment de l'ex cution du script et remplacera le m ta caract re par le ou les fichiers dont le nom correspond au m ta caract re Exemple M me script que dans l'exemple pr c dent qui affiche tous les fichiers du r pertoire courant et qui pour chaque fichier indique si c'est un fichier de type r pertoire de type ordinaire ou d'un autre type mais en utilisant une boucle for bin sh Script d'affichage d'informations sur les fichiers du r pertoire courant for fic in ls Boucle sur chaque fichier affich par la commande ls do Evaluation du fichier trait if test d fic then echo fic est un r pertoire elif test f fic then echo fic est un fichier ordinaire else echo fic est un fichier sp cial ou lien symbolique ou pipe ou socket fi done Remarque Ce script pr sente un l ger bug d l'emploi de la boucle for En effet le for utilise l'espace pour s parer ses l ments les uns des autres Il s'ensuit que si un fichier poss de un espace dans son nom le for s parera ce nom en deux parties qu'il traitera dans deux it rations distinctes et la variable fic prendra alors comme valeurs successives les deux parties du nom Ce bug n'existe pas avec l'emploi de la structure ls while read fic car le read lit la valeur jusqu' la fin de ligne Interruption d'une ou plusieurs boucles Syntaxe break n continue n L'instruction break n va faire sortir le programme de la boucle num ro n par d faut L'instruction passera directement apr s le done correspondant cette boucle L'instruction continue n va faire repasser le programme l'it ration suivante de la boucle num ro n par d faut Dans le cas d'une boucle while ou until le programme repassera l' valuation de la condition Dans le cas d'une boucle for le programme passera la valeur suivante La num rotation des boucles s'effectue partir de la boucle la plus proche de l'instruction break ou continue qu'on num rote Chaque boucle englobant la pr c dente se voit affecter un num ro incr mental Le programmeur peut choisir de sauter directement sur la boucle num rot e n en mettant la valeur n derri re l'instruction break ou continue Remarques L'utilisation de ces instructions est contraire la philosophie de la programmation structur e Il incombe donc chaque programmeur de toujours r fl chir au bien fond de leurs mises en application Contrairement aux croyances populaires la structure if fi n'est pas une boucle Exemple Script qui fasse saisir un nom et un ge Mais il contr le que l' ge soit celui d'un majeur et soit valide entre et ans Ensuite il inscrit ces informations dans un fichier La saisie s'arr te sur un nom vide o un ge bin sh Script de saisie de contr le et d'enregistrement d'un nom et d'un ge while true Boucle infinie do Saisie du nom et sortie sur nom vide echo Entrez un nom read nom test z nom break Sortie de la boucle infinie si nom vide Saisie et contr le de l' ge while true Saisie en boucle infinie do echo Entrez un ge read age test age eq break Sortie de la boucle infinie si age test age ge a age lt break Sortie de la boucle de saisie si age correct done Enregistrement des informations dans un fichier infos dat echo Nom nom Age age infos dat done Interruption d'un programme Syntaxe exit n L'instruction exit n met imm diatement fin au Shell dans lequel cette instruction est ex cut e Le param tre n facultatif qui vaut par d faut ne peut pas d passer Ce param tre sera r cup r dans la variable du processus ayant appel ce script processus p re Cette instruction exit peut donc rendre un script vrai ou faux selon les conventions du Shell Remarque M me sans instruction exit un script Shell renvoie toujours au processus p re un tat qui est la valeur de la variable lorsque le script se termine tat de la derni re commande du script Le g n rateur de menus en boucle Korn Shell et Bourne Again Shell et shells descendants Syntaxe select var in cha ne cha ne do commande commande done La structure select do done proposera l'utilisateur un menu pr num rot commen ant A chaque num ro sera associ une cha ne prise s quentiellement dans les cha nes de la liste Il lui sera aussi propos de saisir un des num ros du menu le prompt de saisie provenant de la variable PS Apr s la saisie la cha ne correspondant au num ro choisi sera stock e dans la variable var pendant que la valeur du num ro choisi sera stock dans la variable interne REPLY Il appartient alors au programmeur d' valuer correctement l'une de ces deux variables if fi ou case esac pour la suite de son programme Dans le cas o l'utilisateur choisit un num ro qui n'est pas dans la liste la variable var recevra alors une cha ne vide mais le num ro choisi sera quand-m me stock dans la variable REPLY Cependant la variable de statut n'est pas modifi e par ce choix erron Comme pour la boucle for les valeurs de la liste peuvent tre obtenues de diff rentes fa ons variables sousex cutions etc La syntaxe in cha ne est optionnelle Dans le cas o elle est omise les valeurs sont prises dans la variable contenant les arguments pass s au programme ou la fonction Dans le cas o une valeur contient un m ta caract re de g n ration de nom de fichier toile point d'interrogation etc le Shell examinera alors les fichiers pr sents dans le r pertoire de travail au moment de l'ex cution du script et remplacera le m ta caract re par le ou les fichiers dont le nom correspondants au m ta caract re Remarque La phase menu choix se d roule en boucle infinie Il est donc n cessaire de programmer l'interruption de la boucle sur une valeur particuli re de la variable var ou de la variable REPLY en utilisant une des instructions break return ou exit Les fonctions Introduction Syntaxe nom de fonction commande commande nom de fonction Une fonction permet de regrouper des instructions fr quemment employ es dans un ensemble identifi par un nom Ce nom utilis ensuite dans le script comme toute autre commande Unix ex cutera l'ensemble des instructions contenues dans la fonction Une fois le corps de la fonction cr il n'y a aucune diff rence entre appeler une fonction et appeler une commande Unix Leur nom est soumis aux m mes imp ratifs que les noms de variables une suite de caract res commen ant imp rativement par une lettre ou le caract re soulign ou underscore et comportant ensuite des lettres des chiffres ou le caract re soulign Exemple Une fonction qui affiche la date puis un ls bin sh Fonction qui affiche la date puis fait un ls newls date Affichage de la date ls -l Affichage du ls Utilisation de la fonction newls Appel de la fonction var newls R cup ration de ce que la fonction affiche Utilisation d'une commande Unix ls -l Appel de la commande classique ls -l var ls -l R cup ration de ce que la commande ls -l affiche Il n'y a aucune diff rence syntaxique entre l'utilisation d'une fonction ou d'une commande Passage de valeurs Syntaxe nom de fonction echo nom de fonction param tre param tre Comme pour un script Shell une fonction peut avoir besoin de valeurs nonconnues l'avance De la m me mani re ces valeurs lui seront pass es comme argument ou param tre lors de l'appel de la fonction qui les r cup rera dans les variables bien connues premier param tre second param tre etc Il faut bien comprendre que m me si leur r le est analogue il y a diff renciation compl te entre le contenu des variables etc du corps de la fonction et le contenu des variables etc du programme principal Dans le programme principal ces variables font r f rences aux valeurs pass es depuis l'ext rieur du script vers le script dans le corps de la fonction ces variables font r f rences aux valeurs pass es depuis l'ext rieur de la fonction vers la fonction Seule exception reste invariante en conservant toujours le nom du script Exemple Une fonction qui affiche si la valeur qu'elle re oit est paire ou impaire bin sh Fonction qui affiche la parit d'une valeur pair impair test expr -eq echo est pair echo est impair Pour chaque nombre pass au programme for nb in do V rification de la parit de ce nombre pair impair nb done Retour de fonction Syntaxe nom de fonction return n nom de fonction echo L'instruction return n met imm diatement fin l'ex cution de la fonction Le param tre n facultatif vaut par d faut mais ne peut pas d passer Il correspond au statut de la fonction et est de ce fait retransmis la variable du programme ayant appel cette fonction Cette instruction peut donc rendre une fonction vrai ou faux selon les conventions du Shell On peut faire un parall le entre l'instruction return qui sert interrompre l'ex cution d'une fonction en faisant remonter une valeur de l'int rieur vers l'ext rieur de la fonction et l'instruction exit qui sert interrompre l'ex cution d'un script en faisant remonter une valeur de l'int rieur vers l'ext rieur d'un script Exemple Une fonction qui renvoie vrai ou faux si la valeur qu'elle re oit est paire ou impaire bin sh Fonction qui teste la parit d'une valeur pair impair test expr -eq return return Pour chaque nombre pass au programme for nb in do V rification de la parit de ce nombre if pair impair nb then echo nb est pair else echo nb est impair fi done Renvoi d'une valeur par une fonction Syntaxe nom de fonction echo valeur var nom de fonction echo var Il ne faut pas confondre la notion de retour de fonction en Shell et la notion de valeur renvoy e par une fonction telle qu'on l'entend dans d'autres langages comme le C ou le PASCAL En effet en Shell cette notion de valeur renvoy e ne peut tre que simul e par l'utilisation d'un affichage unique et final dans la fonction ce qui permet au programmeur de r cup rer dans une variable ce que la fonction affiche en utilisant les accents graves bien connu du m canisme de la sousex cution Exemple Une fonction qui renvoie le carr du nombre qu'elle re oit bin sh Fonction qui renvoie le carr du nombre qu'elle re oit carre Affichage du carr du nombre re u expr Pour chaque nombre pass au programme for nb in do R cup ration du carr de ce nombre result carre nb Affichage ou autre traitement quel qu'il soit de ce r sultat echo Le carr de nb vaut result done Port e des variables Il n'y a pas recopie de variable pour une fonction Autrement dit modifier une variable dans une fonction r percute la modification dans tout le script En effet comme il n'y a pas de notion de pointeur en Shell c'est le seul moyen de pouvoir faire modifier une variable par une fonction Malheureusement cela peut produire des effets de bord difficilement d celables si le programmeur ne fait pas attention Cependant l'instruction local employ lors de la cr ation de la variable a pour effet d'isoler les modifications apport es la variable la fonction dans laquelle la variable est modifi e Cet effet est d finitif pour la variable dans toute la fonction Exemple Une fonction qui modifie deux variables une globale et une locale bin sh Fonction qui modifie deux variables modif i Modification de la variable globale i local j La variable j est rendue locale - La modification est locale j La variable j reste locale - La modification reste locale echo Fonction i i j j Affichage de i et j dans la fonction Programme principal i j Initialisation de i et j echo i i j j Affichage de i et j avant l'appel modif Appel de la fonction echo i i j j Affichage de i et de j apr s l'appel j n'a pas chang Dans le cas o toutes les variables doivent tre locales et que rajouter l'instruction local semble fastidieux sans compter qu'un oubli est toujours possible une astuce simple pour transformer d'un coup toutes les variables en local consiste isoler le corps de la fonction avec des parenth ses ce qui a pour effet de faire cr er un sousshell dans lequel la fonction pourra travailler mais dans lequel les variables modifi es ne seront pas r percut es au niveau du shell parent Exemple Une fonction qui modifie deux variables mais la seconde est modifi e dans un sousshell bin sh Fonction qui modifie deux variables une dans le shell et l'autre dans un sous-shell modif i Modification de i dans le shell principalt Cr ation d'un sous-shell j Modification de j dans le sous-shell echo Fonction i i j j Affichage de i et j dans le sous-shell Fin du sous-shell La modif de j est perdue Programme principal i j Initialisation de i et j echo i i j j Affichage de i et j avant l'appel modif Appel de la fonction echo i i j j Affichage de i et de j apr s l'appel j n'a pas chang Remarque Toute fonction ayant donc toujours connaissance de toute variable cr e par l'appelant le choix est laiss au programmeur soit de transmettre une variable une fonction comme il lui transmettrait n'importe quelle valeur qu'elle r cup rera dans etc soit de laisser la fonction utiliser naturellement les variables du script par leurs noms Les deux solutions ont chacune leurs avantages et leurs inconv nients Imbrication de fonctions Il est tout fait possible d'int grer la cr ation d'une fonction en plein milieu du code principal du programme Mais pour qu'une fonction soit ex cutable son identificateur doit d'abord tre connu avoir t lu par le Shell La lecture d'un script se faisant s quentiellement il s'ensuit qu'une fonction ne sera ex cutable que lorsque l'interpr teur du Shell sera pass par le nom de la fonction et seulement s'il passe par la partie du code contenant le nom Exemple Une fonction int gr e au milieu d'un script bin sh D but du script - La fonction n'est pas encore connue echo D but du script Ecriture de la fonction - En passant ici le shell prend connaissance de l'existence de la fonction fonction echo Fonction Suite du script - La fonction est maintenant connue et utilisable echo Suite du script fonction Exemple Une fonction qui ne sera connue que si une condition est v rifi e bin sh Si la condition est v rifi e if test go then Ecriture de la fonction - S'il passe ici le Shell prendra connaissance de son existence fonction echo Fonction fi Suite du script Si la condition n'a pas t v rifi e la fonction ne sera pas connue et son appel provoquera une erreur fonction Exemple Une fonction interne qui ne sera connue que si une autre fonction externe est appel e bin sh Ecriture de la fonction externe externe echo Fonction externe Ecriture de la fonction interne qui ne sera connue que si la fonction externe est appel e interne echo Fonction interne Suite du script Ici la fonction interne n'est pas connue - Son appel provoquera une erreur Cependant la fonction externe est connue et son appel rendra fonction interne connue externe Maintenant la fonction interne est connue et peut tre appel e interne Exemple Une fonction interne qui ne sera connue que dans une autre fonction externe bin sh Ecriture de la fonction externe externe echo Fonction externe Cr ation d'un sous-shell Ecriture de la fonction interne qui ne sera connue que du sous-shell interne echo Fonction interne Ici la fonction interne est connue et peut tre appel e interne Fin du sous-shell Ici la fonction interne n'est pas connue - Son appel provoquera une erreur Suite du script Ici la fonction interne n'est pas connue - Son appel provoquera une erreur Appel de la fonction externe externe Ici la fonction interne n'est toujours pas connue - Son appel provoquera toujours une erreur A partir de l il est possible de d composer un probl me en une multitude d'op rations l mentaires chacune d'elles ex cut e par une fonction qui lui est d volue ce qui est d'ailleurs le principe d'une fonction Les fonctions pourront s'appeler mutuellement et m me de fa on imbriqu es A appelle B qui appelle A pour peu que chacune d'elles soit connue du Shell au moment de son appel Il est cependant recommand pour une bonne maintenance et une bonne lisibilit de commencer un script par l' criture de toutes les fonctions qu'il sera amen utiliser sans complication inutile telles que ces exemples ont montr La trace de l'appelant Syntaxe caller num L'instruction caller qui doit obligatoirement tre plac e dans une fonction donne des informations sur l'appelant de la fonction nom du script fonction appelante n de ligne de l'appel Le num ro indique l'incr ment apporter au niveau que l'on veut remonter pour remonter un niveau pour remonter deux niveaux pour remonter trois niveaux etc Exemple Une fonction de niveau qui indique la hi rarchie de ses appelants bin sh Fonction de niveau fct Appel fonction de niveau fct Fonction de niveau fct Appel fonction de niveau fct Fonction de niveau fct Informations sur les diff rents appelants caller Appelant imm diat fct caller Appelant niveau au dessus de l'appelant imm diat fct caller Appelant niveaux au dessus de l'appelant imm diat programme caller Appelant niveaux au dessus de l'appelant imm diat il n'y en a pas Corps du programme principal Appel de la fonction de base fct Informations sur les diff rents appelants caller Appelant imm diat il n'y en a pas car on est dans le programme principal Les instructions avanc es L'inclusion de script dans un script Syntaxe source fic fic L'instruction source permet d'importer un fichier l'endroit o la commande est ex cut le fichier import venant remplacer la ligne contenant la commande Les habitu s du langage C reconna tront l'effet provoqu par la directive include Ceci est utile dans les situations o de multiples scripts utilisent un fichier de donn es communes ou une biblioth que de fonctions L'instruction point est un synonyme de l'instruction source Exemple Un script qui se charge lui-m me n fois bin sh Nb limite de chargements pris dans s'il existe sinon pris par d faut limite - Initialisation compteur s'il n'existe pas cpt cpt - Incr ment et affichage du compteur cpt expr cpt echo cpt cpt Si le compteur n'a pas atteint la limite on importe le script ici test cpt -lt limite source Tout le script est int gralement recopi sous la ligne courante Et tout recommence l'identique la partie du code qui suit est une illustration du comportement bin sh trait ici comme un commentaire car il ne se trouve pas en re ligne Nb limite de chargements pris dans s'il existe sinon pris par d faut limite - La variable est r initialis e avec qui n'a pas chang Initialisation compteur s'il n'existe pas cpt cpt - Le compteur est r initialis avec sa valeur pr c dente Incr ment et affichage du compteur cpt expr cpt echo cpt cpt Si le compteur n'a pas atteint la limite on importe le script ici test cpt -lt limite source Tout le script est int gralement recopi sous la ligne courante Et tout recommence l'identique encore et encore La protection contre les signaux Syntaxe trap -l -p commande - no signal nom signal L'instruction trap permet de prot ger un script contre un signal cf Gestion des processus Par d faut tout script en ex cution recevant un signal quelconque depuis le clavier par CTRL-C ou depuis l'ext rieur par kill s'arr te L'instruction trap permet de remplacer ce comportement en demandant le lancement d'une commande particuli re d s r ception d'un signal sig ou ventuellement d'un signal sig Le signal intercepter peut tre repr sent par son n ou par son nom Ce genre d'instruction permet un script de programmer le nettoyage de ses fichiers de travail temporaires en cas d'arr t brutal Quelques d tails Mettre une cha ne vide comme commande inhibe totalement le signal concern Mettre un soulign - ou ne rien mettre du tout comme commande restaure le comportement par d faut interruption du script L'option -l liste les signaux disponibles avec leurs noms tout comme la commande kill avec l'option -l L'option -p liste les signaux qui ont t inhib s avec la commande qui leurs sont associ s Le signal SIGKILL ne peut pas tre d tourn ni inhib Exemple Un script qui est prot g contre l'interruption CTRL-C bin sh Fonction qui sera appel e lors d'un CTRL-C protect echo Il est interdit d'arr ter ce script avant sa fin naturelle Corps du programme principal Mise en place de la protection contre le CTRL-C trap protect SIGINT On peut crire aussi trap protect Mise en place d'un compteur limite cpt Tant que le compteur n'a pas atteint sa limite while test cpt -lt limite do Incr ment et affichage du compteur cpt expr cpt echo cpt cpt Petite tempo pour laisser le temps de taper CTRL-C sleep done Transformer une expression en ordre Shell Syntaxe eval arguments L'instruction eval va interpr ter les arguments et faire ex cuter le r sultat comme commande par le Shell Le premier mot des arguments doit donc tre une commande valide L'utilisation de l'instruction eval sert surtout cr er une indirection de variable et simuler ainsi un pointeur puisque il y a deux fois interpr tation une fois par la commande eval et une fois par le Shell Exemple Prompt couleur bleu Prompt ptr couleur Prompt eval echo ptr Evaluation de la ligne echo couleur Affichera bleu Arithm tique sur les variables Korn Shell et Bourne Again Shell et shells descendants Syntaxe let expression L'instruction let qui n'est disponible que dans les shells r cents permet de r aliser des op rations arithm tiques sur des variables va interpr ter les arguments et faire ex cuter le r sultat comme commande par le Shell Le premier mot des arguments doit donc tre une commande valide L'utilisation de l'instruction eval sert surtout cr er une indirection de variable et simuler ainsi un pointeur puisque il y a deux fois interpr tation une fois par la commande eval et une fois par le Shell Exemple Prompt let a Identique l'instruction a Prompt let a a Fait passer a Prompt let a Equivalent l'instruction let a a Cr er de nouveaux canaux d'entr es sorties Syntaxe exec x fichier exec y fichier commande quelconque de lecture x commande quelconque d' criture y L'instruction exec va modifier un canal existant ou cr er un nouveau canal num rot associ un fichier Ce canal pourra tre en entr e ou en sortie selon le signe utilis Le num ro est au choix du programmeur mais doit imp rativement tre sup rieur s'il ne d sire pas perdre ses canaux standards Ensuite il sera possible de rediriger le canal d'entr e standard partir du canal entrant nouvellement cr Les informations demand es par le programme seront alors directement lues depuis le fichier correspondant De-m me il sera possible de rediriger le canal de sortie standard ou de sorties d'erreurs vers le canal sortant nouvellement cr Les informations affich es par le programme seront alors directement enregistr es dans le fichier correspondant Exemple Ecriture d'un script lisant en parall le les fichier etc passwd et etc group bin sh Script qui lit en parall le les fichiers etc passwd et etc group Chargement des fichiers dans les tampons num rot s et exec etc passwd exec etc group Boucle infinie while true do Lecture des deux fichiers partir des tampons num rot s read passwd read group Si les deux variables sont vides sortie de boucle test z passwd a z group break Affichage de chaque variable non-vide test n passwd echo passwd passwd test n group echo group group done Remarque Il est tout fait possible d'utiliser les n et en param tre de exec Dans ce cas le n utilis perd son association initiale clavier ou cran pour tre remplac par la nouvelle association fichier G rer les options Syntaxe getopts liste de caract res variable L'instruction getopts permet de programmer un script Shell pouvant recevoir des options Exemple Essayer de cr er un script essai sh pouvant tre appel de plusieurs fa ons Prompt essai sh toto Pas d'option et un param tre Prompt essai sh a b toto Deux options distinctes et un param tre Prompt essai sh ab toto Deux options crites en raccourci et un param tre Prompt essai sh g toto Une option avec valeur associ e et un param tre On s'aper oit rapidement que si on veut programmer essai sh de fa on g rer tous les cas possibles cela va conduire une programmation lourde et difficile avec des extractions et manipulations de cha nes et de param tres L'instruction getopts simplifie grandement le travail car elle g re ellem me toutes les fa ons possibles de demander une option avec ou sans valeur associ e Il faut simplement se rappeler que les options se demandent toujours avant les param tres du script L'instruction n'a besoin que de conna tre les caract res indiquant les options attendues et d'une variable o stocker l'option effectivement trouv e Dans le cas o une option aurait besoin d'une valeur associ e on fait suivre le caract re correspondant ladite option du caract re deux points Si l'option est effectivement demand e avec la valeur qui lui est associ e cette valeur sera alors stock e dans la variable interne OPTARG qui est sp cifique getopts L'instruction getopts ne r cup rant que la premi re option demand e par l'utilisateur il est n cessaire de l'inclure dans une boucle while do done pour lui faire traiter toutes les options du script getopts renvoyant un statut diff rent de faux quand il n'y a plus d'option traiter A chaque option trouv e il suffit de positionner une ou plusieurs variables personnelles qu'on pourra utiliser par la suite De plus la variable sp cifique OPTIND tant incr ment e chaque fois que getopts est invoqu e y compris la derni re o getopts renvoie faux il est possible de d caler les param tres du script avec un shift de OPTIND pour liminer les options et placer le premier param tre utile en variable Plus tard dans le script on peut r utiliser les variables positionn es lors de la boucle d'analyse des options pour traiter le fait qu'une option a t ou pas demand e En cas d'option non pr vue dans la liste l'instruction getopts affiche un message d'erreur l' cran Cet affichage peut tre inhib en faisant pr c der la liste des options possibles du caract re deux points Et enfin l'instruction getopts arr te son traitement d s qu'elle rencontre deux - tirets accol s ce qui permet l'utilisateur de faire traiter comme argument et non comme option une valeur avec un tiret un nombre n gatif par exemple Exemple Ecriture d'un script pouvant recevoir les options a et b sans valeur associ e une fois c avec valeur associ e et plusieurs fois d avec valeurs associ es bin sh Script qui traite plusieurs options et qui affiche ce qu'il a analys Options possibles -a -b -c val -d val -d val R cup ration de chaque option du script while getopts abc d opt do Analyse de l'option re ue case opt in a M morisation option a trouv e opt A true b M morisation option b trouv e opt B true c M morisation option c trouv e et m morisation de sa valeur opt C true val C OPTARG d M morisation option d trouv e et concat nation de sa valeur opt D true val D val D OPTARG echo Usage basename -a -b -c val -d val -d val fic exit esac done D calage des param tres pour placer le premier argument non-optionnel en shift expr OPTIND Affichage du r sultat de l'analyse test n opt A echo L'option A a t demand e test n opt B echo L'option B a t demand e test n opt C echo L'option C a t demand e avec la valeur val C test n opt D echo L'option D a t demand e avec les valeurs val D Affichage du reste des param tres s'il y en a test -ne echo Il reste encore param tres qui sont echo Il n'y a plus de param tre Les compl ments Le chapitre pr c dent marquait la fin de l'apprentissage du Shell de base Il reste n anmoins un certain manque dans le langage comme incr menter une variable dans les shells anciens r cup rer des informations dans un fichier etc Tous ces manques ont t combl s par les nombreux programmeurs du monde Unix par la cr ation de diverses commandes r pondants aux besoins les plus courants Voici une description de quelques commandes utiles liste non exhaustive Attention il est possible que les plus r centes ne soient pas encore pr sentes sur tous les Unix Evaluer des expressions r guli res avec la commande expr Elle r pond beaucoup de besoins dans l'analyse des expressions r guli res Avant d'examiner les possibilit s de cette commande on va d'abord parler de son statut d'ex cution car il reste ind pendant du but de l'emploi de la commande Statut de la commande si l'expression est valide si la valeur que expr affiche n'est pas le statut vaut si la valeur que expr affiche est le statut vaut si l'expression est invalide le statut vaut une autre valeur en g n ral il vaut Remarque Cette commande ne peut pas tre utilis e comme bool en vrai faux puisqu'elle ne respecte pas les conventions du Shell et qu'il la consid rera comme faux lorsqu'elle aura renvoy alors qu'elle s'est parfaitement bien d roul e Mais rien n'emp che d'analyser en d tail la valeur de son statut Arithm tique Syntaxe expr op rande op rateur op rande op rateur op rande La commande va r aliser l'op ration math matique demand e sur les op rateurs cit s et afficher le r sultat sur la sortie standard l' cran Les op randes ne peuvent tre que des nombres entiers et le r sultat de l'op ration sera lui aussi sous forme d'un nombre entier La priorit math matique des op rateurs est respect e multiplication division et modulo prioritaires sur addition et soustraction Voici leur symbolique addition - soustraction multiplication attention l' toile est un m ta caract re Shell donc il doit tre neutralis division euclidienne ou enti re modulo qui correspond au reste d'une division enti re Exemple Incr menter une variable pouvant jouer le r le d'un compteur Prompt i Affectation initiale Prompt i expr i Utilisation du r sultat de la commande Prompt echo i Affichage final Comparaison Syntaxe expr op rande comparaison op rande La commande expr va r aliser la comparaison math matique demand e sur les op rateurs cit s et afficher le r sultat sur la sortie standard l' cran Les op rateurs ne peuvent tre que des nombres entiers et le r sultat de la comparaison sera si la comparaison est faux si elle est vrai Les comparaisons possibles sont gal diff rent strictement inf rieur attention le signe inf rieur doit est un m ta caract re et doit tre prot g inf rieur ou gal attention le signe inf rieur est un m ta caract re et doit tre prot g strictement sup rieur attention le signe sup rieur est un m ta caract re et doit tre prot g sup rieur ou gal attention le signe sup rieur est un m ta caract re et doit tre prot g Travail sur cha nes de caract res Syntaxe expr cha ne argument La commande expr va indiquer si la cha ne demand e d bute par l'argument indiqu Si c'est le cas la commande affichera soit le nombre de caract res de la cha ne qui correspondent la totalit de l'argument la partie de l'argument demand s'il a t mis entre parenth ses Exemples Prompt expr abcd f affiche abcd ne commence pas par f Prompt expr abcd a affiche abcd commence par a Prompt expr abcd ab affiche abcd commence par ab Prompt expr abcd a bc affiche bc abcd commence par abc et bc est entre parenth ses Prompt expr abcd abcde affiche abcd ne commence pas par abcde Prompt expr abcd affiche m ta caract re permettant d'avoir la longueur de la cha ne Rechercher des cha nes avec la commande grep Syntaxe grep option expression fichier La commande grep Global Regular Expression Printer permet d'extraire et d'afficher toutes les lignes contenant l'expression demand e Les lignes sont prises dans l'entr e standard clavier mais peuvent tres cherch es dans un ou plusieurs fichiers L'expression chercher peut tre une simple cha ne de caract res ou bien compos e de m ta caract res sp cifiques la commande grep qui sont accent circonflexe plac en d but d'expression il indique grep de ne chercher l'expression qu'en d but de chaque ligne dollar plac en fin d'expression il indique grep de ne chercher l'expression qu'en fin de ligne point il permet de repr senter un caract re quelconque mais non nul dans l'expression toile il indique que le caract re pr c dent peut se trouver entre z ro et un nombre infini de fois accolades x y elles permettent de sp cifier que le caract re pr c dent doit tre pr sent entre x et y fois crochets ils permettent de sp cifier des ensembles de caract res recherch s Les options modifient le fonctionnement de la commande ne pas tenir compte des majuscules n'afficher que le nom des fichiers contenant l'expression n'afficher que le nombre de lignes contenant l'expression etc D'autres commandes similaires existent fgrep fast grep plus rapide en ex cution mais ne permettant pas l'utilisation de m ta caract res dans l'expression chercher egrep ehanced grep largit les possibilit s de recherche en donnant acc s d'autres m ta caract res pour sp cifier l'expression awk utilise un script de programmation dans son propre langage ressemblant beaucoup au langage C pour traiter les donn es entrantes selon l'algorithme programm par l'utilisateur Statut de la commande si la commande trouve l'expression demand e elle affiche au moins une ligne le statut est si la commande ne trouve pas l'expression demand e rien n'est affich le statut est diff rent de en g n ral il vaut Exemple Prompt cat etc passwd grep root Extraction partir de l'entr e standard Prompt grep root etc passwd Extraction partir d'un fichier D couper des lignes avec la commande cut Syntaxe cut fn dc s fichier cut cn fichier La commande cut couper est un filtre vertical qui s lectionne le ni me champ option f comme field ou le ni me caract re option c de chaque ligne Les lignes sont prises dans l'entr e standard clavier mais peuvent tres cherch es dans un ou plusieurs fichiers Les champs de l'option f sont d coup s suivant le caract re tabulation Ce r glage par d faut peut tre chang en mettant l'option d pour sp cifier le caract re de s paration de champs d limiteur Il peut alors tre demand d'ignorer les lignes ne contenant pas le d limiteur sp cifi avec l'option s Statut de la commande toujours sauf en cas d'erreur de syntaxe Exemple Prompt cat etc passwd cut f - d Extraction des champs de chaque ligne Prompt cut f d etc passwd Extraction des champs et de chaque ligne Trier les informations avec la commande sort Syntaxe sort n r o output k pos tc fichier La commande sort va trier les lignes de fa on alphab tiquement croissante pour les afficher l' cran Les lignes sont prises dans l'entr e standard clavier mais peuvent tres cherch es dans un ou plusieurs fichiers Le tri peut tre invers option r les lignes tri es sur plusieurs champs option k le d limiteur de champs peut tre sp cifi option t et le contenu des champs peut tre consid r comme tant des nombres option n Enfin il est possible de sp cifier le fichier dans lequel sera crit le r sultat du tri option o ce qui permet de demander trier un fichier et le r crire sur luim me ce qui n'est pas possible avec un pipe Statut de la commande toujours sauf en cas d'erreur de syntaxe Exemple Prompt cat etc passwd sort k n t Tri num rique sur le i me champ Prompt sort r k t etc passwd o etc passwd Tri invers et r criture Filtrer les informations avec la commande sed Syntaxe sed e script e script f fichier script fichier La commande sed Stream Editor est un diteur de flux Elle permet de filtrer un flux de donn es au travers d'un ou plusieurs scripts bas s sur l' diteur ed ex s x y g remplace chaque x par un y pour chaque ligne pour avoir en sortie un flux de donn es modifi es Le script peut tre pris dans la ligne de commande option e ou dans un fichier externe option f L' diteur ed a t l' diteur de base qui a donn naissance l' diteur vi Statut de la commande toujours sauf en cas d'erreur de syntaxe Exemple Prompt cat etc passwd sed e root d Suppression de ligne Prompt sed e s root toro g e s home hm g etc passwd Double substitution Transformer les informations avec la commande tr Syntaxe tr c s d cha ne cha ne La commande tr va transposer l'entr e standard o chaque caract re correspondant un de ceux de la cha ne sera transform en caract re pris dans la cha ne Il est possible de demander la suppression de chaque caract re de la cha ne option d d' liminer les caract res r p t s option s et de compl tion option c Statut de la commande toujours sauf en cas d'erreur de syntaxe Exemple Prompt cat etc passwd tr a-z A-Z Transposition minuscules en majuscules Compter les octets avec la commande wc Syntaxe wc c l w fichier La commande wc Word Count va compter le nombre de lignes de mots et de caract res de l'entr e standard ou du fichier pass en param tre Il est possible de ne demander que le nombres de lignes option l le nombre de mots option w ou le nombre de caract res option c Statut de la commande toujours sauf en cas d'erreur de syntaxe Exemple Prompt echo LOGNAME wc c Affichera le nombres de caract res de la variable Afficher une s quence de nombres avec la commande seq Syntaxe seq option dernier seq option premier dernier seq option premier incr ment dernier La commande seq s quence permet d'afficher les nombres entiers situ s entre deux intervalles de fa on croissante ou d croissante avec possibilit d'avoir un incr ment particulier Statut de la commande toujours sauf en cas d'erreur de syntaxe Afficher des donn es format es avec la commande printf Syntaxe printf format arguments La commande printf reprise partir de la fonction printf du C permet d'afficher les arguments au format demand Statut de la commande toujours sauf en cas d'erreur de syntaxe D couper les noms avec les commandes basename et dirname Syntaxe basename argument extension dirname argument Les commandes basename et dirname ont pour but d'afficher respectivement le nom de base de l'argument demand le nom qui suit le dernier de l'argument ou le nom du r pertoire toute l'arborescence pr c dent le dernier de l'argument Dans le cas de basename si l'argument poss de une extension gif c etc il est possible de demander la commande d'enlever cette extension en indiquant l'extension enlever Statut de la commande toujours sauf en cas d'erreur de syntaxe Exemple Prompt rep pwd R cup re le r pertoire courant dans la variable rep Prompt basename rep Donnera le nom de base de la variable rep Prompt dirname rep Donnera le nom du r pertoire p re de la variable rep Filtrer les arguments avec la commande xargs Syntaxe xargs dc commande arguments commande La commande xargs est un filtre qui sert passer un grand nombre d'arguments une commande qui ne peut en accepter qu'un petit nombre Il constitue une bonne alternative aux guillemets invers s dans les situations o cette criture choue avec une erreur too many arguments Cette commande va recevoir en entr e les arguments traiter et les d coupera en morceaux suffisemments petits pour que la commande cit e puisse les traiter Les arguments sont d coup s suivant le caract re espace ou tabulation Ce r glage par d faut peut tre chang en mettant l'option d pour sp cifier le caract re de s paration des arguments d limiteur Statut de la commande toujours sauf en cas d'erreur de syntaxe Exemple Prompt grep -l toto ls Recherche toto dans les fichiers donn s par ls sh bin grep Too many arguments grep ne peut pas traiter autant de fichiers Prompt ls xargs grep -l toto xargs d coupera le ls pour le grep Math matiques en virgule flottante avec la commande bc Syntaxe bc l La commande bc Basic Calculator permet d'effectuer des calculs math matiques comme la commande expr mais la commande conna t quelques fonctions math matiques comme racine carr e logarithme etc Les calculs se font depuis l'entr e standard et se font en valeurs enti res sauf si on demande le calcul au format long option l Statut de la commande toujours sauf en cas d'erreur de syntaxe Exemple Prompt echo bc l Affichera le r sultat de l'op ration G rer les options avec la commande getopt Syntaxe getopt liste de caract res arguments La commande getopt correspond en externe l'instruction interne getopts et permet la gestion et la r organisation des param tres L'utilisation de la commande getopt est similaire l'instruction getopts Le programmeur doit lui indiquer les caract res indiquant les options attendues et les arguments o se trouvent les options traiter Dans le cas o une option aurait besoin d'une valeur associ e il fait suivre le caract re correspondant ladite option du caract re deux points Cependant contrairement l'instruction getopts la commande getopt se contente de reformater proprement les options trouv es une option apr s l'autre et renvoie cette suite l' cran Donc afin de pouvoir traiter les options dans un script il est n cessaire de r cup rer le r sultat de getopt en utilisant les accents graves bien connu du m canisme de la sousex cution Dans le cas o une option a besoin d' tre associ e une valeur cette valeur est plac e en argument suivant l'option laquelle elle est associ e D s que l'ensemble des options est trait c'est- -dire d s que la commande getopt trouve une option qui ne correspond pas une option attendue ou d s qu'elle ne trouve plus d'options la commande affiche deux tirets - et affiche le reste des arguments non trait s En cas d'option non pr vue dans la liste la commande getopt affiche un message d'erreur l' cran Cet affichage peut tre inhib en faisant pr c der la liste des options possibles du caract re deux points Et enfin la commande getopt arr te son traitement d s qu'elle rencontre deux - tirets accol s ce qui permet l'utilisateur de faire traiter comme argument et non comme option une valeur avec un tiret un nombre n gatif par exemple Statut de la commande si la commande ne trouve pas d'option invalide dans les param tres du script le statut est si la commande trouve une option invalide dans les param tres du script le statut est diff rent de en g n ral il vaut Exemple Ecriture d'un script pouvant recevoir les options a et b sans valeur associ e une fois c avec valeur associ e et plusieurs fois d avec valeurs associ es bin sh Script qui traite plusieurs options et qui affiche ce qu'il a analys Options possibles -a -b -c val -d val -d val R organisation des options du script dans la variable opt opt getopt abc d statut Si une option invalide a t trouv e if test statut -ne then echo Usage basename -a -b -c val -d val -d val fic exit statut fi Traitement de chaque option du script set -- opt Remarquez la protection des options via le double tiret -- while true do Analyse de l'option re ue - Chaque option sera effac e ensuite via un shift case in -a M morisation option a trouv e opt A true shift -b M morisation option b trouv e opt B true shift -c M morisation option c trouv e et m morisation de sa valeur opt C true shift val C shift -d M morisation option d trouv e et concat nation de sa valeur opt D true shift val D val D shift -- Fin des options - Sortie de boucle shift break esac done Affichage du r sultat de l'analyse test n opt A echo L'option A a t demand e test n opt B echo L'option B a t demand e test n opt C echo L'option C a t demand e avec la valeur val C test n opt D echo L'option D a t demand e avec les valeurs val D Affichage du reste des param tres s'il y en a test -ne echo Il reste encore param tres qui sont echo Il n'y a plus de param tre G rer son affichage l' cran avec les codes Escape Syntaxe echo code particulier tput argument tput L'utilisation de certains codes appel s codes Escape permet d'influer sur l'affichage de l' cran Ces codes portent ce nom car ils sont tous pr c d s du caract re Esc en octal Bien souvent ces codes varient en fonction de l' cran que l'on veut g rer c'est pourquoi il vaut mieux utiliser la commande tput qui envoie elle-m me les codes appropri s en fonction de l' cran utilis Il vous est propos ici une liste non-exhaustive de certains codes avec leur signification Codes chappements Commande TPUT Signification echo J tput clear efface l cran echo m tput smso aucun attribut blanc sur noir echo m gras echo m souligne echo m tput blink clignote echo m tput rmso vid o inverse echo m invisible echo m noire avant plan echo m rouge echo m vert echo m jaune echo m bleu echo m magenta echo m cyan echo m blanc echo m noire arri re plan echo m rouge echo m vert echo m jaune echo m bleu echo m magenta echo m cyan echo m blanc echo A d place le curseur de ligne en haut echo B d place le curseur de ligne en bas echo C d place le curseur de colonne droite echo D d place le curseur de colonne gauche echo s sauvegarde la position du curseur echo u restaure la position du curseur echo K efface la ligne courante echo lig colH c positionne le curseur en lig - col echo r echo r echo h r initialise les attributs d finit une fen tre lig active la fen tre echo r d sactive la fen tre echo B mode texte echo mode graphique Exemples divers Afficher une phrase sans que le curseur passe la ligne suivante La commande echo poss de l'option n qui permet de ne pas aller la ligne en fin d'affichage Malheureusement cette option n'est pas pr sente sur tous les Unix Cet exemple simple et portable permet d'avoir une invite de saisie sans retour la ligne en fin de phrase Prompt echo Phrase quelconque awk ' printf s ' V rifier l'existence d'un fichier quel que soit son type La commande test permet de tester l'existence de fichiers comportant certaines caract ristiques fichier classique r pertoire vide nonvide etc Mais l'option e qui permet de tester la seule existence d'un fichier quel que soit son type n'existe pas en Bourne Shell bin ksh Programme qui affiche si le fichier demand existe ou n'existe pas en Korn Shell Usage prog fichier test -e echo Le fichier existe echo Le fichier n'existe pas Cependant il y a la commande ls qui en plus de lister le fichier renvoie un statut vrai faux si le fichier demand existe ou n'existe pas Il suffit de rediriger tout son affichage normal et erreurs vers le fichier poubelle dev null pour s'en servir comme simple contr le pour v rifier l'existence du fichier list bin sh Programme qui affiche si le fichier demand existe ou n'existe pas en Bourne Shell Usage prog fichier ls -d dev null dev null echo Le fichier existe echo Le fichier n'existe pas V rifier la num ricit d'une variable en terme de nombre entier En demandant la commande expr de faire un calcul simple sur une variable on peut v rifier si le calcul r ussit ou pas si la variable en question est ou n'est pas num rique bin sh Programme qui v rifie si son argument est ou n'est pas num rique entier Usage prog cha ne Essai de calcul sur l'argument et r cup ration du code de retour expr dev null dev null statut V rification de la r ussite du calcul test statut -lt echo L'argument est un nombre echo L'argument n'est pas un nombre V rifier la num ricit d'une variable en terme de nombre r el La commande expr ne travaille qu'en nombre entiers et ne peut donc pas v rifier si une variable est ou n'est pas un nombre r el Un des moyens propos s ici sera pour v rifier qu'un argument est bien un nombre r el de supprimer chacun de ses chiffres le point ventuel et le premier - du signe n gatif et de regarder s'il reste quelque chose bin sh Programme qui v rifie si son argument est ou n'est pas num rique r el Usage prog cha ne Suppression du signe moins ventuellement au d but du premier point et de chaque chiffre verif echo sed -e s - -e s -e s - g Si le r sultat est vide c'est que c' tait un nombre correct test z verif echo L'argument est un nombre echo L'argument n'est pas un nombre Nom de base du r pertoire courant Ce script affiche le nom de base du r pertoire dans lequel on est positionn bin sh Programme qui affiche le dernier nom du r pertoire courant nom de base Usage prog Cas particulier verification si le r pertoire courant est if test pwd then echo exit fi M morisation variable IFS oldifs IFS Configuration variable IFS sur le s parateur IFS Eclatement du r pertoire courant dans les variables set pwd Remise en place variable IFS et effacement variable de m morisation IFS inutile IFS oldifs unset oldifs D calage du nb d'argument - et affichage param tre qui est devenu le dernier nom shift expr - echo Remarque Tout ce script peut tre avantageusement remplac par basename pwd V rification de l'autorisation d'acc s d'un utilisateur quelconque Ce script v rifie si les noms qu'on lui passe en param tres sont autoris s se connecter sur la machine ou non Pour ceux qui sont autoris s il donne les informations diverses sur l'utilisateur uid gid commentaire home puis il affiche s'ils sont effectivement connect s bin sh Programme qui affiche si les utilisateurs existent ou pas et connect s ou pas Usage prog user user Boucle sur chaque argument pass au programme for user in do R cup ration de la ligne concernant l'utilisateur dans etc passwd lig grep user etc passwd statut V rification si le grep a trouv if test statut -eq On peut aussi faire if test -n lig then R cup rations informations sur l'utilisateur uid echo lig cut -f -d gid echo lig cut -f -d comment echo lig cut -f -d home echo lig cut -f -d Recherche de la ligne concernant le gid dans etc group lig grep gid etc group statut V rification si le grep a trouv if test statut -eq then R cup rations informations sur le groupe utilisateur groupe echo lig cut -f -d else Le gid n'est pas dans etc group groupe inconnu fi Recherche si l'utilisateur est connect who fgrep user dev null connect oui connect non Affichage des informations trouv es echo user est autoris se connecter sur uname -n echo Uid uid echo Gid gid groupe echo Commentaire comment echo Home home echo Connect en ce moment connect else echo user n'est pas autoris sur uname -n fi Saut de ligne avant de passer l'utilisateur suivant echo done Membres d'un groupe Ce script affiche les utilisateurs membres du groupe qu'on lui passe en argument et s'ils sont connect s ou non bin sh Programme qui donne la liste des membres d'un groupe et les connect s Usage prog groupe group Boucle sur chaque groupe pass au programme for groupe do echo Membres du groupe groupe R cup ration ligne contenant le groupe demand dans etc group ligne grep groupe etc group statut Si recherche r ussie groupe existe if test statut -eq then Extraction du gid champ de la ligne gid echo ligne cut -f -d D coupage de etc passwd sur les champs et pour enlever les champs parasites Extraction des lignes contenant le gid trouv D coupage de cette extraction sur le premier champ Tri de cette extraction Boucle sur chaque nom de ce tri cut -f -d etc passwd grep gid cut -f -d sort while read user do Si l'utilisateur est pr sent dans la commande who who fgrep user dev null connect connect connect non connect ' Affichage de l'utilisateur et de son tat connect non connect echo User user connect done fi echo done Serveurs g r s par inetd Ce script affiche les informations sur le serveur qu'on lui passe en argument si celui-ci est g r par le superserveur inetd bin sh Programme qui donne des informations sur les serveurs g r s par inetd Usage prog serveur serveur Remarque Ce script ne fonctionne pas sous Linux qui utilise xinetd tr s diff rent de inetd Programme Pour chaque serveur demand for serveur in do V rification serveur pr sent dans etc inetd conf if grep serveur etc inetd conf dev null then Traitement lignes contenant serveur dans etc services et non en commentaire grep -v etc services grep serveur while read lig do D concat nation de la ligne set lig R cup ration et limination deux premi res info nom port echo cut -f -d proto echo cut -f -d shift V rification serveur est dans nom ou aliases unset trouve for rech in nom do if test rech serveur then trouve non vide Ou n importe quelle chaine break fi done Si serveur pr sent if test -n trouve then echo Serveur nom echo Port port echo Protocole proto test -n echo Aliases echo fi done else echo Serveur serveur non g r par inetd echo fi done Recherche d'une commande Ce script permet de trouver l'endroit exact de toute commande Unix connue de celui qui le lance Il d coupe le PATH de l'utilisateur et v rifie si la commande demand e se trouve dans un des r pertoires de recherche bin sh Programme qui recherche un fichier par rapport au PATH Usage prog file file R cup ration des arguments pass s au programme car ils vont tre cras s arg D composition du PATH par rapport au s parateur oldifs IFS IFS set PATH Ici on crase les arguments pass s au programme IFS oldifs unset oldifs Boucle sur chaque argument for file in arg do On indique par d faut que le fichier n'est pas trouv unset trouve Boucle sur chaque r pertoire du PATH for rep in do V rification si rep contient fichier non vide et ex cutable if test -f rep file -a -s rep file -a -x rep file then On a trouv ls -l rep file trouve non vide Ou n importe quelle chaine Plus la peine de tester les autres r pertoires break Facultatif fi done S'il n'a rien trouv test -z trouve echo no file in done Arborescence d'un r pertoire Ce script affiche le contenu des r pertoires qu'on lui passe en argument sous forme d'arborescence correspond la commande tree du DOS bin sh Programme qui affiche les r pertoires sous forme d'arborescence tree DOS Usage prog fic fic Fonction d'affichage d'un texte pr c d de n tabulations Param tres entr e nb de tabulations texte afficher Valeur sortie aucune affiche tabul Cr ation d'un sous-shell pour isoler le contexte R cup ration du nb de tabulations - On supprime tab shift Affichage du texte pr c d des tabulations en utilisant awk echo awk -vtab tab ' for i i tab i printf t printf s n ' Fonction arborescence fonction r cursive Param tres entr e nom de fichier profondeur facultatif Valeur sortie aucune tree r Cr ation d'un sous-shell pour isoler le contexte R cup ration profondeur si elle existe prof - Affichage de l'argument avec autant de tabulations que profondeur affiche tabul prof Si argument r pertoire et pas lien symbolique if test -d -a -L then De nouveau cr ation d'un sous-shell pour isoler de nouveau le contexte D placement dans ce r pertoire seul ce contexte se d place cd Pour chaque fichier de ce r pertoire ls - while read file do Fonction r cursive sur ce fichier avec profondeur incr ment e tree r file expr prof done Fin du sous-shell - Le contexte actuel n'a pas chang de r pertoire fi Programme Boucle sur chaque fichier pass au programme

Related Downloads
Explore
Post your homework questions and get free online help from our incredible volunteers
  1230 People Browsing
Your Opinion
Which industry do you think artificial intelligence (AI) will impact the most?
Votes: 352