====== Les fonctions ====== --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2020/03/12 11:20// Les fonctions sont extrêmement utiles en ''bash''. Elles permettent de clarifier un code et/ou d'éviter la répétition de certaines séquences. ===== Fonctionnement ===== La déclaration d'une fonction est assez rudimentaire. Il suffit de la nommer en la faisant précéder de ''()''. Son code devra ensuite suivre cette déclaration et être encadré par ''{}''. Par la suite, il suffit d'écrire son nom pour l'appeler. Exemple : # déclaration de la fonction du nom => increment increment() { # On ajoute 1 à l'argument local VAR=$(($1 + 1)) # On renvoie le résultat echo $VAR } # Exemple d'appel de la fonction increment 12 # Retour de la console 13 Les fonctions peuvent gérer leurs propres variables. Par défaut, toutes variables déclarées l'est dans son périmètre de déclaration. Autrement, si la variable est déclaré dans le corps du script, elle est utilisable dans tout le script, si elle l'est dans une fonction, elle ne sera utilisable que dans la fonction. Les commandes ''global'' et ''local'' permettent de préciser le périmètre de chaque variable. ===== Utilisation de paramètres nommés ===== Les paramètres nommés sont des arguments prédéfinis permettant de renseigner l'utilité de l'argument suivant ou d'activer une fonction particulière, comme par exemple ''-l'' de la commande ''ls'' ou ''--help'' de la plupart des commandes. Il existe plusieurs méthodes de prise en charge de ces arguments, voici celle que j'utilise (on peut la retrouver dans ma fonction de log, [[bash_addlog|add-log - Ajouter des messages à un fichier log et dans la console]]) : # Dans le cadre de la fonction dont le rôle est d'ajouter un message horodaté et tagué dans un fichier et dans la console. # Ses arguments nommés sont : # -f ou --file qui introduisent le nom du fichier de log # -l ou --level qui introduisent le tag # -m ou --message qui introduisent le message à enregistrer # -v ou --verbose qui active l'affichage dans la console # Gestion des arguments pour la fonction while [[ $# -gt 0 ]] # On crée une boucle qui va lire tous les arguments do LOG_PARAM="$1" # On définie une variable contenant le premier argument case $LOG_PARAM in # On vérifie que cet argument correspond à un paramètre nommé # fichier de logs -f|--file) # Là, c'est le traitement prévu si l'argument est -f ou --file LOG="$2" # On enregistre l'argument suivant dans la variable LOG shift # On utilise shift une première fois pour supprimer le premier argument correspondant au paramètre nommé shift # On utilise shift une seconde fois pour supprimer la valeur donnée au paramètre nommé ;; # Niveau de log -l|--level) # Comme pour -f, c'est ici le traitement de -l et --level LEVEL="$2" shift shift ;; # Message # Comme pour -f, c'est ici le traitement de -m et --message -m|--message) MESSAGE="$2" shift shift ;; # Affichage console -v|--verbose) # Comme pour -f, c'est ici le traitement de -v et --verbose VERBOSE="TRUE" # Cette option n'enregistre pas d'argument supplémentaire mais juste une valeur prédéfinie shift # Du coup, on n'utilise shift qu'une seule fois. ;; # Autres *) # Cette option permet de renvoyer une erreur si on utilise un paramètre nommé non prévu echo "Erreur" exit 2 esac # A ce niveau, la boucle reprend sans les arguments déjà traité, vu que shift les a supprimés et ce jusqu'à ce qu'il n'y en ait plus done # A la fin de la boucle, tous les arguments suivant un paramètre nommé ont été stockés dans une variable et les fonctions spécifiques ont été activées si demandé. La fonction ou script avec paramètres nommés pourra alors être appelé de la manière suivante : add-log -f error.log --level INFO -m "Ceci est un exemple" --verbose ~~DISCUSSION~~