Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
informatique:linux:programmation_shell [2021/01/22 15:33] – [Les variables] portée des variables pteu | informatique:linux:programmation_shell [2022/10/17 21:30] – [trim (suppression des espaces dans une chaîne)] pteu |
---|
| |
======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 ("|")===== |
* ''-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==== |
</code> | </code> |
| |
| =====trim (suppression des espaces dans une chaîne)===== |
| |
| bash ne possède pas de fonction prédéfinie pour "trimmer" les chaînes de caractère. **trim** est une fonction, habituellement incluse dans les langages de programmation, permettant de supprimer les espaces parasites avant et après une chaîne : par exemple " cette chaîne" ou " celle-ci ". |
| |
| Pour faire cette office il existe plusieurs possibilités d'afficher les cellules du tableau suivant sans les espaces : |
| <code bash> |
| arr=('foo bar' 'test@domain.com ' \ |
| ' test@domain.com ' ' test@domain.com ') |
| </code> |
| |
| * en utilisant la substitution de caractère dans les variables, en activant le //globbing étendu// (des motifs d'expressions régulières prédéfinis) (source: [[https://www.cyberciti.biz/faq/how-to-trim-leading-and-trailing-white-space-in-bash/|cyberciti.biz]]) : |
| <code bash> |
| shopt -s extglob # activation des extended glob |
| # (pour reconnaître [[:blank:]] qui définit l'ensemble des espaces et tabulations) |
| arr=( "${arr[@]/#+([[:blank:]])/}" ) # suppression des espaces de début de chaîne |
| arr=( "${arr[@]/%+([[:blank:]])/}" ) # suppression des espaces de fin de chaîne |
| </code> |
| |
| * avec ''mapfile'' et ''<nowiki>set --</nowiki>'' (source: [[https://stackoverflow.com/questions/61081608/bash-remove-leading-and-trailing-spaces-in-array/61087835#61087835|stackoverflow]]) |
| <code bash> |
| function trim() { |
| mapfile -t t_input<<<"$*" # place chaque paramètre dans une cellule du tableau (un par ligne) |
| [[ ${#t_input[@]} -eq 0 ]] && { echo "Aucun texte à afficher"; exit 1; } |
| set -- ${t_input[@]} # affecte chaque case du tableau à un paramètre ($1, $2, etc) |
| printf '%s\n' "$*" # affiche chaque paramètre suivi d'un saut de ligne |
| } |
| trim "${arr[@]}" |
| </code> |
====== Ressources ====== | ====== Ressources ====== |
| |
* [[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]] |