bash getopts avec plusieurs options obligatoires
est-il possible d'utiliser getopts pour traiter plusieurs options ensemble? Par exemple, myscript-iR ou myscript-irv.
en outre, j'ai une situation où basé sur un script de condition devrait option obligatoire. Par exemple, si argument to script est un répertoire, je devrai spécifier l'option-R ou-r avec toutes les autres options (myscript-iR mydir ou myscript-ir mydir ou myscript-i-r mydir ou myscript-i-R mydir), en cas de fichier seulement -i est suffisant (myscript-i myfile).
j'ai essayé de chercher mais je n'ai pas eu de réponses.
1 réponses
Vous pouvez concaténer les options que vous fournissez et getopts
va les séparer. Dans votre case
énoncé vous traiterez chaque option individuellement.
vous pouvez mettre un drapeau quand les options sont vues et vérifier pour s'assurer que les "options" obligatoires (!) sont présents après le getopts
boucle terminée.
Voici un exemple:
#!/bin/bash
rflag=false
small_r=false
big_r=false
usage () { echo "How to use"; }
options=':ij:rRvh'
while getopts $options option
do
case $option in
i ) i_func;;
j ) j_arg=$OPTARG;;
r ) rflag=true; small_r=true;;
R ) rflag=true; big_r=true;;
v ) v_func; other_func;;
h ) usage; exit;;
\? ) echo "Unknown option: -$OPTARG" >&2; exit 1;;
: ) echo "Missing option argument for -$OPTARG" >&2; exit 1;;
* ) echo "Unimplemented option: -$OPTARG" >&2; exit 1;;
esac
done
shift $(($OPTIND - 1))
if ! $rflag && [[ -d ]]
then
echo "-r or -R must be included when a directory is specified" >&2
exit 1
fi
ceci représente une implémentation de référence complète d'un getopts
fonction, mais n'est qu'un croquis d'un plus grand script.