J'essaie de résumer plusieurs scripts shell dans un grand script shell, comme celui-ci :
#!/bin/sh
bash script1.sh
bash script2.sh
bash script3.sh
Tous les scripts partagent les mêmes variables var
et var2
. Je voulais supprimer les définitions de variables des scripts shell individuels et les placer dans le grand script shell à la place, de sorte que lorsque je modifie la valeur des variables, je n'ai à le faire qu'une seule fois.
Cependant, quand je le fais
#!/bin/sh
var1="1"
var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
les variables ne sont pas reconnues par les références $var1
et $var2
dans les scripts shell individuels.
Toutes mes excuses si la question a déjà été posée, je suis nouveau dans les scripts en général et je ne savais pas quoi rechercher.
Ce serait également bien de savoir comment je pourrais parcourir les scripts avec plusieurs entrées variables, telles que
var1="1 2 3 4 5"
var2="a b c d e"
for i in $var1;do for j in $var2;do
script1.sh
script2.sh
done;done
Réponse acceptée :
Lorsque vous exécutez les scripts 1 à 3 dans votre script principal, ils sont chacun exécutés dans leur propre sous-shell, c'est pourquoi ils ne reconnaissent pas les variables définies dans leur shell parent. Utilisez export
pour rendre les variables disponibles aux sous-shells :
#!/bin/sh
export var1="1"
export var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
Une alternative (pertinente pour votre deuxième question) serait de passer les variables aux scripts en tant que paramètres positionnels :
#!/bin/sh
var1="1"
var2="2"
bash script1.sh "$var1" "$var2"
bash script2.sh "$var1" "$var2"
bash script3.sh "$var1" "$var2"
Dans les scripts 1 à 3, ces variables seraient alors disponibles sous la forme $1
et $2
respectivement.