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 Les deux révisions suivantes | ||
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [31/05/2014 17:58] Hypathie [Valeurs d'une variable internes ou externes à un script] |
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [31/05/2014 19:06] Hypathie [Valeurs d'une variable internes ou externes à un script] |
||
---|---|---|---|
Ligne 427: | Ligne 427: | ||
=====Valeurs d'une variable internes ou externes à un script===== | =====Valeurs d'une variable internes ou externes à un script===== | ||
- | ====récupération et modification d'une valeur par le script==== | + | |
- | ===Pré-requis: utiliser la structure conditionnelle if=== | + | **Pré-requis: utiliser la structure conditionnelle if** |
À savoir : | À savoir : | ||
* [[atelier:chantier:la-page-man-bash-ii-les-operateurs-lexicographiques|Opérateurs lexicographiques]] | * [[atelier:chantier:la-page-man-bash-ii-les-operateurs-lexicographiques|Opérateurs lexicographiques]] | ||
Ligne 460: | Ligne 460: | ||
====Déclaration nulle et modification par le script d'une valeur interne ou externe==== | ====Déclaration nulle et modification par le script d'une valeur interne ou externe==== | ||
- | ===Pré-requis : utiliser les structures de contrôle=== | + | **Pré-requis : utiliser les structures de contrôle** |
Voir : | Voir : | ||
* **[[doc:programmation:shell:avancee#boucle-tant-que-while|boucle while]]** | * **[[doc:programmation:shell:avancee#boucle-tant-que-while|boucle while]]** | ||
Ligne 513: | Ligne 513: | ||
les paramètres sont : : : . | les paramètres sont : : : . | ||
</code> | </code> | ||
- | ** Attention à la commande set: avec set - - le script est en quelque sorte, fermé sur lui-même et après l'avoir utiliser, on ne peut plus récupérer une valeur extérieure au script.**\\ | + | |
+ | =====Déclarer des paramètres de position : set===== | ||
+ | ==== syntaxe de set==== | ||
+ | À savoir : variables de substitution prédéfinies [[atelier:chantier:bash-les-differents-caracteres-speciaux?&#variables-de-substitution-predefinies-principalement-dans-les-scripts]] | ||
+ | |||
+ | *La commande **set** permet d'affecter une valeur provisoire à un ou plusieurs paramètres de position. | ||
+ | Les arguments de la commande set seront les valeurs des paramètres que set positionne.\\ | ||
+ | |||
+ | <code> | ||
+ | set argument1 [argument2] ... | ||
+ | </code> | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | var=lettres | ||
+ | set a b c #affectation des paramètres a b c | ||
+ | echo "$var" "$1" "$2" "$3" | ||
+ | if [ $# != 2 ] ; then # (1) | ||
+ | echo "il y a trois paramètres et une variable nommée var de valeur \"lettres\" " | ||
+ | fi | ||
+ | </code> | ||
+ | Retour : | ||
+ | |||
+ | <code> | ||
+ | lettres a b c | ||
+ | il y a trois paramètres et une variable nommée var de valeur "lettres" | ||
+ | </code> | ||
+ | **Observez:** | ||
+ | * mon-script1 | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | set a b c | ||
+ | echo $@ | ||
+ | echo "il y a les paramètres de position : $1, $2, $3" | ||
+ | echo "Leurs valeurs sont vide: RIEN"$a", RIEN"$b", RIEN"$c"." | ||
+ | </code> | ||
+ | Retour : | ||
+ | <code bash> | ||
+ | a b c | ||
+ | il y a les paramètres de position : a, b, c | ||
+ | Leurs valeurs sont vide: RIEN, RIEN, RIEN. | ||
+ | </code> | ||
+ | ====set annule les paramètres de position affectés précédemment==== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | var=lettres | ||
+ | set a b c | ||
+ | echo $var | ||
+ | echo $@ | ||
+ | echo " " | ||
+ | set gros_pater | ||
+ | echo $var | ||
+ | echo $1 | ||
+ | set -- | ||
+ | echo $var | ||
+ | echo $1 | ||
+ | </code> | ||
+ | **Retour :** | ||
+ | <code> | ||
+ | lettres | ||
+ | a b c | ||
+ | |||
+ | lettres | ||
+ | gros_pater | ||
+ | lettres | ||
+ | |||
+ | </code> | ||
+ | ====Paramètres de position et boucles==== | ||
Par exemple : soit le script ci-dessous boucle-set.sh\\ | Par exemple : soit le script ci-dessous boucle-set.sh\\ | ||
(passer un argument à ce script depuis le terminal) | (passer un argument à ce script depuis le terminal) | ||
Ligne 534: | Ligne 601: | ||
</code> | </code> | ||
<code user> | <code user> | ||
- | ./boucle-set.sh argument1 | + | ./boucle-set.sh |
</code> | </code> | ||
Retour : | Retour : | ||
<code user> | <code user> | ||
- | |||
- | |||
a b c | a b c | ||
les paramètres sont : a :b :c . | les paramètres sont : a :b :c . | ||
Ligne 547: | Ligne 612: | ||
les paramètres sont : c : : . | les paramètres sont : c : : . | ||
+ | ~$ | ||
+ | </code> | ||
+ | PUIS | ||
+ | <code user> | ||
+ | ./boucle-set.sh argument1 | ||
+ | </code> | ||
+ | retour : | ||
+ | <code> | ||
+ | argument1 | ||
+ | a b c | ||
+ | les paramètres sont : a :b :c . | ||
+ | argument1 | ||
+ | les paramètres sont : b :c : . | ||
+ | argument1 | ||
+ | les paramètres sont : c : : . | ||
+ | argument1 | ||
</code> | </code> | ||
- | **MAIS :** | + | |
+ | =====Supprimer les paramètres de position===== | ||
+ | **même script que ci-dessus mais on dé-commente set - - (on enlève # ligne 5) :** | ||
+ | |||
+ | <code user> | ||
+ | ./boucle-set.sh | ||
+ | </code> | ||
+ | |||
+ | retour : | ||
+ | |||
+ | <code> | ||
+ | |||
+ | ~$ | ||
+ | </code> | ||
+ | |||
+ | et | ||
+ | |||
+ | <code user> | ||
+ | ./boucle-set.sh argument1 | ||
+ | </code> | ||
+ | |||
+ | retour : | ||
+ | |||
+ | <code> | ||
+ | argument1 | ||
+ | |||
+ | ~$ | ||
+ | </code> | ||
+ | ====Attention à la commande set : les arguments passés au script sont supprimés==== | ||
+ | **Elle supprime toute possibilité de se référer à des paramètres passés au script (depuis le terminal),\\ | ||
+ | et ceci y compris si on supprime avec set - - les paramètres de position déclarés avec set.**\\ | ||
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
- | var=$1 | + | #donner les argument 1 2 3 à se script avant de le lancer |
- | echo $1 | + | var1=$1 ; var2=$2 ; var3=$3 |
+ | echo "les valeurs de var1, var2 et var3 sont les paramètres de position : $@." | ||
+ | echo " " | ||
+ | for i in "$@" | ||
+ | do | ||
+ | echo "les paramètres de position sont : $1 :$2 :$3 ." | ||
+ | shift 1 | ||
+ | done | ||
set a b c | set a b c | ||
set -- | set -- | ||
- | echo $@ | ||
- | | ||
for i in "$@" | for i in "$@" | ||
do | do | ||
- | i=$1 | ||
- | shift 1 | ||
echo "les paramètres sont : $1 :$2 :$3 ." | echo "les paramètres sont : $1 :$2 :$3 ." | ||
- | echo $var | ||
done | done | ||
+ | echo " " | ||
+ | echo "les paramètres de position sont "$@"." | ||
+ | echo "les valeurs 1, 2, et 3 sont maintenant les valeurs des variables $var1 ; $var2 ; $var3." | ||
</code> | </code> | ||
+ | |||
Retour : | Retour : | ||
- | <code user> | ||
- | argument1 | ||
+ | <code> | ||
+ | les valeurs de var1, var2 et var3 sont les paramètres de position : 1 2 3. | ||
+ | |||
+ | les paramètres de position sont : 1 :2 :3 . | ||
+ | les paramètres de position sont : 2 :3 : . | ||
+ | les paramètres de position sont : 3 : : . | ||
+ | |||
+ | les paramètres de position sont . | ||
+ | les valeurs 1, 2, et 3 sont maintenant les valeurs des variables 1 ; 2 ; 3. | ||
+ | </code> | ||
+ | ====remarques sur set ==== | ||
+ | <note > | ||
+ | *Sans argument la commande set affiche TOUS les noms et TOUTES les valeurs des variables pré-définies (celles du script qui l'appelle aussi). Mais elle n'enregistre pas une valeur d'un valeur non-déclarée ! FIXME\\ | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | var=lettres | ||
+ | set a b c | ||
+ | set | ||
+ | </code> | ||
+ | Observons les deux dernières lignes du retour : | ||
+ | <code> | ||
+ | XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0 | ||
+ | _=c | ||
+ | var=lettres | ||
+ | </code> | ||
+ | La première ligne montre en majuscule le nom d'une variable pré-défini, et ce qui suit est la valeur de cette variable. | ||
+ | Nous retrouvons la variable var de notre script avec sa valeur "lettres". | ||
+ | Mais on ne voit pas les paramètres a b c. | ||
+ | *set -o nom-de-l'option ou set -abréviation-de-l'option: permet d'activer les options du shell dans un script.\\ | ||
+ | Par exemple, on peut vérifier grâce à un message d'erreur si on appelle la valeur d'un paramètre qui n'a pas été défini. | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | set -o nounset | ||
+ | var=a | ||
+ | var1= | ||
+ | echo $var | ||
+ | echo $var1 | ||
+ | echo $var3 | ||
</code> | </code> | ||
+ | retour : | ||
+ | <code> | ||
+ | a | ||
+ | /home/hypathie/MesScripts/scriess: ligne8: var3 : variable sans liaison | ||
+ | </code> | ||
+ | Voir le tableau des options ici: http://abs.traduc.org/abs-5.3-fr/ch30.html#optionsref | ||
+ | </note> | ||
=====Variables et commandes à connaître===== | =====Variables et commandes à connaître===== | ||
declare | declare |