Je veux appeler myscript
de cette manière :
$ ./myscript -s 45 -p any_string
ou
$ ./myscript -h #should display help
$ ./myscript #should display help
Mes exigences sont les suivantes :
-
getopt
ici pour obtenir les arguments d'entrée - vérifiez que
-s
existe, sinon retour d'une erreur - vérifiez que la valeur après le
-s
est de 45 ou 90 - vérifier que le
-p
existe et il y a une chaîne d'entrée après - si l'utilisateur saisit
./myscript -h
ou simplement./myscript
puis afficher l'aide
J'ai essayé jusqu'à présent ce code :
#!/bin/bash
while getopts "h:s:" arg; do
case $arg in
h)
echo "usage"
;;
s)
strength=$OPTARG
echo $strength
;;
esac
done
Mais avec ce code, j'obtiens des erreurs. Comment le faire avec Bash et getopt
?
6 votes
Les options sont censées être facultatives. Si vous avez besoin de la valeur spécifiée par
-s
pour en faire un argument de position :./myscript 45 anystring
.1 votes
@chepner
$./myscript -s 45 -p any_string
2 votes
C'est bien si
-p
est en fait une option (c'est-à-dire que votre programme peut continuer s'il n'est pas présent). Dans ce cas,./myscript 45 -p any_string
. (Je pense quegetopt
peut gérer des options mixtes et des arguments positionnels, alors que la méthodebash
commande intégréegetopts
exige que tous les arguments positionnels soient placés après les options).