J'utilise getopts
pour tous mes scripts qui nécessitent une parsing avancée des options, et cela a bien fonctionné avec dash
. Je suis familier avec l'utilisation standard de base de getopts
, composée de [-x]
et [-x OPTION]
.
Est-il possible d'parsingr des options comme celle-ci?
dash_script.sh FILE -x -z -o OPTION ## Or the inverse? dash_script.sh -x -z -o OPTION FILE
Les arguments de script viennent généralement après les options. Jetez un oeil à d'autres commands telles que cp
ou ls
et vous verrez que c'est le cas.
Donc, pour gérer:
dash_script.sh -x -z -o OPTION FILE
vous pouvez utiliser getopts
comme indiqué ci-dessous:
while getopts xzo: option do case "$option" in x) echo "x";; z) echo "z";; o) echo "o=$OPTARG";; esac done shift $(($OPTIND-1)) FILE="$1"
Après avoir traité les options, getopts
place $OPTIND
sur l'index du premier argument non-option qui est dans ce cas FILE
.
Getopt réarrangera les parameters et mettra tous les parameters non option à la fin, après --
:
$ getopt -oa: -- nonoption-begin -ax nonoption-middle -ab nonoption-end -a 'x' -a 'b' -- 'nonoption-begin' 'nonoption-middle' 'nonoption-end'
Si vous avez vraiment besoin de savoir qu'un paramètre nonoption est au début, vous pouvez vérifier si $1
est une option, et si ce n'est pas le cas, avant d'appeler getopt
:
if [ ${1#-} = $1 ]; then NONOPTION=$1 shift fi ARGS=$(getopt ...)