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 :

Aide script shell


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Par défaut Aide script shell
    Bonjour,

    J'aurais besoin d'un petit peu d'aide car je dois réaliser un script shell. Cependant, je n'en ais jamais fait!!

    Ce script doit :
    - Copier un fichier dans un autre répertoire
    - Recopie celui-ci dans un autre fichier (nomFichier+date et heure de la copie) en supprimant les sauts de ligne
    - vide le fichier d'origine

    Voici ce que j'ai fait pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #Récupération du fichier à copier
    FICHIER_ORIGINAL = "/apps/webservers/dev3/getex/params/cre/fichier_creMIB.txt"
     
    #Récupération de la date et de l'heure
    DATE_DU_JOUR = 'date +%D%X'
     
    #Copie du fichier vers un autre répertoire
    cp FICHIER_ORIGINAL /apps/webservers/dev3/getex/params/creSave/fichier_creMIB$DATE_DU_JOUR.txt 
     
    #Récupération du fichier recopié
    FICHIER_RECOPIE = "/apps/webservers/dev3/getex/params/creSave/fichier_creMIB$DATE_DU_JOUR.txt"
     
    #Substituer les fins de ligne par des espaces
    sed 's/\n/ /' $FICHIER_RECOPIE

  2. #2
    Membre éprouvé Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Par défaut
    Pour vider un fichier, une simple commande suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo > /chemin/vers/fichier

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Par défaut
    Citation Envoyé par Levi59 Voir le message
    Pour vider un fichier, une simple commande suffit :
    echo > /chemin/vers/fichier
    Ok merci je vais regarder ça.

    Et y a-t'il un moyen de vérifier que les actions faites avant de vider le fichier se sont bien déroulées?

    Car dans mon cas, si la copie a eu un problème, je ne dois pas vider le fichier!
    Et un autre petit problème je pense, la commande "sed" ne modifie pas le fichier mais affiche uniquement le résultat?!
    Comment faire pour que le fichier soit modifié ?

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    1) Il ne faut pas d'espace autour du = pour les affectations
    2) Pour récupérer la sortie d'une commande, c'est `command` et pas 'command'
    3) Pour récupérer la valeur d'une variable, il faut mettre un $ : $FICHIER_ORIGINAL et pas FICHIER_ORIGINAL
    4) sed ne vas pas modifier le fichier que tu passes en argument. Il se contente de le lire, de faire le traitement demandé, et d'envoyer le texte modifié sur sa sortie standard. Pour modifier un fichier il faut soit que tu utilises le flag -i (qui n'est pas standard), soit que tu lises un fichier et que tu rediriges la sortie dans un autre fichier (sed '...' input_file > output_file).
    5) Ton expression sed n'est pas correcte. Utilises plutôt tr (tr '\n' ' ' < input_file > output_file)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Par défaut
    Merci pour toutes ces infos!

    Je viens de modifier mon shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #Vérification de l'existence du répertoire de destination des Cre sauvegardés
    #Si le répertoire existeon ne fait rien
    #Si le répertoire n'existe pas on le creer
    if ! test -d /apps/webservers/dev3/getex/params/creSave
    then
    	mkdir /apps/webservers/dev3/getex/params/creSave
    	chmod 777 /apps/webservers/dev3/getex/params/creSave
    fi
     
    #Récupération du fichier à copier
    FICHIER_ORIGINAL="/apps/webservers/dev3/getex/params/cre/fichier_creMIB"
     
    #Récupération de la date
    DATE_DU_JOUR=`date +%d%m%Y`
     
    #Récupération de l'heure
    HEURE_DU_JOUR=`date +%X`
     
    #Copie du fichier vers un autre répertoire
    cp $FICHIER_ORIGINAL /apps/webservers/dev3/getex/params/creSave/fichier_creMIB-$DATE_DU_JOUR-$HEURE_DU_JOUR 
     
    #Récupération du fichier recopié
    FICHIER_RECOPIE = "/apps/webservers/dev3/getex/params/creSave/fichier_creMIB-$DATE_DU_JOUR-$HEURE_DU_JOUR"
     
    #Substituer les fins de ligne par des espaces
    #sed `tr '\n'''` $FICHIER_RECOPIE $FICHIER_RECOPIE
    tr '\n' '' $FICHIER_RECOPIE $FICHIER_RECOPIE
     
    #Suppression du contenu du fichier
    echo > /apps/webservers/dev3/getex/params/cre/fichier_creMIB
    J'ai de gros doutes au niveau de la commande cp sur la fin où je concatène avec la date et l'heure!!

    Si il y a un problème lors du traitement de la copie ou autre est-ce que le echo sera tout de même exécuté ou pas ?

    Et au niveau de la commande sed étant donné que je veux modifier le fichier est-ce possible de diriger la sortie du sed vers le fichier d'origine afin qu'il écrase ou pas ?

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Ton cp a l'air bon.

    Non, tu ne peux pas modifier le fichier que tu es en train de lire. Dans ton cas puisque tu as de toute façon besoin de copier le fichier, je te suggère de faire les traitements donc tu as besoin pendant la copie, avec par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/bin/tr '\n' '' < $FICHIER_ORIGINAL > $FICHIER_RECOPIE
    Dans ce cas tu n'as évidemment plus besoin du cp.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [aide script shell] renommage de repertoire / sous repertoire / fichier
    Par Smoki dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 05/01/2011, 17h58
  2. aide script shell
    Par ach152 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 10/06/2008, 21h14
  3. Aide script shell unix, creation utilisateur
    Par jazzparadise dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/05/2007, 12h25
  4. Besoin d'aide pour un script shell
    Par lecharcutierdelinux dans le forum Linux
    Réponses: 5
    Dernier message: 20/05/2006, 10h36

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