informatique:linux:programmation_shell
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
informatique:linux:programmation_shell [2019/12/10 07:52] – ajout logo pteu | informatique:linux:programmation_shell [2021/01/05 09:08] – [for] pteu | ||
---|---|---|---|
Line 4: | Line 4: | ||
{{ : | {{ : | ||
- | Les différents shells peuvent avoir des fonctions sensiblement différentes voir incompatibles. Ce n'est pas le cas pour la majorité d' | + | Les différents shells peuvent avoir des fonctions sensiblement différentes voir incompatibles. Ce n'est pas le cas pour la majorité d' |
+ | Pour afficher la liste des options de bash il faut saisir '' | ||
* '' | * '' | ||
- | * '' | + | * '' |
<code bash> | <code bash> | ||
$ touch toto | $ touch toto | ||
Line 25: | Line 26: | ||
</ | </ | ||
On peut les manipuler sans les déclarer proprement au préalable ; mais on peut être clean et les définir ('' | On peut les manipuler sans les déclarer proprement au préalable ; mais on peut être clean et les définir ('' | ||
+ | |||
+ | Pour déclarer une variable non modifiable = en readonly (une constante) : | ||
+ | <code bash> | ||
+ | readonly CONST=" | ||
+ | # ou | ||
+ | declare -r CONST=" | ||
+ | </ | ||
Par défaut une variable est globale et est vue dans le script (y compris ses fonctions) ; dans une fonction on peut déclarer des variables locales afin d' | Par défaut une variable est globale et est vue dans le script (y compris ses fonctions) ; dans une fonction on peut déclarer des variables locales afin d' | ||
Line 30: | Line 38: | ||
local VAR=" | local VAR=" | ||
</ | </ | ||
+ | |||
+ | Pour déclarer une constante locale à une fonction : | ||
+ | <code bash> | ||
+ | local -r CONST=" | ||
+ | |||
+ | # ou en 2 lignes | ||
+ | local CONST=" | ||
+ | readonly CONST | ||
+ | |||
+ | # marche aussi, puisque lorsque declare est invoqué dans une fonction, | ||
+ | # la variable qui suit est déclarée localement | ||
+ | function test() { | ||
+ | declare -r CONST=" | ||
+ | } | ||
+ | </ | ||
+ | C'est assez touffu je suis d' | ||
+ | |||
+ | |||
+ | |||
+ | |||
===== Tests de définition===== | ===== Tests de définition===== | ||
Line 61: | Line 89: | ||
echo ${VAR: | echo ${VAR: | ||
</ | </ | ||
+ | |||
+ | =====Typage===== | ||
+ | |||
+ | Il n'y a pas de typage strict en bash, toutes les variables sont considérées comme des chaînes de caractères, | ||
+ | |||
+ | Pour " | ||
+ | <code bash> | ||
+ | is_ready=true | ||
+ | if [ " | ||
+ | then echo " | ||
+ | else echo " | ||
+ | fi | ||
+ | </ | ||
+ | |||
+ | Pour plus de détails sur le pseudo-typage en bash, voir la fonction [[informatique: | ||
===== Manipulation des variables===== | ===== Manipulation des variables===== | ||
Line 111: | Line 154: | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
- | |||
Line 139: | Line 182: | ||
trois | trois | ||
</ | </ | ||
+ | |||
+ | Exemple de découpage d'une chaîne dans un tableau, avec comme séparateur ";" | ||
+ | <code bash> | ||
+ | CHAINE=' | ||
+ | IFS=";" | ||
+ | read -a TAB <<<" | ||
+ | echo " | ||
+ | 3 | ||
+ | printf ' | ||
+ | 17 | ||
+ | 8 23 | ||
+ | 9 | ||
+ | </ | ||
+ | |||
====Tableau à 2 dimensions==== | ====Tableau à 2 dimensions==== | ||
- | Ça n'eût pas existé | + | Ça n'eût pas existé sous bash :). Mais on peut l' |
<code bash> | <code bash> | ||
# déclaration d'un tableau associatif T | # déclaration d'un tableau associatif T | ||
Line 163: | Line 220: | ||
</ | </ | ||
+ | ====Tableau associatif==== | ||
+ | Créer et utiliser un vrai tableau associatif : | ||
+ | <code bash> | ||
+ | declare -A TA=([cle1]=valeur1 ["cle 2" | ||
+ | echo " | ||
+ | # valeur1 | ||
+ | |||
+ | # Parcourir le tableau | ||
+ | for cle in " | ||
+ | echo " | ||
+ | done | ||
+ | #cle=cle 2 ; val=valeur 2 | ||
+ | #cle=cle3 ; val=valeur3 | ||
+ | #cle=cle1 ; val=valeur1 | ||
+ | </ | ||
+ | |||
+ | Pour connaitre la taille de ce tableau : '' | ||
=====getopts : analyse des arguments d'un script===== | =====getopts : analyse des arguments d'un script===== | ||
Line 386: | Line 460: | ||
Pour incrémenter une variable : plusieurs possibilités : | Pour incrémenter une variable : plusieurs possibilités : | ||
- | * '' | + | * '' |
- | * ''< | + | * ''< |
- | * ''< | + | |
* ''< | * ''< | ||
Line 471: | Line 544: | ||
* ''" | * ''" | ||
* ''" | * ''" | ||
- | * ''" | + | * ''" |
+ | <code bash> | ||
+ | [[ "la réponse est 42" =~ ^.*([0-9]{2}).*$ ]] && echo " | ||
+ | 42 est la réponse | ||
+ | </ | ||
* '' | * '' | ||
* '' | * '' | ||
Line 483: | Line 560: | ||
* '' | * '' | ||
+ | Comme il n'y a pas de typage en bash, pour tester si la valeur d'une variable est un nombre (entier) il faut réaliser le tester : | ||
+ | <code bash> | ||
+ | # Solution à base de REGEX | ||
+ | [[ $VAR =~ ^[0-9]+$ ]] || echo "VAR n'est pas un entier" | ||
+ | # NB : l' | ||
+ | # ou doit être enregistrée dans une variable sinon ça ne matche pas | ||
+ | |||
+ | # " | ||
+ | [ $VAR -eq $VAR ] 2>/ | ||
+ | </ | ||
==== Opérateurs ==== | ==== Opérateurs ==== | ||
* '' | * '' | ||
Line 530: | Line 617: | ||
DEBUT=1 | DEBUT=1 | ||
FIN=5 | FIN=5 | ||
- | for (( i = $DEBUT; i <= $FIN; i++ )) | ||
- | |||
# ne fonctionne pas : for i in {$DEBUT..$FIN} | # ne fonctionne pas : for i in {$DEBUT..$FIN} | ||
+ | # fonctionne : | ||
+ | for (( i = $DEBUT; i <= $FIN; i++ )) | ||
</ | </ | ||
+ | |||
+ | On peut spécifier l' | ||
On peut aussi lui fournir une liste de mots : | On peut aussi lui fournir une liste de mots : | ||
Line 782: | Line 871: | ||
</ | </ | ||
- | ====== | + | ====== |
* http:// | * http:// | ||
* http:// | * http:// | ||
* [[http:// | * [[http:// | ||
+ | * https:// |
informatique/linux/programmation_shell.txt · Last modified: 2023/10/02 13:35 by pteu