19/10/2017 Scripts http://www.tuteurs.ens.fr/unix/shell/script.html 1/9 Tuteurs
19/10/2017 Scripts http://www.tuteurs.ens.fr/unix/shell/script.html 1/9 Tuteurs informatique Nous contacter Utiliser ce site Actu et stages Docs à imprimer Plan du site Rechercher Les tuteurs Unix Shell Boucles Commandes Entrée/sortie Fonctions Présentation Scripts Tests Variables Serveur des élèves ENS SPI Programmation de scripts en shell Créer un script Écrire un script Rendre un script exécutable Le chemin d'une commande Principes généraux des scripts shell Une succession de commandes Commentaires Lignes blanches L'impératif de lisibilité Un script qui parle : la commande echo Hello World ! La commande echo Un script qui écoute : la commande read Lire plusieurs variables Appuyer sur Entrée pour continuer Poursuivre l'apprentissage de la programmation shell Un shell, quel qu'il soit, peut exécuter des commandes prises dans un fichier. Un fichier contenant des commandes pour le shell est appelé un script. C'est en fait un programme écrit dans le langage du shell. Ce langage comprend non seulement les commandes que nous avons déjà vues, mais aussi des structures de contrôle (constructions conditionnelles et boucles). Pour la programmation du shell, nous allons utiliser le shell sh, qui est le plus répandu et standard. Ce que nous avons vu jusqu'ici s'applique aussi bien à sh qu'à zsh et aussi à csh, à quelques exceptions près, que nous vous signalerons en temps voulu. Créer un script Écrire un script Un script shell est un fichier en mode texte. C'est-à-dire que ce n'est pas un fichier binaire, exécutable directement par la machine, mais il doit être interprété. L'interprétation d'un script L'interprétation signifie que chaque commande contenue dans un script doit être lue par un programme, appelé interpréteur (et non interprète, bizarrement) ; l'interpréteur analyse chaque commande du script et la traduit « à la volée » en langage machine, ce qui permet l'exécution du script. On oppose l'interprétation à la compilation, dans laquelle le programme est traduit une fois pour toutes en langage machine, quel que soit le nombre de ses exécutions ; tandis que le programme interprété est traduit à la volée pour chacune de ses exécutions. Par exemple, le langage C est un langage compilé. 19/10/2017 Scripts http://www.tuteurs.ens.fr/unix/shell/script.html 2/9 Dans le cas des scripts shell, l'interpréteur, c'est le shell lui-même. Dans d'autres langages, comme le Perl, l'interpréteur est un programme indépendant du shell. L'édition d'un script Un script étant un fichier en mode texte, il doit être créé avec un éditeur de texte. Un éditeur de texte est un programme dont la fonction est... d'éditer du texte. Pour savoir plus à leur sujet, consultez les pages sur les éditeurs. Mais quel éditeur choisir ? Tout d'abord, il faut savoir que n'importe quel éditeur est capable d'ouvrir et d'écrire des scripts shell, et vous pouvez tout à fait modifier avec n'importe quel éditeur de texte ce que vous avez écrit avec n'importe quel autre. Mais il faut savoir aussi que certains éditeurs de texte sont plus appropriés que d'autres à l'écriture de scripts shell. Par exemple, nano permet d'éditer des scripts comme tout autre éditeur, mais quand un script fait plus d'une dizaine de lignes, on commence à s'y perdre un peu. À l'inverse, emacs et vim offrent quelques fonctionnalités qui deviennent rapidement indispensables : 1. l'indentation ; 2. la coloration syntaxique. L'indentation L'indentation consiste à « aérer » votre texte selon sa construction logique. C'est très utile, en particulier, quand on a un script qui ressemble à ceci : #!/bin/bash # Fichier "vote-nir" echo "Êtes-vous favorable au remplacement du NIR par le VIR ?" select opinion in Pour Contre do case $opinion in # Laisser passer ceux qui répondent correctement à la question "Pour"|"Contre") break;; # Au cas où des zozos tapent sur autre chose que 1 ou 2 *) continue;; esac done # M'envoyer le résultat par mail echo "$opinion" | mail bourdieu Même (surtout) si vous ne comprenez pas ce que tout cela veut dire, vous conviendrez que ce n'est pas très lisible. Comparez donc avec ceci : #!/bin/bash # Fichier "vote-nir" echo "Êtes-vous favorable au remplacement du NIR par le VIR ?" select opinion in Pour Contre do case $opinion in # Laisser passer ceux qui répondent correctement à la question "Pour"|"Contre") break;; # Au cas où des zozos tapent sur autre chose que 1 ou 2 *) continue;; esac done 19/10/2017 Scripts http://www.tuteurs.ens.fr/unix/shell/script.html 3/9 # M'envoyer le résultat par mail echo "$opinion" | mail bourdieu Les deux scripts sont interprétés exactement de la même façon : l'interpréteur ignore les espaces et les lignes vides. Mais avec l'indentation, on perçoit immédiatement (en tout cas, beaucoup plus vite) la structure logique du script. La coloration syntaxique Les éditeurs comme emacs et vim analysent automatiquement le statut des différents mots et symboles que vous tapez et les colorent logiquement. Par exemple, avec emacs, vous pouvez avoir : les commentaires en rouge ; les noms de commande en bleu foncé ; les noms d'arguments en vert ; les noms de variables en jaune ; les instructions liées aux boucles en bleu clair ; etc. Ça n'a l'air de rien, dit comme cela, mais comparez vous-même et vous verrez que ces outils sont indispensables, et que l'on y gagne au moins la moitié du temps d'écriture et de débugage. Apprendre emacs ou vim Apprenez donc, si ce n'est pas déjà le cas, les commandes de base d'emacs ou de vim, ce sont des outils quasi incontournables au programmeur shell, surtout débutant. Heureusement, les tuteurs vous ont concocté des pages d'initiation : le tutorial emacs et le tutorial vim. Vous hésitez entre emacs et vim ? Tout le monde est passé par là. Jetez un coup d'œil à chacun des deux, puis concentrez-vous sur celui qui vous paraît le plus sympathique et le plus pratique ; et si vous hésitez encore, tirez-en un au sort, ils se valent vraiment. Rendre un script exécutable Pour que le shell sache comment l'interpréter, un script shell doit commencer par la ligne: #!/bin/sh Il doit aussi avoir être exécutable (bit x). Le #!/bin/sh sur la première ligne indique que ce script doit être exécuté par le shell sh dont on indique le chemin d'accès. Pour rendre un fichier exécutable, tapez : chaland ~ chmod u+x fichier (pour en savoir plus sur les droits attachés à un fichier, consultez la page sur les droits d'accès). Le chemin d'une commande Pour comprendre ce qui suit, vous devez savoir ce qu'est le PATH. Si ce n'est pas le cas, lisez la présentation du shell. Quand vous exécutez un script, vous pouvez vous trouver à n'importe quel endroit de l'arborescence de vos répertoires. Si le répertoire courant ne se situe pas 19/10/2017 Scripts http://www.tuteurs.ens.fr/unix/shell/script.html 4/9 dans votre PATH et que vous voulez exécuter un programme qui s'y trouve, vous ne pouvez pas taper : clipper ~ commande car si le répertoire courant n'est pas dans le PATH, le shell n'ira pas y chercher commande. Vous recevrez donc un message comme : clipper ~ commande zsh: command not found: commande Spécifier le chemin d'une commande Pour que le shell comprenne où chercher votre commande, il faut donc spécifier l'emplacement de la commande en donnant son chemin, qu'il soit absolu : clipper ~ /home/toto/repertoire/courant/commande ou relatif : clipper ~ repertoire/courant/commande ou encore sous la forme : clipper ~/repertoire/courant ./commande Le répertoire ~/bin Il y a un certain nombre de commandes que l'on peut vouloir utiliser depuis n'importe quel répertoire. Dans ce cas, il est fastidieux de : devoir se rappeler dans quel répertoire se trouve chacune d'entre elles ; devoir taper à chaque fois le chemin de la commande. Il suffit donc de mettre tous vos scripts dans un même répertoire, et de mettre ce répertoire dans le PATH. Par convention, ce répertoire s'appelle bin et se place dans votre répertoire personnel. Si votre répertoire personnel est /home/toto, ce répertoire sera donc /home/toto/bin. Commencez donc par créer ce répertoire : clipper ~ mkdir bin Ensuite, vérifiez qu'il soit bien dans votre PATH : clipper ~ echo $PATH Si vous voyez par exemple $HOME/bin dans votre PATH, alors c'est bon, tous les fichiers exécutables situés dans ce répertoire seront accessibles depuis n'importe quel répertoire. Si ce n'est pas le cas, il faut ajouter ce répertoire au PATH. Pour cela, ajoutez dans le fichier de configuration de votre shell, par exemple le fichier .zshrc, la ligne : PATH=$PATH:$HOME/bin Cette ligne indique que la prochaine fois que vous ouvrirez votre shell, le répertoire bin figurera dans votre PATH. Principes généraux des scripts shell 19/10/2017 Scripts http://www.tuteurs.ens.fr/unix/shell/script.html 5/9 Une succession de commandes Si vous manipulez déjà le shell en ligne de commande, vous pouvez commencer vos premiers scripts. Un script shell est en effet avant tout une succession de commandes. Par exemple, si vous avez coutume de taper successivement, quand vous vous loguez à l'ENS : clipper ~ mozilla & clipper ~ mutt vous pouvez vous créer le script suivant dans le fichier ~/bin/amorce : #!/bin/sh mozilla & mutt Ainsi, dès que vous vous connectez, vous pouvez taper amorce dans le shell, et vos commandes s'exécuteront automatiquement. Commentaires Presque tous les langages informatiques autorisent d'insérer des uploads/Industriel/ 01-scripts.pdf
Documents similaires










-
25
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Dec 15, 2021
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.2776MB