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 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 smile

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