La commande shell et des arguments à cette commande apparaissent comme numérotées variables shell: $0
a la valeur de chaîne de la commande elle - même, quelque chose comme script
, ./script
, /home/user/bin/script
ou autre chose. Tous les arguments apparaissent comme "$1"
, "$2"
, "$3"
et ainsi de suite. Le nombre d'arguments est dans la variable shell "$#"
.
Les moyens habituels de gérer cela impliquent des commandes shell getopts
et shift
. getopts
ressemble beaucoup à la getopt()
fonction de bibliothèque C. shift
déplace la valeur de $2
to $1
, $3
to $2
, etc. $#
se décrémente. Le code finit par regarder la valeur de "$1"
, faire les choses en utilisant un case
… esac
pour décider d'une action, puis en faisant shift
passer $1
à l'argument suivant. Il n’ya qu’à examiner $1
, et peut-être $#
.
getopt()
est un standard extrêmement bien établi, mais l’getopt
exécutable n’est pas le même d’une distribution à l’autre. Je suis maintenant ungetopts
utilisateur entièrement converti , car il s'agit d'un standard POSIX. Cela fonctionne très biendash
aussi, qui est mon shell de script préféréVous pouvez accéder aux arguments passés avec
$n
oùn
est le numéro de l'argument -1, 2, 3, ...
. Vous transmettez les arguments comme vous le feriez avec n'importe quelle autre commande.la source
Vous pouvez également transmettre la sortie d'un script shell en tant qu'argument à un autre script shell.
Dans un script shell, vous pouvez accéder aux arguments avec des nombres comme
$1
pour le premier argument et$2
pour le second argument, etc.Plus sur les arguments du shell
la source
La forme
est le plus pratique pour
argv
. Le délimiteur arg est un espace, mais peut être modifié. Je ne me souviens pas à quel point Puis utiliserpour contrôler le flux. Je n'embrasse généralement pas getopts si
case ... esac
cela suffit.la source
Sur un script bash, j'aime personnellement utiliser le script suivant pour définir les paramètres:
Avec cette structure, nous ne dépendons pas de l'ordre des paramètres, car nous définissons une lettre clé pour chacun d'eux. De plus, la fonction d’aide sera imprimée toutes les fois où les paramètres sont définis de manière erronée. C'est très utile lorsque nous avons beaucoup de scripts avec différents paramètres à gérer. Cela fonctionne comme suit:
la source
myargument
devient à l'$1
intérieurmyscript
.la source
Dans le script shell; il devient le nom de variable $ 1. Le deuxième mot devient le nom de variable $ 2 et ainsi de suite.
Plus peut-être trouvé dans le shell (sh) manual à http://heirloom.sourceforge.net/sh/sh.1.html
la source
Si vous connaissez Python argparse, et que cela vous est égal d'appeler python pour analyser les arguments bash, utilisez bash argparse ( https://github.com/mattbryson/bash-arg-parse ),
Voir la même réponse ici: https://stackoverflow.com/questions/7069682/how-to-get-arguments-with-flags-in-bash-script/50181287#50181287
la source
la source
2> /dev/null
, 2) n'ajoute rien aux réponses existantes.