Projet

Général

Profil

Petit precis de shell » Historique » Version 5

« Précédent - Version 5/61 (diff) - Suivant » - Version actuelle
Julien Enselme, 01/08/2013 18:50
Valeurs de retour des commandes et exception


{{toc}}

Le shell est un langage assez particulier qu'on ne connait pas forcément en arrivant à centrale et qu'on a pas forcément l'occasion de beaucoup pratiquer. Le but de ce document est de rappeler les quelques bases du langage et de fournir quelques solutions standard à des problèmes courants afin que le nouveau membre du club drupal ne soit pas désemparé et puisse comprendre les scripts. Il ne se veut en aucun cas un cours/tuto complet et exaustif.

h1. Quelques rappels d'Unix

Le langage shell est le langage de script qui vient par défaut avec tous les Unix. En effet, même si désormais d'autres interpréteurs plus modernes sont désormais répandus (bash, csh, zsh, etc.), ils ont tous conservé la compatibilité avec le shell.

Comme pour la plupart des langages de script, il existe deux façons d'exécuter des instructions shell :

  • directement dans l'interpréteur
  • dans un script shell

Pour lancer un interpréteur shell, rien de plus simple : lancer un terminal (graphique ou tty). Et oui, le shell comprend toutes les commandes Unix que vous avez vues en début d'année (pwd, cd, cp). Vous pouvez donc les réutiliser telles quelles dans vos scripts et utiliser son bon terminal pour faire des boucles, des conditions et j'en passe.

h1. Les bases du shell

Il est très important de comprendre et de garder à l'esprit qu'en shell tout est :

  • chaîne de caractères (y compris les nombres) ! Entrez @echo 1 + 1@ dans le terminal pour vous en convaincre.
  • commande et que donc elles peuvent prendre des arguments (cela s'éclaircira plus tard)

h2. Syntaxe de base

Les commandes s'écrivent soit :

  • les unes à la suite des autres séparées par ; (peu reocmmandé)
  • séparées les unes des autres par un saut de ligne

Chaque commande peut prendre des arguments de deux types :

  • les arguments courts (l, r, h pour @ls@ par exemple) qui sont passés comme suit : @CMD -ARG@
  • les arguments longs (recursive pour @rsync@ par exemple) qui se passent comme ceci : @CMD --ARGUMENT@

Il est évidement possible de passer plusieurs arguments à une même commande.

Certains arguments existent sous une forme courte et une forme longue. Consulter le manuel de la commande pour plus de détails. Le manuel conteint également la liste complète des arguments supportés par une commande.

Certains commandes ne respectent pas la convention énoncée ce-dessus. Leurs arguments long se passent avec un seul - (find en est un exemple)

h2. Valeurs de retour des commandes et exception

Une fois qu'une commande s'est exécutée, elle renvoie une valeur de retour afin "d'informer" l'utilisateur. Cette valeur permet en effet de savoir si la command s'est exécutée correctement. Voici les valeurs de retour possibles et leur signification :

  • 0 : tout va bien
  • 1 : erreur
  • 2 : erreur grave

Vous pouvez vous aussi utiliser ces valeurs de retour. Par défaut, un script qui se complète correctement retourne 0. Mais vous pouvez (par exemple si un utilisateur tente d'exécuter un script qui nécessite un argumenet sans) retourner un autre code d'erreur avec la commnde @exit@. Il suffit de lui passer le code qu'elle doit retourner. Votre script s'arrêtera alors avec le code d'erreur spécifié.

h2. Conditions et itérations