Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/04/2018, à 02:02

topiquette

Variables de configuration directement dans le script

Bonjour à tous !

Je suis nouveau dans le scripting et je suis en train de m'arracher les cheveux sur un "problème/challenge" donc je viens quérir votre aide en espérant ne pas vous brûler les yeux et être relativement clair roll

J'ai fait un script d'installation (qui fonctionne) pour monter un serveur apache avec menu pour les différentes étapes de l'installation/configuration spécifique. Certaines parties du script vont le fermer (par exemple un test non ok) et il faut le relancer. Je me suis dit qu'il serait bien (et aussi pour apprendre) que sur chaque ligne du menu soit indiqué si l'action a déjà été effectuée.
Je suis parti sur une idée basique pour commencer de prendre une suite binaire où chaque bit serait une étape (0= pas fait, 1 = fait) pour afficher à la fin de chaque ligne "[FAIT]" et je suis parti sur ce ptit bout-là comme squelette de base pour tester :

L'idée est d'utiliser le script que je lance comme fichier de conf par l'intermédiaire d'une ligne au début puis la création d'un tableau pour les manipulations ultérieures (aussi bien pour apprendre que par commodité pour les utilisateurs du script qui n'auront qu'un fichier à supprimer une fois l'installation finie) :

#!/bin/bash
# la ligne suivante c'est "mon fichier" de conf
#conf#0000000000

declare -a vTab
for i in `seq 0 9`;
do
        vTab[$i]=0
done

Ensuite dans la boucle l'idée est d'aller modifier la ligne de conf par un sed et c'est là que ça coince....
-> chercher la ligne qui commence par "#conf#" puis passer le bit désiré à "1"

while :
do
clear
echo -e "Valeurs de la conf :"
echo -e "--------------------"
cat script.sh | grep "#conf#" | head -n 1
echo -e " "
read -p "Quel bit doit être changé ? " vBit
sed -i -e "s/^#conf#(.${vBit})0(.*)/^#conf#(.${vBit})1(.*)/g" script.sh
done

Merci par avance pour vos lumières big_smile

Hors ligne

#2 Le 28/04/2018, à 02:52

Watael

Re : Variables de configuration directement dans le script

salut,

ça me semble inutilement compliqué.

avec un tableau task=( tâche_1 tâche_2 tâche_n+1)
et un autre success=( " succès" "échec" )
si une étape est complétée, alors fini+=( 0 ), sinon fini+=( 1 )
lorsque le script est interrompu ou fini, tu énumères le tableau task

for t in ${!task[@]}
do
   echo "${task[t]} ${success[${fini[t]:-1}]}"
done

KISS

Dernière modification par Watael (Le 28/04/2018, à 02:53)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 28/04/2018, à 13:28

topiquette

Re : Variables de configuration directement dans le script

Hello Watael,

Merci pour ta réponse.
L'idée était vraiment de faire fonctionner sed et de voir comment écrire dans le script directement mais je n'y arrive toujours pas (si j'ai bien compris, énumérer le tableau ne gardera pas vraiment de trace de ce qui a été fait si le script est arrêté ou si le serveur redémarre).
Ce n'est en effet peut-être pas la meilleure façon de faire mais je voulais suivre cette logique pour le moment (et je compte bien améliorer mon script une fois que j'aurai un peu de bouteille).

Mais si qqun a une idée d'où vient mon erreur je suis preneur roll

Edit pour précision :
le script peut sembler brouillon mais c'était juste pour le test.
A terme l'idée est de lancer le sed à chaque fin d'étape pour mettre à jour le bon bit et dans la première boucle au démarrage du script je pense utiliser un awk pour mettre les champs du menu à jour avec un joli "[FAIT]" derrière.

Dernière modification par topiquette (Le 28/04/2018, à 13:34)

Hors ligne

#4 Le 28/04/2018, à 13:52

Zakhar

Re : Variables de configuration directement dans le script

Ton idée est "presque" bonne !

Nous faisons comme cela dans un logiciel de notre entreprise, mais le marquage de l'étape où en est le script est dans un fichier annexe.

Modifier le script lui-même n'est en effet pas une bonne idée, et tout un tas de mauvaises choses peuvent arriver comme un coupure au mauvais moment qui va tronquer ton script parce que tu étais en train d'écrire dedans.

L'idée est donc plutôt, si ton script est foo.sh, d'écrire l'étape où tu en es dans le script dans le même

foo.step

. Le mieux est même d'écrire en append, histoire d'éviter qu'en cas de plantage le fichier étape soit vide.

Le script va alors au début rellire foo.step, et se repositionner à la dernière étape inscrite dans le fichier (si cela fait du sens dans la logique du script).

De la sorte tu n'as aucun besoin de sed, mais juste d'un echo ou printf avec une redirection append (>>).

Bien sûr, si le but est d'apprendre à manipuler sed, le mieux est que tu fasses un autre post avec ce but là et les fonctions que tu veux faire sans y arriver.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#5 Le 28/04/2018, à 14:16

topiquette

Re : Variables de configuration directement dans le script

Hello Zakhar,

Je préfère le principe de l'affichage (pour ce cas précis) car il peut être nécessaire de revenir en arrière et une fois le problème corrigé de relancer une partie déjà exécutée.

Par contre je viens en te lisant de penser que je peux créer un fichier de conf à part et le supprimer dans la dernière partie une fois que tout s'est bien déroulé et là en effet ça serait plus propre.
Je vais plancher là-dessus avec append et un fichier mais je vais aussi garder l'idée du sed (je veux apprendre à dompter cette ptite bête) big_smile
Si je coince, je referais un post plus spécifique comme tu le conseilles.
Merci pour les infos !

Hors ligne