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 :

Exécution de commandes lues depuis un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2017
    Messages : 29
    Par défaut Exécution de commandes lues depuis un fichier
    Bonjour,

    J'ai créé ce script SH (bash) :
    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
    32
    33
    #/bin/bash --verbose -x
    #!/bin/bash --debug --verbose
    #
    #--VARIABLES--
    #
    FILLOG=/appl/XXX_F1_LOGS/XXX_F1_LOGS_hostname.log
    #
    #--TRAITEMENT--
    echo " -- LECTURE ET EXECUTION COMMANDES--" > $FILLOG
    ligne=0
    resultat=0
    old_IFS=$IFS
    IFS=$'\n\t'
    #
    echo --test_ls_alrt-- >> $FILLOG
    ls -alrt >> $FILLOG
    #
    for ligne in $(cat /appl/XXX_F1_LOGS/hostname_commandes_repair.txt)
    do
    resultat=0
    echo "__" >> $FILLOG
    echo "_commande_a_executer_="$ligne  >> $FILLOG
    $ligne >> $FILLOG #ICI
    resultat=$?
    echo "_RESULAT_COMMANDE_="$resultat >> $FILLOG
    if [ $resultat -gt 0 ]
    then
    echo "_ERREUR_COMMANDE_"$ligne >> $FILLOG
    exit
    fi
    done
    #
    echo " --FIN SCRIPT--" >> $FILLOG
    Il permet de lire un fichier TXT qui contient des commandes Linux.
    Ces commandes sont exécutés et le code de sortie est analysé; si supérieur à 0, alors le script s'arrête.

    MAIS :
    Les commandes contenues dans le fichier TXT qui contiennent un espace ne fonctionnent pas.
    Et j'ai un code de sortie égal à 107.
    J'ai essayé de positionner des caratères, sur $ligne : " ' [ ... sans succès ...

    Pouvez-vous m'aider ?

    Cdlt,

  2. #2
    Membre habitué Avatar de Marcel_Patoulatchi
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    Bonjour ,

    Je ne sais pas si j'ai très bien compris, mais cela ne marche pas mieux en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while read ligne
    do
          #ton traitement (chaque ligne est contenue dans $ligne)
    done < tonfichier
    pour lire ton fichier.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2017
    Messages : 29
    Par défaut
    Le fichier est bien lu.
    Mais les commandes sont bien exécutées lorsqu'il n'y a pas d'espace dans la ligne
    Les commandes ne sont pas exécutées lorsqu'il y a au moins un espace dans la ligne.
    Il faudrait trouver un moyen pour que la commande soit exécutée malgré l'espace dans la commande.

  4. #4
    Membre habitué Avatar de Marcel_Patoulatchi
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    En effet j'ai testé les deux marchent mais comme tu dis les commandes avec espaces sont mal interprétées. J'ai essayé de echo $ligne il contient bien la commande complète. A quoi sert l'IFS dans les scripts ?

  5. #5
    Membre habitué Avatar de Marcel_Patoulatchi
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Par défaut
    Je ne sais pas à quoi servait tes deux lignes avec IFS, mais quand je les met en commentaire le script fonctionne parfaitement, toutes les commandes sont bien executées.

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2017
    Messages : 29
    Par défaut
    J'ai ajouté les paramètres ci-dessous :

    old_IFS=$IFS
    IFS=$'\n'


    ...pour éviter que lorsque la boucle FOR ne trouve un espace, elle scinde la ligne en plusieurs élements...

    Donc, le script ne peut fonctionner si ces paramètres ont omis ....


    Exemple :

    La ligne cd /appl/CDV_F1_LOGS/TESTS

    devient 2 commandes

    cd
    et
    /appl/CDV_F1_LOGS/TESTS


    Donc, ça ne fonctionne pas ...

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

Discussions similaires

  1. Exécuter un commande sur tous les fichiers d'un dossier
    Par Gog077 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/09/2009, 11h55
  2. Réponses: 12
    Dernier message: 28/04/2009, 09h20
  3. exécuter une commande sur tous les fichiers des sous dossiers
    Par Concombre Masqué dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 05/03/2009, 01h15
  4. Exécution de command shell et de fichiers .bat en C#
    Par jerome.fortias dans le forum C#
    Réponses: 6
    Dernier message: 05/09/2007, 14h14

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