Existe-t-il un moyen simple de transmettre (recevoir) des paramètres nommés à un script shell?
Par exemple,
my_script -p_out '/some/path' -arg_1 '5'
Et à l'intérieur, my_script.sh
recevez-les comme:
# I believe this notation does not work, but is there anything close to it?
p_out=$ARGUMENTS['p_out']
arg1=$ARGUMENTS['arg_1']
printf "The Argument p_out is %s" "$p_out"
printf "The Argument arg_1 is %s" "$arg1"
Est-ce possible dans Bash ou Zsh?
bash
shell-script
zsh
arguments
Amelio Vazquez-Reina
la source
la source
Réponses:
La syntaxe probablement la plus proche est la suivante:
la source
-k
option est définie dans le shell appelant ,my_script p_out='/some/path' arg_1='5'
le même effet est obtenu. (Tous les arguments sous la forme d'une affectation sont ajoutés à l'environnement, pas seulement les affectations précédant la commande.)x=42 echo $x; echo $x
ce qui signifie que lors de la prochaine exécution demy_script
, sip_out
est omis, il restera à la valeur passée la dernière fois !! ('/some/path'
)unset
, après la première exécution, les réinitialiser avant la prochaine exécution?x=42 echo $x
n'émet même rien si cela$x
n'a pas été défini auparavant.Si cela ne vous dérange pas d’être limité aux noms d’argument à une lettre
my_script -p '/some/path' -a5
, c’est -à- dire que vous pouvez utiliser bashgetopts
, par exemple:Alors tu peux faire
Il existe un didacticiel de petite taille sur getopts ou vous pouvez taper
help getopts
à l'invite du shell.la source
i
etd
). Lorsque je l'exécute avecmy_script -i asd -d asd
une chaîne vide pour l'd
argument. Lorsque je l'exécute, lamy_script -d asd -i asd
chaîne est vide pour les deux arguments.J'ai volé ceci à drupal.org , mais vous pourriez faire quelque chose comme ceci:
Le seul inconvénient est que vous devez utiliser la syntaxe
my_script --p_out=/some/path --arg_1=5
.la source
-c|--condition)
J'utilise ce script et fonctionne comme un charme:
Usage
Résultat de la console:
STEPS et REPOSITORY_NAME sont prêts à être utilisés dans le script.
Peu importe l'ordre des arguments.
la source
Avec
zsh
, vous utiliseriezzparseopts
:Mais vous appelez le script avec
myscript --p_out foo
.Notez que
zparseopts
cela ne prend pas en charge l’abréviation d’options longues ni la--p_out=foo
syntaxe comme GNUgetopt(3)
.la source
[]
il y a 2 tirets? N'a pas de sens!info zsh zparseopts
détailsJe viens de venir avec ce script
transmettez-le comme
my_script --p_out /some/path --arg_1 5
puis dans le script, vous pouvez utiliser$arg_1
et$p_out
.la source
v=``echo ${1} | awk '{print substr($1,3)}'`` typeset $v="$2"
(Supprimer une backtick de chaque côté)Si une fonction ou une application a plus que zéro arguments, elle a toujours un dernier argument.
Si vous voulez lire les paires option drapeau et valeur, comme dans:
$ ./t.sh -o output -i input -l last
Et vous voulez accepter un nombre variable de paires option / valeur,
Et je ne veux pas un énorme arbre "si .. alors .. sinon .. fi",
Puis, après avoir vérifié le nombre d'arguments non nul et égal,
Ecrivez une boucle while avec ces quatre instructions eval comme corps, suivie par une instruction case utilisant les deux valeurs déterminées à chaque passage dans la boucle.
La partie délicate du script est illustrée ici:
la source
vous venez d'injecter des paramètres de ligne de commande dans la portée du script!
la source
-a 1 -b mitsos -c karamitsos