Interpréter les options d’une commande en Bash

Voici une petite trame de code permettant de construire un script Bash prenant des options de type –opt -R -odp.
Ici, il s’agit, selon les options –help, –recursif, –class, –jar, –war et/ou selon leurs versions courtes -hRcjw, de renseigner les variables $RECURSIF, $RES, $CLASS, $JAR et $WAR.

let "lim=$#+1"

while [ $OPTIND != $lim ]
do


    # Traite une suite d'option, modifie les valeurs des variables correspondant en conséquence.
    while getopts "hRcjw-:" OPTION
    do
        # Si l'option est "-" c'est que l'option est de type --opt. Du coup, on isole la partie de OPTARG qui correspond au nom de l'option, c'est à dire ce qui est avant le "=" éventuel (et évidemment les "--" qui ne sont pas dans OPTARG). On teste sur cette base.
        # Dans ${OPTARG%%=*} on supprime la plus grande occurence de "=*" à partir de la fin de OPTARG.
   
        [ $OPTION = "-" ] && case "${OPTARG%%=*}" in
   

            help) OPTION="h" ;;
            recursif) OPTION="R" ;;
            class) OPTION="c" ;;
            jar) OPTION="j" ;;
            war) OPTION="w" ;;
       
            # Pour récupérer un vrai OPTARG au cas échéant :
            # OPTARG="${OPTARG#*=}"
            # On supprime la plus petite occurence de "*=" à partir du début de OPTARG.
            # Pour résumer : avec la forme ${chaineXsous-chaine}
            # X peut être de quatre formes :
            # "%" supprime la plus petite occurence de sous-chaine à partir de la fin de chaine.
            # "%%" plus grande occurence à partir de la fin.
            # "#"  plus petite occurence à partir du début.
            # "##" plus grande occurence à partir du début.
        esac
       
        case $OPTION in
            h)
                usage
                exit 1
                ;;
            R)
                RECURSIF=true
                RES=$RES" récursif"
                ;;
            c)
                CLASS=true
                RES=$RES" class"
                ;;
            j)
                JAR=true
                RES=$RES" jar"
                ;;
            w)
                WAR=true
                RES=$RES" war"
                ;;
            ?)
                usage
                exit
                ;;
        esac   
    done
   
    let "OPTIND++"

done