Aller au contenu

Rediriger vers une sortie shell


Bones-75

Messages recommandés

Membre, 23ans Posté(e)
Bones-75 Membre 89 messages
Forumeur activiste‚ 23ans‚
Posté(e)

Bonsoir, 

Je cherche un moyen de faire une redirection de sortie en shell c'est à dire :

Prendre les valeurs enregistrer, puis la mettre dans le dossier "ici.txt" qui se trouve dans le répertoire 

monrep/access/out/ici.txt

Cela dit le répertoire ou se trouve le shell est dans monrep/access/bin/ici.ksh

 j'ai donc effectuer ceci

AAA=echo egrep -o "xxx.xxx.xxx.xxx" ${monfichier}

AAA_FILE=${AAA}  | sed -e 's/.*\abcde[\^[]*\[\([^]]*\)\]^.*$/\1/'

echo ${AAA_FILE} >> monrep/access/out/ici.txt

puis je lance " ./ici.ksh"

et en sortie j'ai :

monrep/access/bin$./ici.ksh

xxx.xxx.xxx.xxx  |----> valeur trouver dans ${monfichier}

mais quand je fais "$cat monrep/access/ici.txt" sa ne m'affiche rien. (?_?) Pourriez vous m'aidez ?

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Membre, Explorateur de Nuages, 46ans Posté(e)
Pheldwyn Membre 22 671 messages
46ans‚ Explorateur de Nuages,
Posté(e)

Alors, je ne suis vraiment pas expert Linux (de très vieilles notions).

Mais

il y a 34 minutes, Bones-75 a dit :

AAA=echo egrep -o "xxx.xxx.xxx.xxx" ${monfichier}

 

Niveau syntaxe, je crois que tu ne peux pas écrire cela ainsi, affecter le résultat d'une commande à une variable.
La syntaxe est normalement 

VAR=$( commande )

.. mais en plus pas sûr que ce soit le plus propre avec un pipe.

 

il y a 34 minutes, Bones-75 a dit :

AAA_FILE=${AAA}  | sed -e 's/.*\abcde[\^[]*\[\([^]]*\)\]^.*$/\1/'

Même remarque, mais en plus il doit manquer un echo devant ton ${AAA}.

Tu peux rajouter des echo de tes variables le long de ton script pour faire des affichages et vérifier ce que tu récupères à chaque étape.
 

... mais sinon à tout hasard : il est trop tard pour que je réfléchisse trop fort :smile2:, mais qu'est censé faire ton script ?
S'il s'agit d'extraire des lignes d'un fichier, de les passer dans un sed pour extraire une partie, et réinjecter cette partie dans un nouveau fichier (ou quelque chose dans ce genre), tu peux directement utiliser sed et ses options, qui te permet de modifier en série toutes les lignes d'un fichier et d'en créer un autre.

Je ne sais plus comment niveau syntaxe (tu as un mode qui modifie directement le fichier ou un mode qui te sort les modifs que tu peux rediriger dans un fichier).

Lien à poster
Partager sur d’autres sites

Membre, 23ans Posté(e)
Bones-75 Membre 89 messages
Forumeur activiste‚ 23ans‚
Posté(e)
il y a 1 minute, Pheldwyn a dit :

Alors, je ne suis vraiment pas expert Linux (de très vieilles notions).

Mais

Niveau syntaxe, je crois que tu ne peux pas écrire cela ainsi, affecter le résultat d'une commande à une variable.
La syntaxe est normalement 


VAR=$( commande )

.. mais en plus pas sûr que ce soit le plus propre avec un pipe.

 

Même remarque, mais en plus il doit manquer un echo devant ton ${AAA}.

Tu peux rajouter des echo de tes variables le long de ton script pour faire des affichages et vérifier ce que tu récupères à chaque étape.
 

... mais sinon à tout hasard : il est trop tard pour que je réfléchisse trop fort :smile2:, mais qu'est censé faire ton script ?
S'il s'agit d'extraire des lignes d'un fichier, de les passer dans un sed pour extraire une partie, et réinjecter cette partie dans un nouveau fichier (ou quelque chose dans ce genre), tu peux directement utiliser sed et ses options, qui te permet de modifier en série toutes les lignes d'un fichier et d'en créer un autre.

Je ne sais plus comment niveau syntaxe (tu as un mode qui modifie directement le fichier ou un mode qui te sort les modifs que tu peux rediriger dans un fichier).

Pour aller droit au but mon script doit pouvoir enregistrer enregistrer des adresse ip dans "monfichier.log" puis les stocker dans un fichier "ici.txt".

Je pense a un mode qui modifie directement le fichier. (^^)

Cela dit il est préférable de détailler ça demains. Bonne nuit

Lien à poster
Partager sur d’autres sites

Membre, Explorateur de Nuages, 46ans Posté(e)
Pheldwyn Membre 22 671 messages
46ans‚ Explorateur de Nuages,
Posté(e)
il y a 1 minute, Bones-75 a dit :

Pour aller droit au but mon script doit pouvoir enregistrer enregistrer des adresse ip dans "monfichier.log" puis les stocker dans un fichier "ici.txt".

Je pense a un mode qui modifie directement le fichier. (^^)

Cela dit il est préférable de détailler ça demains. Bonne nuit

Ah sinon, truc à la con : je ne sais pas si tu as fait des tests avec des xxx.xxx.xxx.xxx .... mais là dans ton topic tu as mis 3x (normal pour une IP), mais dans ton autre topic sur sed, tu testais avec une chaines avec 4x (xxxx.xxxx.xxxx.xxxx) ... ce qui peut déjà faire que rien ne matche.

Lien à poster
Partager sur d’autres sites

Membre, 23ans Posté(e)
Bones-75 Membre 89 messages
Forumeur activiste‚ 23ans‚
Posté(e)
il y a 26 minutes, Pheldwyn a dit :

Ah sinon, truc à la con : je ne sais pas si tu as fait des tests avec des xxx.xxx.xxx.xxx .... mais là dans ton topic tu as mis 3x (normal pour une IP), mais dans ton autre topic sur sed, tu testais avec une chaines avec 4x (xxxx.xxxx.xxxx.xxxx) ... ce qui peut déjà faire que rien ne matche.

(^^) exacte j'en ai mis 4x dans l'ancien, parce que je l'avais fais un peu a l'arrache vu que mon but était d'avoir "n'importe quoi" entre "[]". Mais sinon tous marche correcte dans l'ancien poste.

Lien à poster
Partager sur d’autres sites

Membre, 🐧 Forumeur libre, 54ans Posté(e)
Ed. Membre 958 messages
54ans‚ 🐧 Forumeur libre,
Posté(e)
Il y a 6 heures, Bones-75 a dit :

Pour aller droit au but mon script doit pouvoir enregistrer enregistrer des adresse ip dans "monfichier.log" puis les stocker dans un fichier "ici.txt".

Est-ce que ton script tourne en permanence et enregistre continuellement des adresses IP ou est-ce un script que tu veux lancer ponctuellement pour épurer un fichier log existant ?

S'il s'agit d'une simple transformation d'un fichier vers un autre, quelle forme le fichier de résultat doit-il avoir ? Une adresse IP par ligne ?

Lien à poster
Partager sur d’autres sites

Membre, 23ans Posté(e)
Bones-75 Membre 89 messages
Forumeur activiste‚ 23ans‚
Posté(e)
Il y a 9 heures, Ed. a dit :

Est-ce que ton script tourne en permanence et enregistre continuellement des adresses IP ou est-ce un script que tu veux lancer ponctuellement pour épurer un fichier log existant ?

Oui, en quelque sorte si tu veux le script que je génère devrais pouvoir prendre quelque information dans mon fichier log puis de les mettre dans un fichier ".txt".

en faisant une liste.

-{Date} {MMM} {HHH} {IP}

-{Date} {MMM} {HHH} {IP}

Toute ses information ne seront changer qu'une seul fois, c'est à dire que mon fichier "ici.ksh" seras lancer il devra modifier le fichier seulement si il voit du changement dans "monfichier" sinon ne riens faire.

Lien à poster
Partager sur d’autres sites

Membre, 🐧 Forumeur libre, 54ans Posté(e)
Ed. Membre 958 messages
54ans‚ 🐧 Forumeur libre,
Posté(e)
Il y a 20 heures, Bones-75 a dit :

AAA=echo egrep -o "xxx.xxx.xxx.xxx" ${monfichier}

AAA_FILE=${AAA}  | sed -e 's/.*\abcde[\^[]*\[\([^]]*\)\]^.*$/\1/'

Si tu veux récupérer le résultat d'une commande dans une variable, il faut l'écrire sous la forme :

resultat=$(commande)

Cela dit, je ne comprends pas bien ce que tu cherches à faire avec ces deux lignes de commande ; j'ai l'impression qu'il y a un echo en trop sur l'une et un manquant sur l'autre. Le motif de recherche de egrep me laisse également perplexe.
Je n'ai pas cherché à savoir ce que la regex de sed est censée faire...

Si tu galères trop, essaie de poster un échantillon de ton fichier log source (anonymisé) ainsi qu'un échantillon du fichier à générer. Et éventuellement le script que tu as déjà écrit.

Lien à poster
Partager sur d’autres sites

Administrateur, Clyde Barrow, 40ans Posté(e)
Caez Administrateur 22 364 messages
40ans‚ Clyde Barrow,
Posté(e)

Tu as mélangé la récupération et l'affichage.

Bash est un peu con

AAA=$(egrep -o "xxx.xxx.xxx.xxx" ${monfichier})  ou AAA=`egrep -o "xxx.xxx.xxx.xxx" ${monfichier}`
AAA_FILE=$(echo ${AAA}  | sed -e 's/.*\abcde[\^[]*\[\([^]]*\)\]^.*$/\1/')
echo ${AAA_FILE} >> monrep/access/out/ici.txt

Globalement si ta commande te renvoie un résultat, tu peux la récupérer directement dans ta variable. Il faut juste voir ce qu'affiche ta commande, si c'est du STDOUT ou du STDERR. Ca ne prend par défaut que l'affichage et pas les erreurs

Ensuite si tu mets uniquement ${AAA} bash va executer la commande correspondant à AAA soit ton adresse IP il est donc nécessaire de faire un echo avant de lancer le sed

Je n'ai pas compris exactement ce que tu veux faire pour la mise à jour, mais si tu ne veux écrire dans ici.txt que si une IP n'a jamais été présente, il faut que tu checks avant ton fichier 

par exemple 

#!/bin/bash

egrep -o "1.1.1.1" ${monfichier} > /dev/null 2>&1

if [ $? -ne 0 ]
then
    echo ... > monfichier.txt
fi

On tape une commande, grep, egrep, .... et si on a pas de résultat on réalise le echo
Lorsque tu lances une commande dans ton script le code de retour 0 signifie qu'elle c'est exécutée correctement. Les autres valeurs sont des codes d'erreur 
$? te permet de récupérer le code de retour de la dernière commande lancée.

> /dev/null 2>&1 te permet de rediriger la sortie de la commande et la sortie d'erreur dans /dev/null pour ne pas avoir d'affichage au moment de l'exécution de la commande. 

Si tu veux voir et suivre exactement ce que fais ton script, tu peux le lancer avec l'option -x

bash -x tonscript 

Ca te permettra de voir l'éxécution et de remarquer rapidement ou se trouve ton soucis 

Lien à poster
Partager sur d’autres sites

Membre, 23ans Posté(e)
Bones-75 Membre 89 messages
Forumeur activiste‚ 23ans‚
Posté(e)

Veuillez m'excuser @Caez, @Ed., @Pheldwyn je ne peux divulguer plus d'information sur mon script car les logs ne sont pas les miens elle appartienne à une société dans j'ai la responsabilité de créé un scripte qui me permette de mettre à jours deux firewalls distant.

Je voulais qu' à chaque fois que je rajoute/modifier/supprime une adresse ip d'un serveur de production cella se répète sur l'autre.

et qu'a chaque fois qu'une règle de Firewalls est ajouter/modifier/supprimer concernant un flux de production.

il y a 37 minutes, Caez a dit :

Tu as mélangé la récupération et l'affichage.

D'accord merci pour l'info 

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×