Je veux utiliser à la fois getopts
et les paramètres de position, mais si je passe dans un paramètre positionnel au programme, les getopts
se perdent.Comment combiner les getopts et les paramètres de position dans bash?
directory=$1
while getopts l: flag; do
case "$flag" in
l) level=$OPTARG;;
esac
done
if [ -n "$level" ]; then
echo "Level exist!"
else
echo "Level doesn't exist!"
fi
Alors, quand je lance le programme comme celui-ci:
sh myprogram.sh ~/documents -l 2
Je me attends:
Level exist!
Et mais retourne:
Level doesn't exist!
La chose est, si je lance le programme sans le paramètre de position (~/documents) comme ceci:
sh myprogram.sh -l 2
-je obtenir la sortie correcte:
Level exist!
Pourquoi est-ce ? Comment puis-je utiliser les deux paramètres positionnels et getopts
dans bash?
Merci!
Si vous êtes sûr que le premier paramètre de position va être votre répertoire, vous pouvez il suffit d'utiliser 'shift' après l'affectation' directory = $ 1'. Mais, comme indiqué, il est probablement préférable de suivre simplement la pratique établie. –