-
Créer et importer ses propres modules en Bash
Créer un module
monmodule.sh :
#!/bin/bash function bonjour() { echo "Bonjour, $1!" } # Variables exportables export MODULE_VERSION="1.0" # Fonction privée (avec un préfixe _) _private_helper() { echo "Ceci est privé" } # Fonction principale du module module_main() { echo "Fonction principale du module" }
Importer le module
Méthode 1: Source directe (recommandée)
#!/bin/bash # Importer le module source /chemin/vers/monmodule.sh bonjour "Pierre" echo "Version: $MODULE_VERSION" module_main
Méthode 2: Utilisation de ‘source’ avec vérification
#!/bin/bash MODULE_PATH="/chemin/vers/monmodule.sh" if [[ -f "$MODULE_PATH" ]]; then source "$MODULE_PATH" else echo "Erreur: Module non trouvé" >&2 exit 1 fi
Méthode 3: Importation relative
#!/bin/bash # Importe depuis le même répertoire que le script source "$(dirname "$0")/monmodule.sh"
Bonnes pratiques pour les modules
Namespace :
function monmodule_greet() { echo "Bonjour depuis monmodule!" }
Initialisation du module :
function monmodule_init() { echo "Module initialisé" # Configuration initiale ici }
Documentation intégrée :
function monmodule_help() { cat <<EOF Usage: monmodule_greet [name] - Dire bonjour monmodule_init - Initialiser le module EOF }
Exemple complet
mathutils.sh (module) :
#!/bin/bash function math_add() { echo $(($1 + $2)) } function math_mult() { echo $(($1 * $2)) } function math_show_functions() { declare -F | grep "math_" }
main.sh (script principal) :
#!/bin/bash source ./mathutils.sh res_add=$(math_add 5 3) res_mul=$(math_mult 5 3) echo "5 + 3 = $res_add" echo "5 * 3 = $res_mul" echo "Fonctions disponibles:" math_show_functions
Gestion des erreurs
Dans le module :
function module_check_requirements() { local required_commands=("curl" "jq") for cmd in "${required_commands[@]}"; do if ! command -v "$cmd" &> /dev/null; then echo "Erreur: $cmd n'est pas installé" >&2 return 1 fi done return 0 }
Chargement dynamique
Pour charger uniquement ce dont on a besoin :
#!/bin/bash modules=("network" "files" "math") for module in "${modules[@]}"; do source "./modules/${module}.sh" || { echo "Échec du chargement de $module" >&2 exit 1 } done