Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:script-bash-variables-arguments-parametres [03/06/2014 16:19] Hypathie [enchaînements de commandes dans les scripts] |
doc:programmation:shells:script-bash-variables-arguments-parametres [04/06/2014 07:18] Hypathie [Création de variables] |
||
---|---|---|---|
Ligne 10: | Ligne 10: | ||
* Commentaires sur le forum : [[url | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME | * Commentaires sur le forum : [[url | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME | ||
- | **Nota :** | + | **Nota : wiki n°2** |
Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
- | ===== Création de variables ===== | + | ===== Création, suppression, exportation de variables ===== |
En liens nécessaires : \\ | En liens nécessaires : \\ | ||
[[doc:programmation:shell:shell#variables-et-environnement|Le shell pour tous : "Variables et environnement"]]\\ | [[doc:programmation:shell:shell#variables-et-environnement|Le shell pour tous : "Variables et environnement"]]\\ | ||
Ligne 169: | Ligne 169: | ||
read -p "entrez votre de naissance (deux derniers chiffres): " -n 2 annee | read -p "entrez votre de naissance (deux derniers chiffres): " -n 2 annee | ||
</note> | </note> | ||
+ | ====Modification de la valeur d'une variable et protection ==== | ||
+ | ===Modification=== | ||
+ | Pour modifier la valeur d'une variable, il suffit de l'affecter d'une nouvelle valeur. | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | var1=bonjour | ||
+ | echo $var1 | ||
+ | var1=23 | ||
+ | echo $var1 | ||
+ | var1= | ||
+ | echo $var1 | ||
+ | var1=Bonjour | ||
+ | echo $var1 | ||
+ | </code> | ||
+ | Retour : | ||
+ | <code> | ||
+ | bonjour | ||
+ | 23 | ||
+ | |||
+ | Bonjour | ||
+ | </code> | ||
+ | ===proctection : redonly === | ||
+ | On protège une variable avec la commande readonly. La variable devient alors "une variable en lecture seule". Cela lui donne la caractéristique d'être figée : on ne peut plus alors, au cours du même script, réaffectée par une nouvelle valeur une même variable, y compris si cette variable a été déclarée vide. | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | var1=toto | ||
+ | var2= | ||
+ | echo "$var1 $var2" | ||
+ | readonly var1 var2 | ||
+ | var1=titi | ||
+ | var2=titi | ||
+ | unset var1 var2 | ||
+ | </code> | ||
+ | Retour : | ||
+ | |||
+ | <code> | ||
+ | toto | ||
+ | ligne6: var1 : variable en lecture seule | ||
+ | ligne7: var2 : variable en lecture seule | ||
+ | ligne 8 : unset: var1 : « unset » impossible : variable est en lecture seule | ||
+ | ligne 8 : unset: var2 : « unset » impossible : variable est en lecture seule | ||
+ | </code> | ||
+ | |||
+ | ====Suppression de variable : unset==== | ||
+ | Soit le script "essai.sh" : passons à ce script l'argument "vous" | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | var1=coucou | ||
+ | var2=$1 | ||
+ | echo "$var1 $var2" | ||
+ | unset var2 | ||
+ | echo "$var1 $var2" | ||
+ | var1=$1 | ||
+ | var2=vous | ||
+ | echo "$var1 $var2" | ||
+ | unset var2 | ||
+ | echo "$var1 $var2" | ||
+ | </code> | ||
+ | |||
+ | Retour : | ||
+ | |||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | var1=yep | ||
+ | var2=coucou | ||
+ | echo "$var1 $var2" | ||
+ | unset var2 | ||
+ | echo "$var1 $var2" | ||
+ | echo " " | ||
+ | echo "mais pour un paramètre :" | ||
+ | echo " " | ||
+ | var1=yep | ||
+ | var2=coucou | ||
+ | var3=$1 | ||
+ | echo "$var1 $var2 $var3" | ||
+ | unset var2 var3 | ||
+ | echo "$var1 $var2 $var3" | ||
+ | var2= | ||
+ | var3=$1 | ||
+ | echo "$var1 $var2 $var3" | ||
+ | </code> | ||
+ | Retour : | ||
+ | |||
+ | <code bash> | ||
+ | yep coucou | ||
+ | yep | ||
+ | |||
+ | mais pour un paramètre : | ||
+ | |||
+ | yep coucou vous | ||
+ | yep | ||
+ | yep vous | ||
+ | </code> | ||
+ | |||
+ | =====Quand les valeurs sont des paramètres ===== | ||
+ | |||
+ | ====Les paramètres de positions ==== | ||
+ | |||
+ | Lorsqu'on ajoute un argument au script avant son exécution, on peut alors récupérer la valeur de ce paramètre.\\ | ||
+ | |||
+ | * **Pour récupérer chaque paramètre : $1 ; $2 ; $3** etc. | ||
+ | |||
+ | * **Pour récupérer tous les paramètres : $@** | ||
+ | |||
+ | EXEMPLES : soit le script "essai.sh" | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | var=Bonjour | ||
+ | echo $var | ||
+ | echo "$1" | ||
+ | echo "$2" | ||
+ | echo "$3" | ||
+ | echo "ou le paramètre 1 est: $1, le deuxième est: $2, le troisième est : $3" | ||
+ | echo " " | ||
+ | echo "tous les paramètres $@" | ||
+ | </code> | ||
+ | ET | ||
+ | <code user> | ||
+ | ./essai.sh a b c | ||
+ | </code> | ||
+ | |||
+ | Retour: | ||
+ | <code> | ||
+ | Bonjour # on peut récupérer une valeur (ou des valeurs) déclarée(s) et les paramètres de position | ||
+ | a | ||
+ | b | ||
+ | c | ||
+ | ou le paramètre 1 est: a, le deuxième est: b, le troisième est : c | ||
+ | |||
+ | tous les paramètres a b c | ||
+ | </code> | ||
+ | |||
+ | * **Tous les arguments passés au scripts $* et $@ sont synonymes** | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | echo $1 | ||
+ | echo $* | ||
+ | echo $@ | ||
+ | echo $# | ||
+ | </code> | ||
+ | ET | ||
+ | <code user> | ||
+ | ./essai.sh bonjour à tous | ||
+ | </code> | ||
+ | retour : | ||
+ | |||
+ | <code> | ||
+ | bonjour | ||
+ | bonjour à tous | ||
+ | bonjour à tous | ||
+ | 3 | ||
+ | </code> | ||
+ | |||
+ | * **de même pour $* et $@ :** | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | echo $1 | ||
+ | echo $* | ||
+ | echo $@ | ||
+ | echo $# | ||
+ | </code> | ||
+ | ET | ||
+ | <code user> | ||
+ | ./essai.sh "bonjour à tous" | ||
+ | </code> | ||
+ | retour : | ||
+ | |||
+ | <code> | ||
+ | bonjour à tous | ||
+ | bonjour à tous | ||
+ | bonjour à tous | ||
+ | 1 | ||
+ | </code> | ||
+ | |||
+ | * **Mais avec la commande set qui modifie provisoirement les paramètres :** | ||
+ | Pour plus de détails sur la commande set voir : [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles?&#syntaxe-de-set]] | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | set "bonjour à tous" | ||
+ | echo $* | ||
+ | echo $@ | ||
+ | echo $1 | ||
+ | echo $# | ||
+ | </code> | ||
+ | |||
+ | <code user> | ||
+ | ./essai.sh | ||
+ | </code> | ||
+ | |||
+ | Retour : | ||
+ | <code > | ||
+ | bonjour à tous | ||
+ | bonjour à tous | ||
+ | bonjour à tous | ||
+ | 1 | ||
+ | </code> | ||
+ | |||
+ | OU ENCORE : | ||
+ | |||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | set bonjour à tous | ||
+ | echo $* | ||
+ | echo $@ | ||
+ | echo $1 | ||
+ | echo $# | ||
+ | </code> | ||
+ | |||
+ | <code user> | ||
+ | ./essai.sh | ||
+ | </code> | ||
+ | |||
+ | Retour : | ||
+ | |||
+ | <code > | ||
+ | bonjour à tous | ||
+ | bonjour à tous | ||
+ | bonjour | ||
+ | 3 | ||
+ | |||
+ | </code> | ||
+ | |||
+ | =====Récupérer la longueur d'une valeur de variable===== | ||
+ | |||
+ | * **Pour obtenir la longueur d'une chaîne stockée dans une variable, on écrit ${#VAR}.** | ||
+ | |||
+ | Exemples : | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | var="j'aime debian-facile" | ||
+ | echo ${#var} | ||
+ | </code> | ||
+ | |||
+ | * ** Pour récupérer la longueur d'un paramètre de position** | ||
+ | FIXME | ||
+ | |||
+ | |||
+ | |||
+ | =====Substitutions de commande===== | ||
+ | |||
+ | Permet de se servir de la sortie d'une commande dans un autre contexte pour ; | ||
+ | - affecter cette sortie à une variable ; | ||
+ | - utiliser cette sortie comme argument d'une autre commande | ||
+ | - etc. | ||
+ | |||
+ | Il y a deux syntaxes : | ||
+ | <code> | ||
+ | `commande` | ||
+ | </code> | ||
+ | |||
+ | OU | ||
+ | |||
+ | <code> | ||
+ | $(commande) | ||
+ | </code> | ||
+ | |||
+ | ===$(cmd) : des exemples=== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | dir=$(pwd) | ||
+ | echo "mon répertoire est : $dir" | ||
+ | </code> | ||
+ | <code> | ||
+ | mon répertoire est : /home/hypathie | ||
+ | </code> | ||
+ | *plusieurs commandes: | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | echo $(pwd ; ls) | ||
+ | </code> | ||
+ | === $(cmd) : imbrication de commandes :=== | ||
+ | <code bash> | ||
+ | echo $( ls $(pwd)/Documents) | ||
+ | </code> | ||
+ | *avec set : | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | set $(pwd ; whoami) | ||
+ | echo "$1 : $2" | ||
+ | echo $# | ||
+ | </code> | ||
+ | Ou | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | set -- $(ls -l $(pwd)/.bashrc) | ||
+ | echo $* | ||
+ | </code> | ||
+ | =====Typologie des variables ===== | ||
+ | Comme nous l'avons vu on peut affecter une variable par différents types de valeurs ; des chaînes de caractères, des nombres, des valeurs d'autres variables, des substitutions de commandes.\\ | ||
+ | On dit pour cela quand bash les variables ne sont pas typées.\\ | ||
+ | Mais il peut être intéressant de typer une variable. Pour ce faire, il faut utiliser des commandes internes à bash qui permettent de déclarer une variable typée.\\ |