informatique:linux:programmation_shell
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| informatique:linux:programmation_shell [2021/01/07 10:35] – [Herestring] pteu | informatique:linux:programmation_shell [2024/10/02 15:10] (current) – [pipe ("|")] test de présence d'un flux envoyé sur l'entrée standard (pipe) pteu | ||
|---|---|---|---|
| Line 40: | Line 40: | ||
| local VAR=" | local VAR=" | ||
| </ | </ | ||
| + | <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' | ||
| + | </ | ||
| + | |||
| 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 " | ||
| + | } | ||
| + | |||
| + | # appelle de la fonction, plus bas dans le code | ||
| + | mafonction | ||
| + | </ | ||
| + | A l' | ||
| + | |||
| + | La variable bash '' | ||
| =====pipe (" | =====pipe (" | ||
| Line 451: | Line 470: | ||
| $ false | true; echo $? | $ false | true; echo $? | ||
| 1 | 1 | ||
| + | </ | ||
| + | |||
| + | * pour écrire un script qui traite l' | ||
| + | <code bash> | ||
| + | # s'il existe un pipe sur l' | ||
| + | if [ -p /dev/stdin ]; then | ||
| + | source="/ | ||
| + | else | ||
| + | source=" | ||
| + | fi | ||
| </ | </ | ||
| ===== read ===== | ===== read ===== | ||
| Line 460: | Line 489: | ||
| Pour afficher un texte avant la saisie on utilise '' | Pour afficher un texte avant la saisie on utilise '' | ||
| <code bash> | <code bash> | ||
| - | read -p "Quel est le numéro de ta CB ? Et le cryptogramme visuel | + | read -p "Quel est ton nom ?" NOM |
| + | </ | ||
| + | Pour masquer la saisie, s'il s'agit d'un mot de passe par exemple, on utilise '' | ||
| + | <code bash> | ||
| + | read -s -p "Et ton numéro | ||
| </ | </ | ||
| - | Pour lire depuis un fichier | + | ====Lire |
| <code bash> | <code bash> | ||
| read < fichier.txt | read < fichier.txt | ||
| Line 470: | Line 503: | ||
| while read line; do | while read line; do | ||
| echo $line | echo $line | ||
| + | done < fichier.txt | ||
| + | </ | ||
| + | |||
| + | 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 " | ||
| done < fichier.txt | done < fichier.txt | ||
| </ | </ | ||
| Line 484: | Line 524: | ||
| done | done | ||
| </ | </ | ||
| - | Le premier exemple utilise une [[https:// | + | Le premier exemple utilise une [[https:// |
| + | |||
| + | * : en réalité bash utilise réellement un fichier temporaire, la preuve : | ||
| + | <code bash> | ||
| + | $ echo <(echo foo) | ||
| + | / | ||
| + | |||
| + | $ cat <(echo foo) | ||
| + | foo | ||
| + | |||
| + | $ xargs echo < <(echo foo) | ||
| + | foo | ||
| + | </ | ||
| + | ====Lire depuis une variable==== | ||
| - | Pour lire depuis une variable : | ||
| <code bash> | <code bash> | ||
| read <<< | read <<< | ||
| + | </ | ||
| + | |||
| + | Seconde façon de faire, et plus adéquate si la variable contient des sauts de ligne : | ||
| + | <code bash> | ||
| + | ECHO=" | ||
| + | | ||
| + | | ||
| </ | </ | ||
| ====== Expressions arithmétiques ====== | ====== Expressions arithmétiques ====== | ||
| Line 580: | Line 639: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| + | |||
| + | * '' | ||
| ====Chaînes de caractères==== | ====Chaînes de caractères==== | ||
| Line 911: | Line 972: | ||
| </ | </ | ||
| + | =====trim (suppression des espaces dans une chaîne)===== | ||
| + | |||
| + | bash ne possède pas de fonction prédéfinie pour " | ||
| + | |||
| + | Pour faire cette office il existe plusieurs possibilités d' | ||
| + | <code bash> | ||
| + | arr=(' | ||
| + | ' test@domain.com ' ' | ||
| + | </ | ||
| + | |||
| + | * en utilisant la substitution de caractère dans les variables, en activant le //globbing étendu// (des motifs d' | ||
| + | <code bash> | ||
| + | shopt -s extglob | ||
| + | # (pour reconnaître [[:blank:]] qui définit l' | ||
| + | arr=( " | ||
| + | arr=( " | ||
| + | </ | ||
| + | |||
| + | * avec '' | ||
| + | <code bash> | ||
| + | function trim() { | ||
| + | mapfile -t t_input<<<" | ||
| + | [[ ${# | ||
| + | set -- ${t_input[@]} | ||
| + | printf ' | ||
| + | } | ||
| + | trim " | ||
| + | </ | ||
| ====== Ressources ====== | ====== Ressources ====== | ||
| Line 917: | Line 1006: | ||
| * [[http:// | * [[http:// | ||
| * https:// | * https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
informatique/linux/programmation_shell.1610015730.txt.gz · Last modified: 2021/01/07 10:35 by pteu