User Tools

Site Tools


informatique:linux:programmation_shell

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
informatique:linux:programmation_shell [2021/01/07 10:35] – [Herestring] pteuinformatique:linux:programmation_shell [2022/06/08 08:49] – [Ressources] pteu
Line 40: Line 40:
 local VAR="pwet" local VAR="pwet"
 </code> </code>
 +<WRAP center round important 60%>
 +Les variables déclarées dans une fonction ont toujours une portée locale (elles sont détruites à la fin de la fonction), à moins qu'elles ne soient préalablement déclarées dans le script appelant.
 +</WRAP>
 +
  
 Pour déclarer une constante locale à une fonction : Pour déclarer une constante locale à une fonction :
Line 428: Line 432:
  
 ======Les fonctions====== ======Les fonctions======
 +
 +=====function=====
 +
 +Elles permettent de mutualiser le code afin qu'il soit appeler plusieurs fois sans avoir à le ré-écrire.
 +<code bash>
 +function mafonction() {
 +  echo "exécution de mafonction"
 +}
 +
 +# appelle de la fonction, plus bas dans le code
 +mafonction
 +</code>
 +A l'intérieur d'une fonction on peut utiliser des variables locales en les déclarant ''local VAR=""''. Pour envoyer un code de retour on utilise ''return'' (pas ''exit'' comme dans le script principal, sinon on quitte le script !).
 +
 +La variable bash ''$FUNCNAME'' permet d'afficher le nom de la fonction courante.
  
 =====pipe ("|")===== =====pipe ("|")=====
Line 484: Line 503:
 done done
 </code> </code>
-Le premier exemple utilise une [[https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html#Process-Substitution|process substitution]], qui permet de référencer l'entrée (''>(list)'') ou la sortie (''<(list)'') d'une commande comme un fichier et non plus un flux ; le second un pipe, mais les 2 se valent.+Le premier exemple utilise une [[https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html#Process-Substitution|process substitution]], qui permet de référencer l'entrée (''>(list)'') ou la sortie (''<(list)'') d'une commande comme un fichieret non plus un flux ; le second un pipe, mais les 2 se valent. 
 + 
 +* : en réalité bash utilise réellement un fichier temporaire, la preuve : 
 +<code bash> 
 +$ echo <(echo foo) 
 +/dev/fd/63 
 + 
 +$ cat <(echo foo) 
 +foo 
 + 
 +$ xargs echo < <(echo foo) 
 +foo 
 +</code>
  
 Pour lire depuis une variable : Pour lire depuis une variable :
Line 580: Line 611:
   * ''-O file'' : si le fichier nous appartient    * ''-O file'' : si le fichier nous appartient 
   * ''-G file'' : si le fichier appartient à notre groupe   * ''-G file'' : si le fichier appartient à notre groupe
 +
 +  * ''-t fd'' : vrai si //filedescriptor// fd est ouvert et se réfère à un terminal
  
 ====Chaînes de caractères==== ====Chaînes de caractères====
Line 917: Line 950:
   * [[http://tldp.org/LDP/abs/html/index.html|Advanced Bash-Scripting Guide]]   * [[http://tldp.org/LDP/abs/html/index.html|Advanced Bash-Scripting Guide]]
   * https://www.shellcheck.net : super moulinette en ligne pour analyser un script et recommander des améliorations (exsite aussi en package Linux : ''shellcheck''). A utiliser sans modération !   * https://www.shellcheck.net : super moulinette en ligne pour analyser un script et recommander des améliorations (exsite aussi en package Linux : ''shellcheck''). A utiliser sans modération !
 +  * [[https://google.github.io/styleguide/shellguide.html|Shell Style Guide]] by Google
 +  * [[https://betterdev.blog/minimal-safe-bash-script-template/|Minimal safe Bash script template]] (betterdev.blog)
 +  * [[https://github.com/pforret/bashew/blob/master/README.md|bashew]] / [[https://blog.forret.com/portfolio/bashful/|bashful]] : un outil de création de script bash et le blog de son auteur, Peter Forret
 +  * [[https://github.com/ralish/bash-script-template|bash-script-template]]
informatique/linux/programmation_shell.txt · Last modified: 2023/10/02 13:35 by pteu