2016-09-30 1 views
0

Je suis parfaitement capable de gérer des drapeaux avec des paramètres avec cette syntaxe:Comment puis-je gérer les drapeaux sans paramètres dans bash sans utiliser getopts?

while [[ $# -gt 1 ]] 
do 
key="$1" 

case $key in 

-c) 
ARGUMENT_OF_C_FLAG="$2" 
shift # past argument 
;; 
*) 
;; 
esac 
done 

Comment puis-je utiliser la même syntaxe (sans getopts) à manaage drapeaux sans paramètres?

J'essaie d'utiliser la même syntaxe pour les drapeaux sans paramètre, mais cela n'a pas fonctionné. Par exemple, pour un c drapeau avec le paramètre et d drapeau sans paramètres, j'ai utilisé sans succès

while [[ $# -gt 1 ]] 
do 
key="$1" 
case $key in 

-c) 
ARGUMENT_OF_C_FLAG="$2" 
shift # past argument 
;; 
-d) 
IS_d_FLAG_SET=1 
;; 
*) 
;; 
esac 
done 

Répondre

2

vous devez d'abord tester avec ge pas gt ou vous n'êtes pas entrer dans la boucle quand il n'y a qu'un seul commutateur sans option .

Ensuite, vous devez shift à chaque boucle ou vous aurez boucle infinie

Le shift vous exerciez quand il y a un argument a passé l'option, pas l'argument, et l'erreur a été compensée par gt au lieu de ge pendant ce temps.

while [[ $# -ge 1 ]] 
do 
key="$1" 
case $key in 

-c) 
ARGUMENT_OF_C_FLAG="$2" 
shift # past switch, argument will be skipped by the shift below 
;; 
-d) 
IS_d_FLAG_SET=1 
;; 
*) 
echo "unexpected option $key" 
;; 
esac 
shift 
done 

echo $ARGUMENT_OF_C_FLAG 
echo $IS_d_FLAG_SET 
+0

J'ai remplacé gt par ge et il fonctionne maintenant. Je vous remercie. – user123456

+0

Ne pas oublier le décalage supplémentaire ou vous serez bloqué s'il y a plus d'un interrupteur sans option. J'ai édité mon post. –