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
Last revisionBoth sides next revision
informatique:linux:programmation_shell [2021/01/24 11:41] – [Ressources] pteuinformatique:linux:programmation_shell [2023/10/02 13:30] – [read] Lire depuis une variable pteu
Line 432: 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 464: Line 479:
 Pour afficher un texte avant la saisie on utilise ''-p'' ; on peut récupérer plusieurs saisie d'un seul coup : Pour afficher un texte avant la saisie on utilise ''-p'' ; on peut récupérer plusieurs saisie d'un seul coup :
 <code bash> <code bash>
-read -p "Quel est le numéro de ta CB ? Et le cryptogramme visuel de derrière ?" CARD_NUMBER CRYPTO+read -p "Quel est ton nom ?" NOM 
 +</code> 
 +Pour masquer la saisie, s'il s'agit d'un mot de passe par exemple, on utilise ''-s''
 +<code bash> 
 +read -s -p "Et ton numéro de CB ?" CARD_NUMBER
 </code> </code>
  
-Pour lire depuis un fichier :+====Lire depuis un fichier====
 <code bash> <code bash>
 read < fichier.txt read < fichier.txt
Line 502: Line 521:
 </code> </code>
  
-Pour lire depuis une variable :+====Lire depuis une variable==== 
 <code bash> <code bash>
 read <<< $var read <<< $var
 +</code>
 +
 +Seconde façon de faire, et plus adéquate si la variable contient des sauts de ligne :
 +<code bash>
 +ECHO="toto1 titi1\ntoto2 titi2"; echo -e "$ECHO" | while read a b; do echo "a=$a ; b=$b"; done
 + a=toto1 ; b=titi1
 + a=toto2 ; b=titi2
 </code> </code>
 ====== Expressions arithmétiques ====== ====== Expressions arithmétiques ======
Line 596: Line 623:
   * ''-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 927: Line 956:
 </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 ======
  
Line 934: Line 991:
   * 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://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