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-gerer-les-parametres [24/03/2021 17:04]
David5647 [Introduction]
utilisateurs:david5647:tutos:bash-gerer-les-parametres [24/03/2021 17:20] (Version actuelle)
David5647 [Introduction]
Ligne 8: Ligne 8:
 ===== Introduction ===== ===== Introduction =====
  
-Voici quelques exemples permettant de créer des scripts bash possédants une gestion plus fine des paramètres d'​entrées ​qu'​un ​simple $@.+Voici quelques exemples permettant de créer des scripts bash possédants une gestion plus fine des paramètres d'​entrées ​plutôt que la simple ​utilisation de leur position ($1, $2, ...)
  
 Avec ces scripts, vous pourrez supporter : Avec ces scripts, vous pourrez supporter :
Ligne 18: Ligne 18:
    - Des paramètres booléens    - Des paramètres booléens
      <​code>​./​script -o</​code>​      <​code>​./​script -o</​code>​
 +     
 Le détail de fonctionnement des scripts est inclut en commentaire. Le détail de fonctionnement des scripts est inclut en commentaire.
  
-==== Paramètre booléen ====+**bonus** : pour dé-commenter les scripts : <code user> cat script.sh | sed '/​^\s*#/​d'​ | sed '​s/#​.*$//'​ > script_sans commentaires.sh 
 +</​code>​ 
 + 
 +===== Paramètre booléen ​=====
  
 === Utilisation === === Utilisation ===
Ligne 52: Ligne 55:
  
  
-==== Paramètre & valeur ====+===== Paramètre & valeur ​=====
  
 === Utilisation === === Utilisation ===
Ligne 80: Ligne 83:
 </​file>​ </​file>​
  
-==== Paramètres nommé et court (-p) avec getopts ====+===== Paramètres nommé et court (-p) avec getopts ​=====
  
 **getopts** fait parti des buildins de bash, ce qui permet d'​être sûr son implémentation (dès lors que l'on utilise bash) **getopts** fait parti des buildins de bash, ce qui permet d'​être sûr son implémentation (dès lors que l'on utilise bash)
Ligne 136: Ligne 139:
                                        # itère sur les paramètres type "​-p", ​                                        # itère sur les paramètres type "​-p", ​
 while getopts ${optstring} arg ; do    # ne prend pas en compte les positionnel (arg)  while getopts ${optstring} arg ; do    # ne prend pas en compte les positionnel (arg) 
-                                       # ! le type long (--long) n'est pas accépté ​=> cas '?​)'​+                                       # ! le type long (--long) n'est pas accepté ​=> cas '?​)'​
     case ${arg} in     case ${arg} in
       h)               # Si $arg contient la valeur "​h"​       h)               # Si $arg contient la valeur "​h"​
Ligne 147: Ligne 150:
         ;;         ;;
       a)                         # Si $arg contient la valeur "​a"​       a)                         # Si $arg contient la valeur "​a"​
-        PARAM_A="​${OPTARG}" ​     #​ getopts ​à défini la variable $OPTARG qui contient le paramètre succédant à "​-a"​+        PARAM_A="​${OPTARG}" ​     #​ getopts ​défini la variable $OPTARG qui contient le paramètre succédant à "​-a"​
         ;;         ;;
       b)       b)
Ligne 153: Ligne 156:
         ;;         ;;
       o)       o)
-        OPTION_O='​true' ​         # On ne demanade ​pas de valeur, on passe simplement la variable à ture si l'​option est présente+        OPTION_O='​true' ​         # On ne demande ​pas de valeur, on passe simplement la variable à true si l'​option est présente
         ;;         ;;
       ?)                                      # l'​arugment n'a pas été défini       ?)                                      # l'​arugment n'a pas été défini
Ligne 168: Ligne 171:
 </​file>​ </​file>​
  
-==== Paramètres nommé et court (-p) et arguments positionnels avec getopts ====+===== Paramètres nommé et court (-p) et arguments positionnels avec getopts ​=====
  
 **getops** ne gère pas les arguments positionnels,​ ce script permet leur implémentation **getops** ne gère pas les arguments positionnels,​ ce script permet leur implémentation
Ligne 221: Ligne 224:
     done     done
     ​     ​
-    # getopts itère jusqu'​au premier ​arguement ​positionnel ​+    # getopts itère jusqu'​au premier ​argument ​positionnel ​
     # (c-à-d qui n'est pas sous forme '​-p'​ ou ne correspond pas à une valeur (-p valeur))     # (c-à-d qui n'est pas sous forme '​-p'​ ou ne correspond pas à une valeur (-p valeur))
     #     #
Ligne 228: Ligne 231:
     #     $@ = -a value_a -b value_b arg_1  ...     #     $@ = -a value_a -b value_b arg_1  ...
     #     #
-    # optargs s'​arrète ​à arg_1,+    # optargs s’arrête ​à arg_1,
     # on a traité 4 arguments : '​-a',​ '​value_a',​ '​b'​ et "​value_b',​ et getopts à défini     # on a traité 4 arguments : '​-a',​ '​value_a',​ '​b'​ et "​value_b',​ et getopts à défini
     #     #
Ligne 241: Ligne 244:
  
     ARGS="​${ARGS} $1 " ​   # L'​argument positionnel se retrouve en $1     ARGS="​${ARGS} $1 " ​   # L'​argument positionnel se retrouve en $1
-    shift                 # Une fois récupéré,​ on le conseomme ​et on recommence la boucle jusqu'​à ce qu'il n'y ai plus d'​arguments+    shift                 # Une fois récupéré,​ on le consomme ​et on recommence la boucle jusqu'​à ce qu'il n'y ai plus d'​arguments
  
 done done
Ligne 249: Ligne 252:
 </​file>​ </​file>​
  
-==== Tout type de paramètre ====+===== Tout type de paramètre ​=====
  
 Pour permettre l'​utilisation d'​argument long (--long) ou créer une implémentation compatible POSIX, Pour permettre l'​utilisation d'​argument long (--long) ou créer une implémentation compatible POSIX,
Ligne 270: Ligne 273:
  
 help_msg () { help_msg () {
-    ​echo """​+    ​printf ​"""​
 usage: script [-h] [-o] [-a NAMED_A] [-b NAMED_B] ​ usage: script [-h] [-o] [-a NAMED_A] [-b NAMED_B] ​
  
Ligne 294: Ligne 297:
 # $@ = "​value_a --long_b value_b"​ # $@ = "​value_a --long_b value_b"​
  
-# $# compte le nombre d'​argument restants, et parconséquent ​est réduit de 1 à chaque "​shift"​+# $# compte le nombre d'​argument restants, et par conséquent ​est réduit de 1 à chaque "​shift"​
  
  
Ligne 300: Ligne 303:
 # Soit la commande: ​ # Soit la commande: ​
 # #
-#      ./script.sh -a value_a --long_b value_b -o positionnal+#      ./script.sh -a value_a --long_b value_b -o positional
 # #
-# La variable $@ contient alors "-a value_a --long_ value_b -o positionnal"+# La variable $@ contient alors "-a value_a --long_ value_b -o positional"
  
  
Ligne 313: Ligne 316:
     case $key in            # Teste $key pour les cas suivant:     case $key in            # Teste $key pour les cas suivant:
         -h|--help)         -h|--help)
-            help_msg ​       # execute ​la fonction help ()+            help_msg ​       # exécute ​la fonction help ()
             exit 0          # et quitte le script             exit 0          # et quitte le script
             ;;             ;;
         -a|--long_a) ​       # la clé "​-a"​ est reconnue         -a|--long_a) ​       # la clé "​-a"​ est reconnue
             PARAM_A="​$2" ​   # la valeur du paramètre PARAM_A vient juste après, soit $2             PARAM_A="​$2" ​   # la valeur du paramètre PARAM_A vient juste après, soit $2
-            shift           # consomme un arguement, $@ ne contient plus que "​value_a -b value_b"​ +            shift           # consomme un argument, $@ ne contient plus que "​value_a -b value_b"​ 
-            shift           # consomme un deuxième ​arguement, $@ = "-b value_b"​+            shift           # consomme un deuxième ​argument, $@ = "-b value_b"​
             ;;              # On peut passer au tour suivant, avec $key prenant la valeur $1, soit "​-b"​             ;;              # On peut passer au tour suivant, avec $key prenant la valeur $1, soit "​-b"​
         -b|--long_b) ​       # (2e tour) : $key à la valeur "​-b"​ et est reconnue         -b|--long_b) ​       # (2e tour) : $key à la valeur "​-b"​ et est reconnue
Ligne 336: Ligne 339:
           else                                    # Si la clé commence par "​-"​           else                                    # Si la clé commence par "​-"​
               echo "​Argument non défini : '​$key'"​ #​ C'​est quelle ne fait pas partie de la liste définie plus haut               echo "​Argument non défini : '​$key'"​ #​ C'​est quelle ne fait pas partie de la liste définie plus haut
-              exit 1                              # On arrète ​le programme+              exit 1                              # On arrête ​le programme
           fi           fi
     esac     esac
-done    # FIN! Biensûr ​l'​exemple est arrangé dans le "bon ordre",​ mais la position des arguments n'a pas d'​importance.+done    # FIN! Bien-sûr ​l'​exemple est arrangé dans le "bon ordre",​ mais la position des arguments n'a pas d'​importance.
  
 # Paramètres parsés # Paramètres parsés
-echo "​positional : $POSITIONAL" ​ # Contient : "positionnal+printf ​"​positional : $POSITIONAL ​\n" ​ # Contient : "positional
-echo "​param_a : $PARAM_A" ​       # Contient : "​value_a"​ +printf ​"​param_a : $PARAM_A ​\n" ​       # Contient : "​value_a"​ 
-echo "​param_b : $PARAM_B" ​       # Contient : "​value_b"​ +printf ​"​param_b : $PARAM_B ​\n" ​       # Contient : "​value_b"​ 
-echo "​option_o : $OPTION_O" ​     # Contient : "​true"​+printf ​"​option_o : $OPTION_O ​\n" ​     # Contient : "​true"​
  
 </​file>​ </​file>​
Ligne 351: Ligne 354:
  
  
-==== Séparer les paramètres ====+===== Séparer les paramètres ​=====
  
-Dans le cas de paramètres inconnus à l'​avance,​ ou pour un script plus leger, cette fonction permet de trier les différnet ​arguments en fonction de leur type supposé (positional(//​arg//​),​ named (//-n arg//), option (//-o//)) et les stocke dans 3 variables différentes.+Dans le cas de paramètres inconnus à l'​avance,​ ou pour un script plus leger, cette fonction permet de trier les différents ​arguments en fonction de leur type supposé (positional(//​arg//​),​ named (//-n arg//), option (//-o//)) et les stocke dans 3 variables différentes.
  
 A defaut, un groupe `-n arg` est considéré comme **named** et non comme un **option** + **positional** A defaut, un groupe `-n arg` est considéré comme **named** et non comme un **option** + **positional**
utilisateurs/david5647/tutos/bash-gerer-les-parametres.1616601861.txt.gz · Dernière modification: 24/03/2021 17:04 par David5647

Pied de page des forums

Propulsé par FluxBB