Systèmes Répartis La programmation "Shell" UNIX Station UNIX Station Edition Oc

Systèmes Répartis La programmation "Shell" UNIX Station UNIX Station Edition October OO ESAT 1/41 Systèmes Répartis La programmation "Shell" UNIX Station SOMMAIRE I) INTRODUCTION______________________________________________________________________________4 1) PRÉSENTATION_________________________________________________________________________________4 2) REMARQUES__________________________________________________________________________________7 3) CONVENTIONS DU SUPPORT DE COURS_________________________________________________________________7 II) ELÉMENTS DE BASE DU LANGAGE___________________________________________________________8 4) LES COMMENTAIRES_____________________________________________________________________________8 5) QUI ANALYSE ?________________________________________________________________________________8 6) LE DÉBOGUEUR________________________________________________________________________________8 III) LES VARIABLES____________________________________________________________________________9 1) L'AFFECTATION – L'ACCÈS________________________________________________________________________9 2) LA SUBSTITUTION______________________________________________________________________________10 3) LA SAISIE EN INTERACTIF_________________________________________________________________________11 4) LA PROTECTION_______________________________________________________________________________11 5) LA SUPPRESSION______________________________________________________________________________11 6) LA VISIBILITÉ________________________________________________________________________________12 7) LES VARIABLES PRÉDÉFINIES______________________________________________________________________13 IV) LA "SOUS-EXÉCUTION"____________________________________________________________________14 V) LES PARAMÈTRES__________________________________________________________________________15 1) RÉCUPÉRATION DES PARAMÈTRES___________________________________________________________________15 2) DÉCALAGE DES PARAMÈTRES______________________________________________________________________16 3) RÉ AFFECTATION VOLONTAIRE DES PARAMÈTRES_________________________________________________________17 4) LE SÉPARATEUR DE CHAMPS INTERNES________________________________________________________________18 VI) NEUTRALISATION DES MÉTACARACTÈRES________________________________________________19 1) RAPPEL SUR LES MÉTA CARACTÈRES_________________________________________________________________19 2) LE "BACKSLASH"______________________________________________________________________________20 3) L'APOSTROPHE OU "QUOTTE SIMPLE"_________________________________________________________________20 4) LE DOUBLE GUILLEMET__________________________________________________________________________20 VII) LES CONTRÔLES BOOLÉENS______________________________________________________________21 1) INTRODUCTION________________________________________________________________________________21 2) LA COMMANDE "TEST"__________________________________________________________________________22 a) Test simple sur les fichiers...................................................................................................................................22 b) Test complexe sur les fichiers (uniquement en "Korn Shell" et en "Bourne again Shell")..................................22 c) Test sur les longueurs de chaînes de caractères..................................................................................................23 d) Test sur les chaînes de caractères........................................................................................................................23 e) Test sur les numériques........................................................................................................................................23 f) Connecteurs d'expression......................................................................................................................................23 VIII) LES STRUCTURES DE CONTRÔLES________________________________________________________24 1) INTRODUCTION________________________________________________________________________________24 2) L'ALTERNATIVE SIMPLE__________________________________________________________________________24 3) L'ALTERNATIVE COMPLEXE_______________________________________________________________________25 4) LE BRANCHEMENT À CHOIX MULTIPLE________________________________________________________________26 5) LA BOUCLE SUR CONDITION_______________________________________________________________________27 6) LES COMMANDES "TRUE" ET "FALSE"________________________________________________________________27 7) LA BOUCLE SUR LISTE DE VALEURS__________________________________________________________________28 8) INTERRUPTION D'UNE OU PLUSIEURS BOUCLES__________________________________________________________29 9) INTERRUPTION D'UN PROGRAMME___________________________________________________________________30 10) LE GÉNÉRATEUR DE MENUS EN BOUCLE ("KORN SHELL" ET "BOURNE AGAIN SHELL")_____________________________30 IX) LES FONCTIONS___________________________________________________________________________31 1) INTRODUCTION________________________________________________________________________________31 2) PASSAGE DE VALEURS___________________________________________________________________________32 Edition October OO ESAT 2/41 Systèmes Répartis La programmation "Shell" UNIX Station 3) RETOUR DE FONCTION___________________________________________________________________________32 X) LES COMPLÉMENTS________________________________________________________________________33 1) LA COMMANDE "EXPR"__________________________________________________________________________33 a) Arithmétique.........................................................................................................................................................33 b) Comparaison........................................................................................................................................................34 c) Travail sur chaînes de caractères........................................................................................................................34 2) LA COMMANDE "GREP"__________________________________________________________________________35 3) LA COMMANDE "CUT"__________________________________________________________________________36 4) LA COMMANDE "SORT"__________________________________________________________________________36 5) LA COMMANDE "SED"___________________________________________________________________________37 6) LA COMMANDE "TR"___________________________________________________________________________37 7) LA COMMANDE "WC"___________________________________________________________________________38 8) LA COMMANDE "EVAL"__________________________________________________________________________38 9) LA GESTION DE L'ÉCRAN (CODES "ESCAPE")___________________________________________________________39 Edition October OO ESAT 3/41 Systèmes Répartis La programmation "Shell" UNIX Station I) 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", par opposition au "noyau". 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'a qu'une valeur d'exemple. De par sa qualité de "programme externe", il n'est pas unique. En effet, rien n'empêche n'importe quel programmeur débutant de programmer une boucle qui attend une chaîne au clavier, l'analyse et appelle ensuite le système pour exécuter la demande. 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, terminaison automatique de mots, etc.) 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 1) 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 : [PROMPT1] date Tue Jan 16 17:26:50 NFT 2001 [PROMPT1] pwd /tmp [PROMPT1] if test "5" = "5" [PROMPT2] then [PROMPT2] echo "oui" [PROMPT2] else [PROMPT2] echo "non" [PROMPT2] fi oui Edition October OO ESAT 4/41 Systèmes Répartis La programmation "Shell" UNIX Station 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 "PATH"). Toutes les commandes inscrites dans le fichier texte seront exécutées séquentiellement. Exemple : Lancement de l'éditeur [PROMPT1] vi prog Mise à jour du droit d'exécution [PROMPT1] chmod a+x prog Exécution du script pris dans le répertoire courant [PROMPT1] ./prog Tue Jan 16 17:26:50 NFT 2001 /tmp oui Contenu du script "prog" : date pwd if test "5" = "5" then echo "oui" else echo "non" fi Edition October OO ESAT 5/41 Remarque : L'adjonction du droit "x" n'est pas obligatoire, mais l'utilisateur devra alors spécifier au système quel programme Unix (quel Shell) a la charge d'interpréter le "source" écrit. Exemple : L'utilisateur demande d'interpréter le script par l'intermédiaier du "Bourne Shell" C:> sh prog Tue Jan 16 17:26:50 NFT 2001 /tmp oui Exemple : L'utilisateur demande d'interpréter le script par l'intermédiaier du "Korn Shell" C:> ksh prog Tue Jan 16 17:26:50 NFT 2001 /tmp oui 2) Remarques 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 perdre en rapidité d'exécution, il y a très peu de règles d'analyse. Cela implique un 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 un programme "Unix" (ex : date) un script "Shell" (ex : ./prog) une commande interne du langage (ex : if…) Exemple : C:> echosalut sh: echosalut: not found C:> echo salut salut 3) 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, un 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 "C:>" ou "D:>" présente dans les exemples de ce cours est une "invite" ; appelée aussi "prompt". C'est une chaîne affichée par l'ordinateur afin d'indiquer à l'utilisateur 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 mieux comprendre le fonctionnement de l'exemple. Les syntaxes présentes en début de paragraphe donnent la syntaxe exacte d'une commande. Elles sont donc donné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". Les points de suspension "…" signifient que l'élément placé devant peut être répété autant de fois que l'on désire. II)ELÉMENTS DE BASE DU LANGAGE 4) 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 des instructions suivies de commentaires. Il ne faut pas oublier alors l'espace séparant le dernier mot "utile" de la ligne du caractère dièse. Exemple : # Ce programme affiche la date date # Cette ligne est la ligne qui affiche la date 5) Qui analyse ? Rappelons qu'il existe plusieurs shells. Et chacun possède des caractéristiques différentes. Et 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 C Shell. Or, Unix cherche à assurer la portabilité de ses programmes. Il est donc nécessaire dans un script Shell d'indiquer au système 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 uploads/Industriel/ unxprogram-shell.pdf

  • 19
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager