URL: https://linuxfr.org/users/grondilu/journaux/astuce-bash-de-lusage-du-elif Title: astuce bash: de l'usage du elif Authors: grondilu Date: 2011年06月21日T13:32:09+02:00 Tags: bash, spaghetti et script Score: 12 Bash est un langage dont la coolitude ne cesse de me surprendre. J'en apprends littéralement tous les jours. Il existe des tas de sites où vous trouverez des tas d'astuces sur l'utilisation avancée du _Bourne-Again SHell_. Par exemple sur l'utilisation des redirections, des substitutions de processus, les tableaux associatifs, les documents-en-place (here-document), chaines-en-place (here-string), les tuyaux nommés, les nombreux types d'expansion, etc, etc. Mais récemment y'a une astuce toute bête que je n'ai jamais vraiment lu nul part sur une structure des plus banales: le _if then elif else fi_. Il faut savoir qu'après un if ou un elif, on n'est pas obligé de ne mettre qu'une commande. On peut mettre une liste de commandes. Ainsi, une commande telle que: echo "I am going to run foo" if foo then echo "I did run foo" fi peut être remplacée par: if echo "I am going to run foo" foo then echo "I did run foo" fi « Oui, et alors ? », me direz-vous. Et bien, le truc c'est que grâce à ça on n'a pas à imbriquer des if. Ainsi: echo "I am going to run foo" if foo then echo "I did run foo" echo "now I am going to run bar" if bar then "I did run bar" fi fi peut être écrit dans une seule structure if: if echo "I am going to run foo" ! foo then echo "oops" elif echo "I did run foo" echo "now I am going to run bar" bar then echo "I did run bar" fi Et là on comprends que cette idée est très utile pour gérer les erreurs: if ! foo then error "something went wrong trying to run foo" elif echo "I did run foo" echo "Now I'm going to run bar" ! bar then error "something went wrong trying to run bar" elif echo "I did run bar" echo "Now I'm going to run jiz" ! jiz then error "something went wrong trying to run jiz" else echo "I could go on like this forever" fi AMHA ce style de programmation présente parmi ses avantages, celui d'inciter le programmeur à développer du code robuste, car il doit penser à gérer les erreurs d'abords, pour chaque étape du programme. En fait il me semble que presque sans exagérer on peut dire qu'on devrait pouvoir écrire n'importe quel programme bash dans une seule grande structure _if then elif ... else fi_