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
informatique:linux:programmation_shell [2021/02/02 09:08] – [function] pteuinformatique:linux:programmation_shell [2023/10/02 13:35] (current) – [Lire depuis un fichier] pteu
Line 479: 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 489: Line 493:
 while read line; do while read line; do
   echo $line   echo $line
 +done < fichier.txt
 +</code>
 +
 +Pour lire mot par mot, si le fichier est formaté (par exemple s'il contient une liste de "nom prénom") :
 +<code bash>
 +while read nom prenom; do
 +  echo "nom=$nom ; prenom=$prenom"
 done < fichier.txt done < fichier.txt
 </code> </code>
Line 516: Line 527:
 foo foo
 </code> </code>
 +====Lire depuis une variable====
  
-Pour 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 611: Line 629:
   * ''-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 942: Line 962:
 </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 949: Line 997:
   * 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.1612256929.txt.gz · Last modified: 2021/02/02 09:08 by pteu