#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
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
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.
En 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
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)
Si je coince, je referais un post plus spécifique comme tu le conseilles.
Merci pour les infos !
Hors ligne