Comment inclure des options dans vos scripts shell Bash


  • FrançaisFrançais


  • Les commandes de terminal ont généralement des options ou des commutateurs, que vous pouvez utiliser pour modifier la façon dont la commande fait ce qu’elle fait. Les options sont incluses dans la spécification POSIX pour les interfaces de ligne de commande. C’est aussi une convention séculaire établie avec les premières applications UNIX, il est donc bon de savoir comment les inclure dans vos scripts Bash lorsque vous créez vos propres commandes.

    Comme avec la plupart des langages, il existe plusieurs façons de résoudre le problème des options d’analyse dans Bash. À ce jour, ma méthode préférée reste celle que j’ai apprise des scripts de construction Slackware de Patrick Volkerding, qui m’ont servi d’introduction aux scripts shell lorsque j’ai découvert Linux pour la première fois et que j’ai osé m’aventurer dans les fichiers en texte brut fournis avec le système d’exploitation.

    Analyse des options dans Bash

    La stratégie d’analyse des options dans Bash consiste à parcourir tous les arguments passés à votre script shell, à déterminer s’il s’agit d’une option ou non, puis à passer à l’argument suivant. Répétez ce processus jusqu’à ce qu’il ne reste plus d’options.

    Commencez par une simple option booléenne (parfois appelée changer ou un drapeau):

    #!/bin/bash

    while [ True ]; do
    if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
        ALPHA=1
        shift 1
    else
        break
    fi
    done

    echo $ALPHA

    Dans ce code, je crée un while boucle qui sert de boucle infinie jusqu’à ce qu’il n’y ait plus d’arguments à traiter. Un if L’instruction tente de faire correspondre n’importe quel argument trouvé en première position ($1) soit --alpha ou -a. (Ce sont des noms d’options arbitraires sans signification particulière. Dans un script réel, vous pouvez utiliser --verbose et -v pour déclencher une sortie verbeuse).

    Les shift le mot-clé fait décaler tous les arguments de 1, de sorte qu’un argument en position 2 ($2) est déplacé en position 1 ($1). Les else L’instruction est déclenchée lorsqu’il n’y a plus d’arguments à traiter, ce qui rompt le while boucle.

    A la fin du script, la valeur de $ALPHA est imprimé sur le terminal.

    Testez le script :

    $ bash ./test.sh --alpha
    1
    $ bash ./test.sh

    $ bash ./test.sh -a
    1

    L’option est correctement détectée.

    Détecter les arguments dans Bash

    Il y a cependant un problème : les arguments supplémentaires sont ignorés.

    $ bash ./test.sh --alpha foo
    1
    $

    Pour intercepter les arguments qui ne sont pas destinés à être des options, vous pouvez vider les arguments restants dans un tableau Bash.

    #!/bin/bash

    while [ True ]; do
    if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
        ALPHA=1
        shift 1
    else
        break
    fi
    done

    echo $ALPHA

    ARG=( "${@}" )
    for i in ${ARG[@]}; do
        echo $i
    done

    Testez la nouvelle version du script :

    $ bash ./test.sh --alpha foo
    1
    foo
    $ bash ./test.sh foo

    foo
    $ bash ./test.sh --alpha foo bar
    1
    foo
    bar

    Options avec arguments

    Certaines options nécessitent un argument qui leur est propre. Par exemple, vous pouvez autoriser l’utilisateur à définir un attribut tel qu’une couleur ou la résolution d’un graphique ou à faire pointer votre application vers un fichier de configuration personnalisé.

    Pour implémenter cela dans Bash, vous pouvez utiliser le shift comme vous le faites avec les commutateurs booléens mais décalez les arguments de 2 au lieu de 1.

    #!/bin/bash

    while [ True ]; do
    if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
        ALPHA=1
        shift 1
    elif [ "$1" = "--config" -o "$1" = "-c" ]; then
        CONFIG=$2
        shift 2
    else
        break
    fi
    done

    echo $ALPHA
    echo $CONFIG

    ARG=( "${@}" )

    for i in ${ARG[@]}; do
        echo $i
    done

    Dans ce code, j’ajoute un elif clause pour comparer chaque argument aux deux --config et -c. En cas de correspondance, la valeur d’une variable appelée CONFIG est défini sur la valeur du second argument (cela signifie que le --config l’option nécessite un argument). Tous les arguments se décalent de 2: 1 pour se décaler --config ou -c, et 1 pour déplacer son argument. Comme d’habitude, la boucle se répète jusqu’à ce qu’il ne reste plus aucun argument correspondant.

    Voici un test de la nouvelle version du script :

    $ bash ./test.sh --config my.conf foo bar
    my.conf
    foo
    bar
    $ bash ./test.sh -a --config my.conf baz
    1
    my.conf
    baz

    L’analyse des options simplifiée

    Il existe d’autres façons d’analyser les options dans Bash. Vous pouvez alternativement utiliser un case déclaration ou le getopt commander. Quoi que vous choisissiez d’utiliser, les options pour vos utilisateurs sont des fonctionnalités importantes pour toute application, et Bash vous facilite la tâche.

    Source

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code