On 09/21/2017 04:55 PM, David Martin wrote: > Bonjour, > > Je ne sais pas faire, et je me demandais si vous aviez un exemple de script > à me montrer qui fait du controle d'erreur à son exécution s'il vous plait ? > > J'ai trouvé un post sur le net, mais avec un exemple ça irai peut etre mieux. > > ;-) > > Je prends vos conseils sinon >
Bonsoir David, Une méthode assez simple et efficace pour limiter la casse en cas d'erreur avec Bash consiste tout simplement exécuter les scripts avec l'option "-e". Vous pouvez commencer n'importe quel script Bash comme suit : #!/bin/bash set -e Dès l'instant où une commande du script renvoie un code d'erreur, soit une valeur différente de 0 (qui peut être consultée via la variable $? après exécution d'une commande), le script s'arrête en renvoyant lui-même ce code d'erreur. Ceci reste vrai tant que le script n'a pas prévu un traitement de l'erreur pour une commande donnée. Pour traiter un tel cas d'erreur vous avez plusieurs options : 1. Exécutez la commande dans un bloc "if". Si la commande réussit, le bloc "then" est exécutée, si elle échoue, le bloc "else" est exécuté, puis le script continue. Par exemple : if grep color .bashrc then echo "OK" else echo "KO" fi affichera "OK" si la chaine "color" apparaît dans le fichier ".bashrc", "KO" sinon. 2. Si c'est juste pour empêcher une commande de planter le script en cas d'erreur, vous pouvez utiliser l'opérateur "||" vaguement inspiré du C, pour lequel la seconde opérande est exécutée si la première échoue, puis le script continue : grep color .bashrc || echo "KO" 3. Couper l'option "-e" en ajoutant au moment voulu dans le script : set +e mais comme c'est triste, il ne faut pas oublier de rétablir l'option une fois la section problématique passée. Ça peut servir si vous avez de nombreux traitements dans un bloc "case" traitant différentes erreurs stockées dans $? par exemple : set +e grep color .bashrc case $? in 0 ) echo "No problem" ;; 1 ) echo "No color in there" ;; 2 ) echo "No .bashrc in there" ;; * ) echo "Unknown error" ;; esac set -e Vous pouvez consulter le code de retour dans une session interactive comme suit : $ grep color .bashrc alias ls='ls --color=auto' $ echo $? 0 $ grep colour .bashrc $ echo $? 1 Étant donné le nombre de possibilités de Bash, je suis à peu près certain d'avoir oublié un certain nombre de manières de traiter les erreurs, mais ça devrait vous donner la base pour travailler. Tous les détails du Bash sont disponibles dans sa page de manuel, mais vous pouvez aussi consulter l'aide des différents "builtins" avec la commande "help" : $ help function function: function name { COMMANDS ; } or name () { COMMANDS ; } Define shell function. [...] $ man bash Cette aide est disponible en Français si vous avez installé votre système avec cette langue par défaut. Si vous êtes anglophone et que vous avez du temps, l'excellent « Advanced Bash-Scripting Guide » de Mendel Cooper permet d'être très au point sur la rédaction de scripts shell. Il est librement disponible ici : http://tldp.org/LDP/abs/html/ On dirait qu'une traduction Française est aussi disponible : https://abs.traduc.org/abs-6.4.05-fr/ J'ai beaucoup appris avec ce livre. :) À plus, -- Étienne Mollier <etienne.moll...@mailoo.org> Shell programming is a 1950s juke box . . . --Larry Wall