Introduction aux Scripts Shell
Écrit par VieuxProf   
01-01-1999

  • Un script est un fichier exécutable par le shell qui contient des commandes externes UNIX, des commandes internes du shell et des commentaires. Ce n'est pas un binaire mais le fichier source ASCII qui sera interprété par le shell. Il est donc portable.
  • Le script se comporte comme l'entrée standard du shell qui l'exécute. Si le shell détecte une erreur, il arrête la lecture et affiche le numéro de la ligne qui a provoqué l'erreur. Le shell père exécute le script dans un shell fils qui hérite de l'environnement du shell courant mais n'a pas d'influence sur l'environnement du shell père.
  • La structure d'un script est généralement la suivante :
    1. signal du démarrage (echo commence ici)
    2. réalisation de la tâche
    3. suppression des fichiers temporaires
    4. signal de fin (echo finit ici)
  • Le caractère # permet d'insérer des commentaires. Le caractère #! en début de script spécifie le shell à utiliser (ex : #! /bin/sh).
  • Un script peut être exécuté par l'une des procédures suivantes :
    $ /bin/sh monscript (lance monscript dans un shell donné, droits r suffisants)
    $ sh < monscript (redirige l'entrée standard vers monscript)
    $ chmod u+x monscript; ./monscript (lance monscript comme une commande à partir du répertoire courant, droits x nécessaires)
    $ chmod u+x monscript; monscript (lance monscript comme une commande si variable PATH correctement définie)
    $ . monscript (lance monscript à partir du shell courant).

  • Le shell réalise les opérations dans l'ordre suivant :
    1. décomposition des lignes en mots (parsing)
    2. remplacement des aliases
    3. remplacement des variables par leur valeur
    4. remplacement des commandes par leur résultat
    5. expansion des noms de fichiers (jokers)
  • L'activation ou désactivation du mode trace est réalisée par la commande interne 'set' pour les commandes générales.
    Pour les scripts, le mode trace s'active par la commande 'set' ou en indiquant les options sur la ligne de commandes au lancement du shell fils.

     

    set -x/set +x active/désactive l'affichage des étapes de substitution avant exécution
    set -v/set +v active/désactive l'affichage de la ligne telle qu'elle est dans le script avant exécution
    set -xv affiche la commande telle qu'elle est écrite dans le script, le résultat de l'interprétation et le résultat de l'exécution
    set -n/set +n active/désactive la vérification de syntaxe
    set -e active/désactive l'arrêt d'exécution du script en cas d'erreur (code retour différent de 0)
    set - désactive les options x et v

     

  • La commande 'echo' affiche des messages sur la sortie standard (voir section "Commandes"). C'est une commande interne du shell qui possède 2 implémentations en commandes externes (/bin/echo, /bin/posix/echo). Elle est très utile pour le débuggage.
  • La commande 'print' (ksh) affiche également des messages sur la sortie standard mais est une commande interne au shell sans implémentation externe.



  • Le comportement du shell peut être modifié par des options activées ou désactivées par la commande interne 'set' ou en indiquant les options au lancement du shell fils :

     

    sh -o option monscript/sh +o option monscript lance monscript en activant/désactivant l'option 'option'
    set -o affiche l'état des options (on/off)
    set -o option/set +o option active/désactive l'option 'option' dans le shell courant

     

  • Les principales options sont :

     

    ignoreeof interdit/autorise la déconnexion par ctrl-D
    noclobber interdit/autorise l'écrasement d'un fichier avec >
    vi, emacs active/désactive l'édition de commandes en mode vi ou emacs
    nounset génère une erreur quand on utilise une variable non définie
    noglob désactive/active l'interprétation des jokers

     

Dernière mise à jour : ( 02-02-2008 )