IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script shell automatique


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut Script shell automatique
    Bonjour;

    Je voudrais ecrire un script shell qui me permmette de faire tourner un modèle en lui fournissant différents paramètres, pourriez vous m' aider? :

    Je dispose par exemple d'un fichier texte nommée DATE contenant différentes dates (sous la forme: '2009-01-01 18:00:00.000',) disposées en colonne par exemple, comme ca a chaque fois que l'onn saute une ligne on a une nouvelle date). Je voudrais récupérer cette chaine de caractère.

    0)Récupérer la chaine de caractère du fichier DATE à la ligne i (i allant de 1 à "au moment ou il n'y a plus rien d' écris (donc une ligne vide) et stocker dans une variable date,

    1) Aller dans un répertoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cd /net/nfs/home/pincemai/Bureau/CNRS/Logiciels/Raccord_deux_versions/raccord_v2_20121001/sources
    2) Ouvrir le fichier: param.dat
    ??

    3) Remplacer dans ce fichier la ligne 5, contenant le texte: datef = '2009-01-02 00:00:00.000',, par le texte contenu dans la variable date datef = '2009-01-02 00:00:00.000',
    ??

    4) Enregistrer le fichier : param.dat
    ??

    5) Fermer le fichier: param.dat
    6) Copier le fichier: param.dat dans le répertoire: /net/nfs/home/pincemai/Bureau/CNRS/Resultats
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mv param.dat /net/nfs/home/pincemai/Bureau/CNRS/Resultats
    ,
    7) Retourner dans le repertoire contenant le programme à executer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cd /net/nfs/home/pincemai/Bureau/CNRS/Logiciels/Raccord_deux_versions/raccord_v2_20121001/sources
    8) Exécuter le programme raccord.exe, avec des entrées fournis par le fichier par9) Quand le programme raccord.exe a fini de tourner ,aller dans le répertoire contenant les sorties du programme (est ce que le script va bien attendre la fin de l' exécution du programme ?)
    ??

    10) Réitérer le processus, une boucle tant que ?
    ??


    Merci bcp!!!!!

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    Citation Envoyé par dfshr8 Voir le message
    Bonjour;

    Je voudrais ecrire un script shell qui me permmette de faire tourner un modèle en lui fournissant différents paramètres, pourriez vous m' aider? :

    Je dispose par exemple d'un fichier texte nommée DATE contenant différentes dates (sous la forme: '2009-01-01 18:00:00.000',) disposées en colonne par exemple, comme ca a chaque fois que l'onn saute une ligne on a une nouvelle date). Je voudrais récupérer cette chaine de caractère.

    0)Récupérer la chaine de caractère du fichier DATE à la ligne i (i allant de 1 à "au moment ou il n'y a plus rien d' écris (donc une ligne vide) et stocker dans une variable date
    1) Aller dans un répertoire:
    cd /net/nfs/home/pincemai/Bureau/CNRS/Logiciels/Raccord_deux_versions/raccord_v2_20121001/sources

    2) Ouvrir le fichier: param.dat
    ??
    3)Remplacer dans ce fichier la ligne 5, contenant le texte: datef = '2009-01-02 00:00:00.000', , par le texte contenu dans la variable date datef = '2009-01-02 00:00:00.000',
    ??
    la commande d'edition la plus adaptée est : sed
    sur le principe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo "IIIIIIIIIIYYYYYYYYYIIIIIIIIIII" | sed "s/YYYYYYYYY/"$(echo $date)"/"
    IIIIIIIIIIUUUUUIIIIIIIIIII
    $
    4)Enregistrer le fichier : param.dat
    ??
    5)Fermer le fichier: param.dat
    la fermeture est directe
    6) Copier le fichier: param.dat dans le répertoire: /net/nfs/home/pincemai/Bureau/CNRS/Resultats
    mv param.dat /net/nfs/home/pincemai/Bureau/CNRS/Resultats
    si c'est une copie c'est cp mais tu as compris le principe
    7) Retourner dans le repertoire contenant le programme à executer
    cd /net/nfs/home/pincemai/Bureau/CNRS/Logiciels/Raccord_deux_versions/raccord_v2_20121001/sources

    8)Executer le programme raccord.exe, avec des entrées fournis par le fichier par
    ./raccord.exe <par

    9)Quand le programme raccord.exe a finis de tourner ,aller dans le répertoire contenant les sorties du programme

    cd .../source/res

    10) Réitérer le processus


    Merci bcp!!!!!

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 730
    Points : 31 053
    Points
    31 053
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dfshr8 Voir le message
    9)Quand le programme raccord.exe a finis de tourner ,aller dans le répertoire contenant les sorties du programme (est ce que le cript va bien attendre la fin de l' execution du programme ?)
    Salut

    Oui, c'est un des principes dans la parenté des process Unix. Quand un processus X lance un fils Y, il attend la fin de Y avant de continuer (sauf s'il lui est demandé de ne pas attendre en spécifiant un "&" en fin de ligne)...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Voici le début de mon script et c'est très galère ....... (c'est vraiment pénible le shell)


    #Rappel du contexte: Je voudrais ecrire un script shell qui me permmette de faire tourner un modèle en lui fournissant différents paramètres



    #0)Ok:Aller dans le repertoire contenant le fichier date.txt, contenant toutes les dates (paramètre à modifier dans mon fichier param.dat)
    cd /net/nfs/home/pincemai/Bureau/CNRS/Logiciels/Raccord_deux_versions/raccord_v2_20121001/s_copie/


    #1) récupérer la date à la ligne i (ici i=5) du fichier date.txt et le stocker dans la variable: date_var
    i=5
    var_date= $(sed -n ip date.txt)

    Ici j' ai plein d' erreurs il ne reconnait pas i en tant que variable dans la commande sed,

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 730
    Points : 31 053
    Points
    31 053
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dfshr8 Voir le message
    Voici le début de mon script


    Citation Envoyé par dfshr8 Voir le message
    Ici j' ai plein d' erreurs il ne reconnait pas i en tant que variable dans la commande sed,
    Ben oui, si tu ne spécifie pas quelque part le caractère "$" il ne peut pas "deviner" que tu demandes à récupérer le contenu de la variable...

    Citation Envoyé par dfshr8 Voir le message
    (c'est vraiment pénible le shell)
    Bah, il faut être précis quoi. C'est sûr, si tu n'y travailles qu'une fois tous les deux mois tu auras un peu de mal...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    #1) récupérer la date à la ligne i (ici i=5) du fichier date.txt et le stocker dans la variable: date_var
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     i=5
     var_date= $(sed -n $ip date.txt)
    ne fonctionne pas non plus

    Pensez vous que ce sera plus simple a coder en c (ou en c++) ?

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par dfshr8 Voir le message
    #1) récupérer la date à la ligne i (ici i=5) du fichier date.txt et le stocker dans la variable: date_var
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     i=5
     var_date= $(sed -n $ip date.txt)
    ne fonctionne pas non plus
    Pas d'espace après le signe égale lors d'une déclaration de variable (ni avant non plus).
    Double quoter les variables est une bonne habitude aussi, tout comme les entourer d'accolades, notamment lors de concaténation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var_date=$(sed -n "${i}p" date.txt)

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 730
    Points : 31 053
    Points
    31 053
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dfshr8 Voir le message
    #1) récupérer la date à la ligne i (ici i=5) du fichier date.txt et le stocker dans la variable: date_var
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     i=5
     var_date= $(sed -n $ip date.txt)
    ne fonctionne pas non plus
    Et si tu ne mets pas d'espace après le "="... ? Oui je sais, le shell est pénible, il demande de la rigueur.

    Citation Envoyé par dfshr8 Voir le message
    Pensez vous que ce sera plus simple a coder en c (ou en c++) ?
    Oh que oui. Déjà juste pour ouvrir le fichier et aller lire la ligne 5 il te faudra 15 lignes de prog...

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par dfshr8 Voir le message
    Bonjour;

    Je voudrais ecrire un script shell qui me permmette de faire tourner un modèle en lui fournissant différents paramètres, pourriez vous m' aider? :

    Je dispose par exemple d'un fichier texte nommée DATE contenant différentes dates (sous la forme: '2009-01-01 18:00:00.000',) disposées en colonne par exemple, comme ca a chaque fois que l'onn saute une ligne on a une nouvelle date). Je voudrais récupérer cette chaine de caractère.

    0)Récupérer la chaine de caractère du fichier DATE à la ligne i (i allant de 1 à "au moment ou il n'y a plus rien d' écris (donc une ligne vide) et stocker dans une variable date,
    Déjà, pour commencer la "boucle", comme dirait N_BaH:
    voir Comment lire/parser un fichier en shell.

    Après, on discute...

    tu verras notamment qu'il est inutile (voire nuisible) de vouloir numéroter les lignes et de vouloir se positionner sur la ligne n° ${i}. En shell, on traite l'énumération des lignes d'un fichier d'une tout autre façon!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    bon deja petite question estce qu'il est possible d' aller dans un répertoire directement : (quelque chose du genre cd /sources ou cd */sources) sans écrire le chemin absolue (cd ~/Bureau/sources) ni en spécifiant le chemin relatif

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 594
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 594
    Points : 19 471
    Points
    19 471
    Par défaut
    ça pourrait être ambigu.

    dans un script, je n'en voit même pas l'intérêt : le chemin peut être assigné à une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var="/chemin/vers/sources"
    cd "$var"
    en plus, cd dans un script est rarement utile

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 730
    Points : 31 053
    Points
    31 053
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dfshr8 Voir le message
    Bonjour,

    bon deja petite question estce qu'il est possible d' aller dans un répertoire directement : (quelque chose du genre cd /sources ou cd */sources) sans écrire le chemin absolue (cd ~/Bureau/sources)
    Tu as la variable CDPATH qui est équivalente au PATH mais qui marche pour les déplacements dans les dossiers.
    Exemple
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CDPATH="/var:/usr:/home"
    export CDPATH
    cd log # => si le dossier "log" n'est pas présent dans ton dossier courant alors ça te renvoie sur /var/log ou bien sur /usr/log ou bien sur /home/log (le premier qu'il trouve)...

    Citation Envoyé par dfshr8 Voir le message
    ...ni en spécifiant le chemin relatif
    Euh un chemin quel qu'il soit est forcément toujours absolu ou relatif. Même le "cd log" de mon exemple exprime ici un chemin relatif...

Discussions similaires

  1. Petit Script Shell pour changement de date automatique
    Par 20132014 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 18/06/2013, 13h07
  2. [PowerShell] Connection automatique SSH en script SHELL
    Par elgringo66 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 13/07/2012, 13h39
  3. [[Hp-Ux]] Déclenchement automatique d'un script shell
    Par jlcj85 dans le forum Shell et commandes POSIX
    Réponses: 3
    Dernier message: 08/06/2012, 06h47
  4. Réponses: 3
    Dernier message: 03/05/2011, 09h35
  5. Réponses: 7
    Dernier message: 30/05/2006, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo