C’est pas très clair. boot/normal sont facultatifs eux aussi ?
De manière générale, quand les options à traiter deviennent un peu complexes il vaut mieux procéder en deux temps :
- vérifier TOUTES les options d’abord (tu stockes le résultat de tes vérifications dans des variables), pour pouvoir arrêter le script et afficher un message d’erreur sans avoir effectué aucune action sur le système
- une fois les options validées, exécuter les actions prévues
Là tu mélanges les deux, tu es donc susceptible d’exécuter les actions correspondant à -k et -n même si ton option boot/normal est erronée.
Sinon, techniquement ce que tu cherches c’est la commande shift qui “enlève” le premier paramètre de la liste des paramètres d’entrée… ($2 devient $1, $3 devient $2 etc).
[code]case “$1” in
boot|normal)
ACTION="$1"
shift
;;
*)
# bien entendu les deux blocs ci-dessous sont mutuellement exclusifs, faut en choisir un seul
# si l'option boot/normal est obligatoire, on affiche un message d'erreur et on quitte :
echo >&2 "Usage: $(basename "$0") ACTION [-k] [-n]"
echo >&2 " où ACTION peut valoir «boot» ou «normal»"
exit 1
# si l'option boot/normal est facultative, on renseigne simplement la variable ACTION et on continue
ACTION=""
;;
esac
OPTION_K=0
OPTION_N=0
while getopts “kn” OPTION; do
case “$OPTION” in
k)
OPTION_K=1
;;
n)
OPTION_N=1
;;
esac
done
c’est juste un exemple de vérification, pas forcément pertinent pour ton cas
if [ “$OPTION_K” = 0 ] && [ “$OPTION_N” = 0 ]; then
echo >&2 "Erreur : -k ou -n doivent être utilisés."
exit 1
elif [ “$OPTION_K” = 1 ] && [ “$OPTION_N” = 1 ]; then
echo >&2 "Erreur : -k et -n ne peuvent pas être utilisés ensemble."
exit 1
fi
à partir d’ici tes options sont vérifiées, tu peux les traiter dans l’ordre que tu veux
(en basant tes tests sur les variables, pas sur les paramètres d’entrée)
[…][/code]