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 :

Intégrer un résultat de commande vers un mot et ligne d'un fichier.


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Intégrer un résultat de commande vers un mot et ligne d'un fichier.
    Bonjour à vous j'ai aujourd'hui deux fichiers
    Script A.sh et Afinal.sh

    Le script A demande des informations via des commandes exécuter et lorsque ses commandes sont exécutées j'aimerais les mettre dans le fichier Afinal à une ligne qui est précise.

    Je sais que :

    sed -e '128 r /dev/stdin' Afinal.sh va mettre le résultat de ma commande après la ligne 128
    et que
    sed -i '/argument/a \client' Afinal.sh va mettre le mot "client" après le mot "argument"

    Mais j'aimerai que le résultat de mes commandes sois intégrer comme le fait sed -e'128 r /dev/stdin' Afinal.sh à un seul point près, dans mon fichier Afinal.sh la ligne donc 129 attend le résultat de la commande du fichier A.sh pour la mettre après la commande en ligne 129

    Explication en mode DEV:

    Fichier A.sh actuel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!bin/bash
    cat /etc/passwd | sed -e '128 r /dev/stdin' /tmp/Afinal.sh
    Fichier Afinal.sh actuel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!bin/bash
    for [ true ] ; do
    root:x:0:0:root:/root:/bin/bash
    echo ""
    done
    -------------------------------------------------------------------------------------------------

    Fichier Afinal.sh voulu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!bin/bash
    for [ true ] ; do
    echo "root:x:0:0:root:/root:/bin/bash"
    done
    Quel es la commande que je dois utiliser version SED pour avoir ce résultat ci dessus ?
    Que mon cat /etc/passwd aille bien après la ligne 128 mais au lieu de sauter la ligne, intégrer ce résultat entre les quotes "" de la commande echo.

    Merci à vous j'espère avoir été précis.

    PS : Les commandes citées ne sont pas celles réellement celles du script

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Dj Shorty Voir le message
    Le script A demande des informations via des commandes exécuter et lorsque ses commandes sont exécutées j'aimerais les mettre dans le fichier Afinal à une ligne qui est précise.
    Mouais. Un peu bizarre comme façon de travailler. Généralement on a un script fixe qui fait appel à des paramètres externes (ou à des datas stockées dans un fichier externe) mais on ne fait pas modifier le script par un autre quoi...

    Citation Envoyé par Dj Shorty Voir le message
    Je sais que :

    sed -e '128 r /dev/stdin' Afinal.sh va mettre le résultat de ma commande après la ligne 128
    Non, tel que tu l'as écrit, ça va afficher Afinal.sh jusqu'à la ligne 128 puis ça va lire et afficher le contenu de stdin (donc de ce que tu tapes) puis ça va afficher la fin de Afinal.sh. Il n'y a aucune commande ni aucun résultat ici !!!

    Citation Envoyé par Dj Shorty Voir le message
    Mais j'aimerai que le résultat de mes commandes sois intégrer comme le fait sed -e'128 r /dev/stdin' Afinal.sh à un seul point près, dans mon fichier Afinal.sh la ligne donc 129 attend le résultat de la commande du fichier A.sh pour la mettre après la commande en ligne 129
    A.sh | sed -e '128 r /dev/stdin' Afinal.sh...

    Citation Envoyé par Dj Shorty Voir le message
    PS : Les commandes citées ne sont pas celles réellement celles du script
    Ben oui, ça aurait été trop facile sinon. On te la fait pas à toi hein ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Très bien dans ce cas là.

    J'ai un Script qui vérifie si un paquet est installer et si il n'est pas installer il s'installe puis est configurer via des echo.
    Une fois le paquet installer et configurer, j'exécute des commandes et ses résultats là j'aimerai qu'ils aillent dans un fichier .sh qui aura une boucle à réaliser, bien sur je peut mettre les résultats sur le même fichier de script mais à quoi sa sert qu'à son exécution par la suite il check si le paquet est installé alors qu'il le sera déjà (ex. Reboot machine).
    D'où le fait de faire deux fichier séparer pour que sa sois plus ranger.

    Je précise juste que les personnes qui vont exécutés le script ne sont pas des lumières et donc tout dois être automatiser de A à Z

    Si tu as une idée j'écoute car tu as l'air expérimenter.

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Cela ne justifie pas de tirer des fils électriques de la portière jusqu'au moteur pour que la fermeture de la porte démarre la voiture...

    Ce qui est variable, ce sont les données que tu manipules. Pas le processus. C'est pire que du bidouillage, ta méthode.

    Identifie mieux ton besoin.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ok mais soyez pas non plus aussi dur que sa non plus pourquoi devenir sévère d'un coup. Bref
    Car je me fait répondre d'incapable pour rien pour le moment.

    En faite j'ai un script pour le moment qui va faire une vérification d'un paquet, si il n'existe pas alors il l'installe cela fonctionne très bien.
    J'ai créer un robot.sh aussi qui fait des actions à la main automatiquement.
    Pour faire plus simple j'ai une application en intra qui tourne mais le soucis c'est que plusieurs action au clique sont à faire sous la machine à des heures pas possible et cela sur plusieurs machines, donc des cliques à des endroits différent. Je n'ai pas trop envie chaque jour de faire ses clique sur les machines, donc je fait un script pour faire cela.
    Mon script fonctionne sur ma machine car je fait les test en post prod, mais voilà j'aimerai pouvoir configurer les coordonnées par machine, car chaque machine à sa résolution et donc les coordonnées sont donc modifiées.

    C'est pour cela que je veut faire un script qui pourrais configurer se robot.sh. Comme sa je n'ai plus qu'à aller sur la machine ouvrir mon appli et lancer mon script qui feras la configuration à lui seul en lançant des commandes.

    Pour le moment ce que j'ai réussit à réaliser c'est créer le script qui vérifie si un icmp est possible sur le web sinon configuration des interfaces, vérifie si le paquet est installer sinon il l'installe ensuite il lance le navigateur avec mon lien intra puis ensuite tous les jours à une heure précise en boucle il va exécuté des cliques avec des temps de pause pour les chargements de pages.
    J'ai testé et cela fonctionne.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 201
    Points : 150
    Points
    150
    Par défaut
    Ca ressemble à un malware ce que tu explique non ?

    Remarque si cela correspond à un exercice, pas de soucis, mais sinon, c'est nul...

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    La question demeure. Pourquoi tu ne mets pas ces coordonnées dans un fichier de configuration ?

    Pourquoi un clic plutôt qu'exécuter la fonction qu'il y a derrière ?
    Pourquoi ne pas mettre un cron-job sur cette machine ?
    Pourquoi ton robot est-il si mal fait qu'il n'arrive pas à se repérer tout seul sur l'écran ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  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 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Dj Shorty Voir le message
    Ok mais soyez pas non plus aussi dur que sa non plus pourquoi devenir sévère d'un coup.
    Je t'assure qu'on est très indulgents. La preuve, c'est qu'on te répond. Parce que ceux qu'on juge irrécupérables à eux on leur met "-1" et on ne leur répond tout simplement pas...

    Citation Envoyé par Dj Shorty Voir le message
    C'est pour cela que je veut faire un script qui pourrais configurer se robot.sh. Comme sa je n'ai plus qu'à aller sur la machine ouvrir mon appli et lancer mon script qui feras la configuration à lui seul en lançant des commandes.
    Et pourquoi tu n'écris pas un "robot.sh" capable de lire ce dont il a besoin dans un fichier de configuration ? Comme ça t'as plus besoin de le modifier. Tout ce que t'as à faire, c'est placer le fichier de config au bon endroit. Et t'as même pas besoin de lancer ce robot.sh si tu le mets dans un cron qui te le lance à ta place. Lors du lancement suivant il prend automatiquement en compte sa nouvelle config et basta...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Un Malware qui fait 50 lignes je crois pas non . Quand je dit robot.sh c'est comme automate.sh
    C'est vraiment pour faire tourner une appli en intra sur du PHP et le client veut que sa sois graphique et non par des appel de bouton :/, chacun ses trucs. Le pire c'est que le client risque de me demander de le faire sous Windaube par la suite.

    Pour le reste j'écoute c'est très intéressant, je suis en pleine apprentissage du scripting, j'ai des notions en administration linux et je me met au scripting, depuis 1 ans donc je ne suis pas pro .

    Exécuter la fonction derrière quand on a la source ce qui n'est pas le cas le client se protège la dessus.
    L'outil que j'utilise ne peut pas repérer automatiquement les positions à avoir sauf si je lui dit tien si tu vois le bouton save.png ou .jpg ou .jpeg alors va dessus et ensuite clique.
    C'est déjà assez relou perso de devoir faire tout ce dont on peut faire en ligne de commande, mais la je dois faire une partie sous le shell et une autre sous le shell graphique, car leurs appli sois disant leurs appli exécute aussi des schedules, par la suite je fait des backups de la base de donnée aussi.

    Donc d'après ce que l'on sais on peut directement aller faire chercher des résultats dans un fichier de conf ex : fichier .ini pour introduire la chaine dans mon script.
    Via des variables je suppose ?

    Sve@ar j'aime beaucoup ton idée, tu peux m'en parler un peu plus sur les liaisons entre bash et les fichiers .ini ou si tu as un lien quelque part ?

    Flodelarab je crois que ta réponse c'est juste que peut-être que je m'y prend mal, que l'idée est bonne mais compliqué et/ou il y as mieux que mon idée et plus simple, comme tue le dit avec un fichier de config ou le script irais chercher se résultat.

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Arrête les mensonges. Au bout d'un an de scripting, tu ne sais toujours pas que ton code est faux (ne fonctionne pas) et mal écrit (de toute façon la boucle est mal conçue)
    Fichier Afinal.sh actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!bin/bash
    for [ true ] ; do
    root:x:0:0:root:/root:/bin/bash
    echo ""
    done
    For ne s'applique pas sur le résultat d'une commande.
    Test de n'applique pas non plus à une commande.
    C'est ton fichier actuel ? Qu'est-ce que la commande "root:0:0:root:/root:/bin/bash" fait en plein milieu ?


    La seule chose sur laquelle on peut t'aider, apparemment, c'est à récupérer une chaine de caractère dans un fichier. Encore faudrait-il que tu saches quel fichier, comment il est structuré ...
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Dj Shorty Voir le message
    Un Malware qui fait 50 lignes je crois pas non .
    Suffit de 5 lignes de C pour écrouler ta machine:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main()
    {
        while (1)
            fork();
    }
    Tu compiles, tu lances et là, ton PC se figera => reboot. Alors rajouter ensuite en 45 lignes un outil de scan réseau pour se propager je crois que c'est faisable même en shell...

    Citation Envoyé par Dj Shorty Voir le message
    Sve@ar j'aime beaucoup ton idée, tu peux m'en parler un peu plus sur les liaisons entre bash et les fichiers .ini ou si tu as un lien quelque part ?
    Pas compliqué
    Code source d'un script "mycat.sh" permettant de lire et traiter un fichier texte
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    while read ligne; do
        echo "ligne lue [$ligne]"
    done

    Ensuite, cat /etc/passwd | ./mycat.sh.

    A partir de là, tu peux explorer d'autres possibilités
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    while read ligne; do
        echo "ligne lue [$ligne]"
    done <config.ini
    Ne reste plus qu'à créer le fichier "config.ini" et lancer le script. Ensuite le reste n'est qu'une question d'analyse et de traitement de la ligne lue. Attention quand-même car un .ini possède un format bien à la con (avec ses chapitres et tout le reste) donc peut-être pas évident mais analyser un simple fichier contenant des lignes du type "mot=valeur" c'est un peu plus facile...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Non je ne suis pas un menteur et tu ne réponds pas à la question sauf à te lâcher de tes mauvaises journées sur quelqu'un qui comprend pas tout, peut-être car tu l'ai au boulot j'en sais rien mais remet pas les fautes sur les autres.

    Swe@r
    Pour la construction des fichier .ini oui c'est assez simple et oui je sais que certains malwares sont fait en quelques lignes mais ce n'est pas mon but ici de faire cela.
    Je vais me focaliser a enregistrer les données sur un fichier conf.ini et puis par la suite dans la boucle faire la lecture de ses données pour les exécutées.

Discussions similaires

  1. Redirection de résultat de commande vers un fichier
    Par Julius Cesarus dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 17/01/2010, 13h17
  2. Réponses: 5
    Dernier message: 07/08/2008, 13h01
  3. Réponses: 12
    Dernier message: 04/06/2006, 00h19
  4. Réponses: 13
    Dernier message: 16/11/2005, 13h15
  5. intégrer le résultat de sp_spaceused dans une table
    Par Labienus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/11/2005, 09h18

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