Faire un script qui appelle des sous scripts

Hello,

Je réfléchie à un script modulaire, en gros, j’ai un script principal qui pose quelques questions et en fonction des réponses, il va m’appeler des “modules” sous forme de fichier.

Exemple :

Si mon utilisateur répond à la question “type de profil” => “1”, mon script appellera et exécutera tous les modules de type “1” en plus des modules communs à tous les profils (qu’on appellera par exemple “0”).
De la même façon, si il répond “2”, je chargerai et exécuterai les modules de type “2” et “0” (les communs).

Je souhaite procéder ainsi pour n’avoir à toucher le moins possible au script principal, de façon à n’avoir qu’à ajouter des modules supplémentaires pour faire évoluer mon script.
Pour un module type, je pensais à quelque chose du style :

type_module="1 0"
fonction()
retour

Je me pose 2 questions :

  1. J’ai pensé à cette méthode modulaire pour ne pas avoir tous mes “modules” dans le même fichier que mon script… Est-ce une bonne approche ? J’aurais un truc du style main.sh et ./modules/module1 ./modules/module2 ./modules/module3 etc…

  2. Comment appeler proprement mes “modules” dans mon script ?
    Pour le début, je pensais faire un boucle qui allait exécuter chaque module “0” (en faisant une lecture de type_module pour fichier) et ensuite, en fonction du type répondu dans le script principal, n’appeler que les modules spécifiques. Comment verriez vous la chose ?

Merci à vous !

Bonjour

1 pourquoi séparer le module 0 et le questionnaire dans 2 fichiers ?
1 bis et pourquoi ce choix ?

2 Après l’utilisation des modules sélectionnés, est-ce qu’un traitement commun doit suivre après les modifications apportées par ces modules ?

3 Ces modules peuvent-être appelés exactement comme une autre fonction (soit en les rendant exécutables (chmod u+x) soit en les «sourçant».
Dans le 1er cas ils seront exécutés dans un sous-shell, avec la localisation qui s’ensuit, dans le second cas il sera exécuté (s’il est lisible) dans le processus du programme appelant (le questionnaire), avec par exemple comme effet qu’un «exit» fermera ce programme.

Un avantage de modulariser les fonctions dans des fichiers externes est la facilité à générer un programme avant de l’exécuter.
Sinon, pourquoi ne pas mettre dans une fonction ce que vous voulez mettre dans un fichier séparé ?
(Une fonction fonction_1 peut appeler une série de fonctions, et ressembler à un programme séparé)

Pour appeler une série de fichier sur un modèle (ici un numéro), il est possible de faire quelque chose comme:

ou:

Après, il y a des questions de performance et de sécurité

Impatient d’en savoir plus

Il me semble que vous avez oublié de préciser une chose essentielle :

Quel langage de script voulez-vous utiliser ?

Si c’est du shell, quelle variante bash, dash, ksh, csh …

Si autre interpréteur, lequel ? python, ruby, brainf*ck, befunge …

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة

F. Petitjean
Bureau Veritas
01 55 24 75 05
Département Recherche, le département de l’excellence technique

;email.b98;"naej"v

  >,v
  |:<"F. Petit"<

v ,a<

aab1-:2+:c-:7-2/:885++:9-9-:a9++:b-:9+:d-:7a++:1-: aa±:4+:d+:3+:a9±88v
@_,#! #:<+2aa+8+9:-d:+b:-c:+6:-a:-6bb-+2*88:+b:-f:+b:-b:+a:+5:+4:-d:ab<

évidemment envoyer un code befunge98 sans prévenir, (depuis un navigateur qui ne veut pas afficher les images) cela donne un charabia incompréhensible. Voici le script befunge98 qui n’appalle pas de sous-script


\ a lie avec une police non proportionnelle

'# ;email.b98;"naej"v
>,v
|:<“F. Petit”<
v ,a<

aab1-:2+:c-:7-2/:885++:9-9-:a9++:b-:9+:d-:7a++:1-: aa±:4+:d+:3+:a9±88v
@_,#! #:<+2aa+8+9:-d:+b:-c:+6:-a:-6bb-+2*88:+b:-f:+b:-b:+a:+5:+4:-d:ab<

Note pour l’administrateur : il faut absolument avoir un widget texte préformatté qui bascule la police en taille fixe un mode console (Courier/Lucida console/…) c’est fondamental en programmation. De plus on dit n’avoir aucune interprétation de toutes les lignes concernées.
Ainsi une ligne qui commence par ‘# ;email.b98; "neanj"v’ ne doit pas saboter le 1er ‘#’ ni passer en gras.