#1 Le 30/06/2010, à 13:28
- djocin
scipt pour exécuter plusieurs fois un programme
Bonjour
J'ai besoin d'exécuter un programme plusieurs fois, mais celui-ci met beaucoup de temps avant de fournir le résultat. Je voudrais donc écrire un script qui fasse se lancer plusieurs fois de suite le programme, sans que je n'ai à le faire moi même à la main.
En plus, entre chaque exécution du programme, je voudrais :
- renommer un fichier
- recompiler mon programme avec un "make"
- récupérer les fichiers de résultats, et les copier dans un dossier qui sera créé pour l'occasion.
Je voudrais tout ceci pour lancer ce script et revenir le lendemain en ayant des résultats sur lesquels je pourrai travailler (le programme met plus de 3h avant de fournir un résultat).
Merci d'avance de votre aide.
PS : je n'y connais rien du tout en langage scipt, bash, shell, enfin je ne sais pas trop comment dire
Hors ligne
#2 Le 30/06/2010, à 14:15
- gl38
Re : scipt pour exécuter plusieurs fois un programme
Il faudrait apprendre un peu de shell en ligne de commande : voir ici par exemple.
il faut que tu saches faire une boucle pour répéter un programme, renommer un fichier, savoir utiliser l'arborescence des fichiers et si tu veux utiliser make, il va falloir aussi en apprendre un peu dessus.
Ce n'est peut-être pas très compliqué si tu sais exactement ce qu'il faut que tu fasses toutes les 3 heures : il suffit de mettre les commandes que tu tapes dans un fichier, d'en faire un premier script de manière à n'avoir qu'une commande à lancer et à la mettre dans une boucle dans un deuxième script.
Cordialement,
Guy
Hors ligne
#3 Le 30/06/2010, à 14:22
- djocin
Re : scipt pour exécuter plusieurs fois un programme
merci pour le lien, je vais commencer à m'initier
bien sûr si quelqu'un a du temps à perdre qu'il n'hésite pas à me fournir un exemple de script !
Par contre tu dîs qu'il faut que j'en apprenne sur l'utilisation de make, pourquoi ? C'est plus compliqué dans un script que juste écrire "make" ?
Dernière modification par djocin (Le 30/06/2010, à 14:41)
Hors ligne
#4 Le 30/06/2010, à 15:00
- credenhill
Re : scipt pour exécuter plusieurs fois un programme
hello
un exemple avec une boucle 5x
#!/bin/bash
MAX=5
for X in $(seq 1 $MAX) ; do
commande
mv fichier fichier$X
make
mkdir dossier$X
cp fichier$X dossier$X
done
Hors ligne
#5 Le 30/06/2010, à 15:05
- djocin
Re : scipt pour exécuter plusieurs fois un programme
Je vais essayer d'écrire un exemple de script avec ma demi heure d'apprentissage de shell :
#!/bin/sh
./MonProgramme #execution du programme
cp /home/resultat.dat /home/dossier1/resultat.dat # copie des fichiers de résultats dans un nouveau dossier
cp /home/resultat2.dat /home/dossier1/resultat2.dat
rm /home/donnees1.dat # suppression de l'ancien fichier d'initialisation du programme
cp /home/donnees2.dat /home/donnees1.dat # le fichier "donnees2" devient le nouveau fichier d'initialisation du programme
make # compilation du programme
./MonProgramme # re execution du programme
# et ainsi de suite autant de fois que je veux faire la manip
exit 0;
Pouvez-vous me dire si ce script est correct, et s'il semble faire ce que je souhaite ? (je ne peux pas l'essayer dans l'immédiat)
Dernière modification par djocin (Le 30/06/2010, à 15:08)
Hors ligne
#6 Le 30/06/2010, à 15:23
- gl38
Re : scipt pour exécuter plusieurs fois un programme
je crois qu'il manque quelque chose, ton nom par exemple, entre /home et /donnees ou /resultat
et cp ne va pas créer le dossier dossier1 s'il n'existe pas avant
et tu vas perdre tes résultats successifs si tu ne crées pas un dossier dont le nom dépend par exemple de la date et de l'heure.
Cordialement,
Guy
Hors ligne
#7 Le 30/06/2010, à 15:28
- djocin
Re : scipt pour exécuter plusieurs fois un programme
Effectivement pour le chemin des dossiers, c'est plutôt un truc du genre /home/toto/resultat.dat
Je peux créer mes dossiers à la main avant l'exécution, ça n'est pas un problème, mais juste pour savoir, comment les créer dans le script ?
Enfin, j'avais évidemment prévu de donner des noms de dossier différents à chaque fois.
Hors ligne
#8 Le 30/06/2010, à 15:40
- elendil
Re : scipt pour exécuter plusieurs fois un programme
Salut!
Je pense qu'un script de ce genre devrait te convenir.
#!/bin/sh
cd /chemin_de_ton_programme
N=10
for (( i=1 ; i<=N ; i++))
do
./MonProgramme #execution du programme
mkdir /home/toto/dossier$i
cp /home/toto/resultat.dat /home/toto/dossier1/resultat.dat # copie des fichiers de résultats dans un nouveau dossier
cp /home/toto/resultat2.dat /home/toto/dossier1/resultat2.dat
rm /home/toto/donnees1.dat # suppression de l'ancien fichier d'initialisation du programme
cp /home/toto/donnees2.dat /home/toto/donnees1.dat # le fichier "donnees2" devient le nouveau fichier d'initialisation du programme
make # compilation du programme
done
exit 0;
La ligne
cd /chemin_de_ton_programme
te permettra de te placer dans le répertoire où est rangé ton programme. Ce qui peut être utile si tu ne range ppas les scripts au même endrois que tes proogrammes. C'est un détails !
Sinon la commande
mkdir /home/toto/dossier$i
devrait (si je ne plante pas) te ppermetrre de créer un doossier à chaque boucle dossier qui se nommera dossier1 puis dossier2 . . . etc pour chaque boucle !
Hors ligne