Existe-t-il des outils intégrés qui reconnaîtront -x
et en --xxxx
tant que commutateurs, et non des arguments, ou devez-vous parcourir toutes les variables d'entrée, tester les tirets, puis analyser les arguments par la suite?
shell
shell-script
options
getopts
user394
la source
la source
getopt
doit toujours être vérifié en tant que GNU getopt avant de l'utiliser, mais vous ne devez pas l'utiliser de toute façon car ilgetopts
est plus portable (et généralement plus agréable) de toute façon. Si vous avez besoin d'appeler pour une raison quelconque, l' appeler d'une manière spécifique à GNU, et veiller à ce queGETOPT_COMPATIBLE
n'est pas dans l'environnement.while getopts "ab:" opt
?:
après une lettre d'option signifie qu'elle nécessite un argument. A:
comme premier caractère signifie supprimer les messages d'erreur.Je suppose que vous utilisez bash ou similaire. Un exemple:
la source
+=
avec un tableau. Je ne savais pas que tu pouvais faire ça. Agréable!Vous devez écrire un cycle pour analyser les paramètres. En effet, vous pouvez utiliser la
getopts
commande pour le faire facilement.Ceci est un exemple simple de
getopts
la page de manuel:la source
J'ai récemment écrit un script pour un travail qui était polyvalent et permettait plusieurs types de commutateurs dans n'importe quel ordre. Je ne peux pas divulguer le script complet pour des raisons juridiques évidentes (sans parler du fait que je ne l'ai pas avec moi pour le moment), mais en voici la chair .. vous pouvez le mettre dans un sous-programme et l'appeler à la fin de votre script:
Je recommande de limiter votre script bash à moins de 400 lignes / 15k caractères; mon script susmentionné a dépassé cette taille et est devenu très difficile à travailler. J'ai commencé à le réécrire en Perl, ce qui est beaucoup mieux adapté à la tâche. Gardez cela à l'esprit lorsque vous travaillez sur vos scripts dans bash. Bash est idéal pour les petits scripts et les oneliners, mais quelque chose de plus complexe et vous feriez mieux de l'écrire en Perl.
Remarque, je n'ai pas testé ce qui précède, donc cela ne fonctionne probablement pas, mais vous en avez une idée générale.
la source
options
à la fin n'est pas correcte, elle reviendra-bash: syntax error near unexpected token $@
. Appelez-le commeoptions "$@"
.while
condition ne devrait pas être à la(($#))
place?$#
? Edit: vous avez raison. Fixé àwhile (( "$#" ))