Comment remplacer une variable dans votre script bash en ligne de commande? Je sais comment passer des variables, mais je veux juste quelque chose comme ./myscript.sh -Dvar=val
Vous devez utiliser le paramètre de développement pour la ou les variables que vous souhaitez remplacer:
$ cat override.sh
#!/bin/bash
: ${var1:=foo} # var1 will take on the value "foo" if not overridden
var2=${var2:-foo} # same thing but more typing
echo "var1 is $var1 | var2 is $var2"
$ ./override.sh
var1 is foo | var2 is foo
$ var1=bar var2=baz ./override.sh
var1 is bar | var2 is baz
Bash n'est pas comme Make ou Ant. Ces deux programmes ne vous permettront pas de réinitialiser la valeur d'une macro/propriété une fois qu'elle est définie sur la ligne de commande. Dans BASH, vous devrez écrire vos scripts de manière à ce que vous puissiez définir ces valeurs à partir de la ligne de commande sans les remplacer par vos scripts.
Vous voudrez peut-être regarder la commande getopts qui est une commande intégrée de bash. Cela vous donne un moyen simple et flexible d’analyser les arguments de la ligne de commande et de définir des valeurs à partir de la ligne de commande. Par exemple, j'ai quatre variables OPT_A
, OPT_B
, OPT_C
et OPT_D
. Si je ne passe pas le paramètre, ils obtiennent leur valeur par défaut. Cependant, je peux remplacer cette valeur par défaut sur la ligne de commande:
USAGE="$0 [-a <a> -b <b> -c <c> -d <d>]"
OPT_A="Default Value of A"
OPT_B="Default Value of B"
OPT_C="Default Value of C"
OPT_D="Default Value of D"
while getopts ':a:b:c:d:' opt
do
case $opt in
a) OPT_A=$OPTARG;;
b) OPT_B=$OPTARG;;
c) OPT_C=$OPTARG;;
d) OPT_D=$OPTARG;;
\?) echo "ERROR: Invalid option: $USAGE"
exit 1;;
esac
done
Vous pouvez également exporter vos variables d'environnement pour permettre à vos scripts BASH d'y accéder. De cette façon, vous pouvez définir une variable et utiliser cette valeur.
Dans BASH, la construction ${parameter:=Word}
indique que si $parameter
est défini, utilisez la valeur $parameter
. Toutefois, si $parameter
est null ou non défini, utilisez plutôt Word
.
Maintenant, imaginez si vous faisiez ceci:
$ export COMMANDLINE_FOO="FUBAR"
Maintenant, la variable $ COMMANDLINE_FOO est définie et lisible par vos scripts Shell
Ensuite, dans votre script Shell, vous pouvez faire ceci:
FOO=BARFU
[...] #Somewhere later on in the program...
echo "I'm using '${COMMANDLINE_FOO:=$FOO}' as the value"
Cela va maintenant imprimer
I'm using 'FUBAR' as the value
au lieu de
I'm using 'BARFU' as the value
Vous devez spécifier la variable avec la syntaxe suivante:
MYVAR=74 ./myscript.sh
Dans le script, vérifiez s'il est déjà défini avant de le définir:
if [ ! -z $MYVAR ]; then
#do something
fi
Je le ferais comme ça:
# if Java_HOME not set, then set with default value
if [ "x$Java_HOME" = "x" ]; then
Java_HOME=/opt/Java
fi