logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
utilisateurs:david5647:tutos:bash-fonctions-liste-de-choix-pour-script-interactifs [24/03/2021 01:21]
David5647 [Choix parmi liste]
utilisateurs:david5647:tutos:bash-fonctions-liste-de-choix-pour-script-interactifs [24/03/2021 17:53] (Version actuelle)
David5647 [Choix parmi liste numérotée]
Ligne 19: Ligne 19:
  
 Finalement, dans la dernière partie (exemple), vous trouverez un script compilant toutes les fonctions à des fins de démonstration. Finalement, dans la dernière partie (exemple), vous trouverez un script compilant toutes les fonctions à des fins de démonstration.
 +
 +**bonus**: pour dé-commenter les scripts:
 +<code user> cat script.sh | sed '/​^\s*#/​d'​ | sed '​s/#​.*$//'​ > script_sans commentaires.sh
 +</​code>​
  
 ===== Question binaire ===== ===== Question binaire =====
Ligne 128: Ligne 132:
  
     # Positional argument should strictly come before named arguments     # Positional argument should strictly come before named arguments
 +    # 1er argument : Question à poser
 +    # 2e argument : Liste des options
 +    # -c|--columns (optionnel) Nombre de colonnes pour l'​affichage
 +    # -d|--default (optionnel) position dans la liste de l'​option à mettre par défaut
  
     QUESTION=$1     QUESTION=$1
-    read -ra OPTIONS ​ <<<​ "​$2"​ # Keep options ​list +    read -ra OPTIONS ​ <<<​ "​$2" ​         Transforme la liste d'options ​en array 
-    read -ra OPTIONS_SHOW <<<​ "​$2"​ # Same list but highlight [default value]+    read -ra OPTIONS_SHOW <<<​ "​$2" ​     Même liste, mais destinée à être modifié pour l'​affichage
  
-    POS_DEFAULT=0 # position ​of default ​argument +    POS_DEFAULT=0 ​                      ​Initialisation : position ​du choix par défaut à défaut de -d|--default 
-    NB_COLUMNS=4 # nummber of element by line to display+    NB_COLUMNS=4 ​                       Initialisation ; nombre de colonnes à défaut de paramètre -c|--columns
  
-    while [[ $# -gt 0 ]] ; do +    while [[ $# -gt 0 ]] ; do           # Tant que le nombre d'​argument ($#) n'est pas épuisé 
-        key="​$1"​+        key="​$1" ​                       # on cherche les clés correspondant aux options (-c et -d)
         case $key in         case $key in
-            -d|--default) +            -d|--default) ​              # Une fois la clé  touvée 
-            POS_DEFAULT="​$2"​ +            POS_DEFAULT="​$2" ​           # On sélectionne l'​argument qui lui succède 
-            shift # past argument+            shift                       ​on "​consomme"/​retire un argument ​de la liste $@
             ;;             ;;
-            -c|--columns)+            -c|--columns) ​              # Même chose pour l'​autre clé
             NB_COLUMNS="​$2"​             NB_COLUMNS="​$2"​
             shift             shift
             ;;             ;;
         esac         esac
-        shift # past value+        shift # past value              # On consomme un argument dans tout les cas
     done     done
  
     # Get new default option and format display     # Get new default option and format display
-    OPTIONS_SHOW[$POS_DEFAULT]="​[${OPTIONS_SHOW[$POS_DEFAULT]}]"​ +    OPTIONS_SHOW[$POS_DEFAULT]="​[${OPTIONS_SHOW[$POS_DEFAULT]}]" ​  # On entoure de [crochet] l'​option par défault 
-    DEFAULT="​${OPTIONS[$POS_DEFAULT]}"​+    DEFAULT="​${OPTIONS[$POS_DEFAULT]}" ​                            # On sauve sa valeur dans une variable
  
     # Get columns character length     # Get columns character length
-    max_length=0 +    max_length=0 ​                                      # Calcul de la taille minimum d'une colonne (toutes les options doivent tenir) 
-    for opt in ${OPTIONS[@]};​ do +    for opt in ${OPTIONS[@]};​ do                       # On itère sur les options 
-        opt_length=$(echo $opt | wc -c) +        opt_length=$(echo $opt | wc -c)                # On compte le nombre de caractères 
-        if [ $opt_length -ge $max_length ]; then +        if [ $opt_length -ge $max_length ]; then       # Si on trouve une chaîne plus grande que la précédente "plus grande", ​ 
-            max_length=$opt_length+            max_length=$opt_length ​                    # on enregistre celle nouvelle taille
         fi         fi
     done     done
-    max_length=$(($max_length+1))+    max_length=$(($max_length+1)) ​                     # 'tite marge supplémentaire
  
-    # Create pattern for fstring +    # Create pattern for printf 
-    FORMAT_STRING=""​ +    FORMAT_STRING="" ​                                     # préparation de la mise en forme de l'​affichage ​ 
-    for i in $(seq $NB_COLUMNS);​ do  +    for i in $(seq $NB_COLUMNS);​ do                       # On concatène "le nombre de colonnes"​ *  
-        FORMAT_STRING="​$FORMAT_STRING %-${max_length}s "+        FORMAT_STRING="​$FORMAT_STRING %-${max_length}s " ​ # la taille min d'une colonne
     done     done
     FORMAT_STRING="​$FORMAT_STRING \n"     FORMAT_STRING="​$FORMAT_STRING \n"
  
     # Show     # Show
-    printf "​$FORMAT_STRING"​ "​${OPTIONS_SHOW[@]}"​+    printf "​$FORMAT_STRING"​ "​${OPTIONS_SHOW[@]}" ​   # On affiche
  
     # Ask user     # Ask user
-    printf "​\x1b[1;​32m$QUESTION\x1b[0m"​ +    printf "​\x1b[1;​32m$QUESTION\x1b[0m" ​            # Un peu de couleur 
-    read -p " [$DEFAULT] : " -r INPUT +    read -p " [$DEFAULT] : " -r INPUT               # On demande une entrée à l'​utilisateur 
-    INPUT=${INPUT:​-${DEFAULT}}+    INPUT=${INPUT:​-${DEFAULT}} ​                     # Si il n'a rien rentré on substitue la valeur avec celle par défaut.
  
     # Collect result     # Collect result
-    if [[ "​${OPTIONS[@]}"​ =~ "​$INPUT"​ ]]; then +    if [[ "​${OPTIONS[@]}"​ =~ "​$INPUT"​ ]]; then      # Si la réponse est valide (dans la liste) 
-        ANSWER=$INPUT+        ANSWER=$INPUT ​                              # On garde la valeur
     else     else
-        ANSWER=$DEFAULT+        ANSWER=$DEFAULT ​                            # Sinon, on prend celle par défaut
     fi     fi
 } }
Ligne 191: Ligne 199:
  
  
-===== Choix parmi liste numérotée =====+===== Choix parmi liste numérotée ​: build-in select ===== 
 + 
 +la build-in select effectue une boucle infinie demandant de choisir parmi une liste, 
 +vous pouvez insérer une instruction **case** ou un nouveau **select** pour faire des sous menus. 
 + 
 +=== Utilisation === 
 + 
 +<file bash _> 
 +numberWithSelect "Votre choix?"​ "arg1 arg2 arg3 arg4 arg5 arg6"​ 
 +</​file>​ 
 + 
 +<​code>​Votre choix? 
 + 1) arg1 
 + 2) arg2 
 + 3) arg3 
 + 4) arg4 
 + 5) arg5 
 + 6) arg6 
 + 
 +#? 5 
 +Vous avec choisi arg5 
 +</​code>​ 
 + 
 +=== Script === 
 + 
 +<file bash numberWithSelect>​ 
 +numberWithSelect () { 
 +     
 +    QUESTION=$1 
 +    read -ra OPTIONS ​ <<<​ "​$2"​  
 + 
 +    echo $QUESTION 
 +    select ANSWER in ${OPTIONS[@]};​ do  
 +        if [ -n "​$ANSWER"​ ]; then 
 +            echo "Vous avec choisi $ANSWER"​ 
 +            break 
 +        else 
 +            echo "Il n'y a pas de tel index!"​ 
 +        fi 
 +    done 
 + 
 +
 + 
 +</​file>​ 
 + 
 + 
 +===== Choix parmi liste numérotée avec valeur par défaut ​=====
  
 ==== Utilisation ==== ==== Utilisation ====
Ligne 215: Ligne 269:
 numberedMenu () { numberedMenu () {
  
-    # $1 = question to ask +    # $1 = Question à poser 
-    # $2 = elements separted by space +    # $2 = liste des éléments séparés par un espace 
-    # S3 (optionnal) = index of defaut element+    # S3 (optionnal) = index de l'​élément par défaut
  
     QUESTION=$1     QUESTION=$1
-    read -ra OPTIONS ​ <<<​ "​$2"​ # Keep options ​list+    read -ra OPTIONS ​ <<<​ "​$2"​ # Obtention de la liste de options
  
-    if [ -n "​$3"​ ]; then+    if [ -n "​$3"​ ]; then       # Si donné par l'​utilisateur (c-à-d variable non vide)
         DEFAULT=$3         DEFAULT=$3
-    else+    else                       # Sinon, valeur par défaut
         DEFAULT=1         DEFAULT=1
     fi     fi
Ligne 230: Ligne 284:
     # Show      # Show 
     printf "​\n"​     printf "​\n"​
-    for i in $(seq ${#​OPTIONS[@]});​ do +    for i in $(seq ${#​OPTIONS[@]});​ do                        # on compte le nombre d'​options 
-        printf ' ​   %3s %s\n' "​$i)"​ "​${OPTIONS[$(($i-1))]}"​+        printf ' ​   %3s %s\n' "​$i)"​ "​${OPTIONS[$(($i-1))]}" ​  # On affiche la position dans la liste et la valeur de l'​option
     done     done
     printf '​\n'​     printf '​\n'​
  
     # ask user     # ask user
-    printf "​\x1b[1;​32m$QUESTION\x1b[0m"​ +    printf "​\x1b[1;​32m$QUESTION\x1b[0m" ​         # Un peu de couleur (gras + vert) 
-    read -p " [$DEFAULT] : " -r INPUT +    read -p " [$DEFAULT] : " -r INPUT            #​ Demande valeur sans retour à la ligne 
-    INPUT=${INPUT:​-${DEFAULT}}+    INPUT=${INPUT:​-${DEFAULT}} ​                  # Substitut par $DEFAULT si réponse vide
  
     # Collect result     # Collect result
utilisateurs/david5647/tutos/bash-fonctions-liste-de-choix-pour-script-interactifs.1616545292.txt.gz · Dernière modification: 24/03/2021 01:21 par David5647

Pied de page des forums

Propulsé par FluxBB