Pb bête


#1

bonjour a tous,

Voila j’ai besoin de vos lumiere sur un point :slightly_smiling: en faite deux… ou trois:-P

Je dois établir un serveur de recup de config cisco sous deban et j’ai deux trois soucis…

1ere, le serveur tftp…
j’ai suivi de le tuto trouvé ici et je capte pas l’endroit ou doivent allé les fichier? dans le /usr/sbin… mais je cromprends pas ou se créé le repertoire tftp :-/

2ème, je dois mettre en place un script qui compare deux fichiers texte, en programmation je suis comment dire une m**** j’ai trouvé deux trois tuto sur le net… vous en pensé koi?
ca c’est des commandes diverses et ici c’est un package mais je sais pas trop comment l’utiliser
en gros le script doit comparé les deux fichiers et en cas de différence renommé un des fichiers en .old et ce dan 3 ou 4 cas (ex: .old.old.old…)
par contre je sais pas trop quel langage utilisé…

et le 3ème c’est du cron mais la je pense que c’est pas dure je verrais ca après :slightly_smiling:

merci pour vos réponses si vous avait le temps :slightly_smiling:

en attendant désolé pour l’écriture SiMimeSque…

@++ :wink:


#2

Effectivement, Il y a sûrement des packages debian pour comparer des fichiers texte. Mais comme première approche, avec la commande “diff” tu peux déjà faire des trucs utiles et surtout très simples.

Exemple ci-dessous

Je créé 2 fichiers texte pour exemple:

touch fic1 fic2

Je place la string “burp” dans le 1er fichier:
echo burp >fic1

Je place la string “burpe” dans le 2ème fichier:
echo burpe >fic2

Tu vois donc que le 2ème fichier contient une grosse fôte d’haurtografe. Tout le monde sachant très bien que le mot burp ne contient pas de “e” :smiley:

Ensuite, tu testes les 2 fichiers avec la commande “diff”

diff fic1 fic2
1c1
< burp

burpe

Ensuite, tu testes la valeur de retour de la commande diff.
La valeur de retour de la dernière commande exécutée est stockée dans la variable générique $? .

Il suffit donc de mettre dans ton script une condition dans le genre:

if $? == 0 then
echo "Aucune différence entre les fichiers"
elseif $? ==1 then
echo "Différences …"
elseif $? ==2 then
echo "Erreur …"
fi

Quand il y a plusieurs cas possibles, il vaudrait mieux utiliser la commande case qui est beaucoup plus concise et plus propre que la commande if then …

Pour abréger encore le script tu pourrais même mettre tout les instructions dans le test:

if diff fic1 fic2 …

Mais ne brûlons pas les étapes…

Voilà, sans trop programmer, on peut déjà pondre des petites bafouilles en utilisant uniquement les outils du shell qui est une boîte à outils fabuleuse et trop souvent sous-exploitée … :slightly_smiling:

Et quand ton script est au point, c’est là que la crontab s’impose …

Bon amusement !

Jabba

Page man de la commande burp heu … pardon, de la commande diff …
NOM
diff - Trouver les différences entre des fichiers



DIAGNOSTIC
Un code de retour valant 0 signifie qu’aucune différence n’a été trouvée, 1 signifie que des différences sont apparues, 2 indique une erreur.


#3

je v tester ca voir ce que ca peut donner, perseverance… :laughing:

je vais faire un truc du style…

diff fic1 fic2;
{
case 1
{
if $!==0 then
echo “Aucune différence entre les fichiers”
}

case 2
{
if $? ==1 then
echo “Différences …”
}

case 3
{
if $?==2 then
echo “Erreur …”
}
}

il me faudra alors une conditions par defaut pour tous les autres cas possibles… enfin je pense que c la “case 3”

en attendant merci beaucoup d’avoir repondu et @ plus tard…

bon soirée… :wink:


#4

Non, pas tout à fait …

En fait la commande case REMPLACE le if==…
Ce qui donne:

case “$?” in
0)
instructions à faire dans cas de la valeur 0 ;;
1)
instructions à faire dans cas de la valeur 1 ;;
2)
instructions à faire dans cas de la valeur 2 ;;
*)
instructions à faire dans tout les autres cas ;;
esac

Le signe étoile “*” signifie TOUS les autres cas non explicitement prévus, ce qui est tout de même bien pratique …
:slightly_smiling:

Attention, l’instruction CASE n’existe pas dans tous les shells, là je t’ai donné un exemple pour le BASH, qui est le plus souvent utilisé sous linux.

le case n’existe pas dans le Korn shell par exemple.
Et dans le C-shell la synthaxe est différente.

Tu peux changer de shell comm tu veux.

Pour connaître ton shell courant:
echo $SHELL

Pour connaître les variables d’environnement actuellement définies dans ton shell courant:

env


#5

je crois que le
if $!==<> then
{…}
elseif $!==<> then
{…}
else
{…}

fonctionne exactement de la même maniere, et est universel, non ?


#6

Ah, c’est bien possible, mais je trouve le case tellement clean, concis et élégant alors …

Et imagine un cas où proxyo aurait une floppée de cas à traiter. Dans ce cas, je trouve le “case” vraiment idéal …

mais bon, on a tous nos petites préférences, alors … :slightly_smiling:


#7

Oui, les if imbriqués, c’est sale.
Pour ton test, j’utiliserais plutot :
diff fic1 fic2 | wc -l
Si le résultat est égal à 0, pas de différence, si supérieur à 0 il y a une différence

Pour récupérer les fichiers de conf d’un routeur cisco, on utilise un tftp généralement. J’ai mis ça en place au boulot, il me semble que c’est assez simple. J’y jetterais un oeil demain et je t’en reparles.


#8

bonjour
alors… ou en suis je??

la partie recup snmp avec tftp c’est okay g fait un sciprt contenant les executions en gros mon script est le suivant:

“script recuperation de la config par tftp + backup de l’ancienne”

#!/bin/sh

cp /tftp/rout-confg /tftpbackup/rout-confg_olf
snmpset 10.0.0.100 private .1.3.6.1.4.1.9.2.1.55.10.0.0.5 s rout-confg

“script comparer les fichier config”

#!/bin/sh

diff /tftp/rout-confg /tftpbackup/rout-confg-old

if $?==0
then
echo "sans diff"

if $?==1
then 
echo "diff"

if $?==2
then 
echo "erreur"

la ce script plante il me met

donc ben la ca coince :-/

me reste plus qu’a faire ce script remplacé les valeur d’echo par un envoi de mail a l’admin ou non et à mettre en place un cron pour l’automatisation.

apres ben je pense voir theoriquement la snmpv2 car la niveau securrrité ca craint…

enfin tout cas ceci n’ai qu’un projet :wink: et merci pour l’aide que vous avez pu m’apporter… @ plus tard

ProxyO :wink:


#9

On entend souvent des dissonnances entre “if elsif else” et le “case” ou “switch”

Un “case” etant en fait des “if elsif else” il vaut mieux utiliser la deuxieme methode dans ton cas (car tu as peux de cas a gerer) ca fait mon d’appelle systeme. C’est juste une question de rapidite d’execution en fait…

Le case est en revanche plus valable quand tu as bcp de if elsif else a imbrique successivement et en plus c’est tres laid et pas specialement sexy comme code… Question de lisibilite.

J’aurais tendance a te dire de le faire en C (j’avoue avoir une ptite faiblesse pr ce langage) voir en perl ou script shell…
Le C ca demande pas mal de pratique. Si tu as pas l’habitude de coder tu vas mourrir.
Le perl c’est plus soft,plus accessible. Mais le script shell est de loin le plus facile a apprendre!
Si tu connais bien les commandes de shell (sed, cut, cat sont tjrs tres utiles :unamused: ) ca devrait en outre poser moins de pb… A ce sujet j’ai un tres bon tuto sur le script shell dont je me refere assez souvent quand j’ai un pti trou de memoire: http://www.linux-france.org/article/memo/node83.html

voila bon courage…


#10

C’est une application donc tu dois mettre les droits en execution pr ta tronche: $ user> chmod 700 diff.sh

ca ira mieux…


#11

Déjà, j’utiliserais plutot bash comme interpréteur (!#/bin/bash à la premiére ligne)
Par contre, en bash, les tests ne s’écrivent pas comme ça (man test pour voir)
Ensuite, je suis pas sûr que diff renvoie 1 en cas de différenes entre les fichiers. Le code de retour est plutot utilisé pour savoir si le traitement s’est bien passé, là, je pense qu’il faut plutot regarder ce qui est renvoyé sur la sortie standard.


#12

[quote=“BobX”]Déjà, j’utiliserais plutot bash comme interpréteur (!#/bin/bash à la premiére ligne)
[/quote]

:laughing:


#13

[quote=“Echo”][quote=“BobX”]Déjà, j’utiliserais plutot bash comme interpréteur (!#/bin/bash à la premiére ligne)
[/quote]

:laughing:[/quote]

Oui ???


#14

Pourtant, la man page le spécifie clairement, non :question:

NOM
diff - Trouver les différences entre des fichiers



DIAGNOSTIC
Un code de retour valant 0 signifie qu’aucune différence n’a été trouvée, 1 signifie que des différences sont apparues, 2 indique une erreur.

Donc, pas besoin de mettre en route une “usine à gaz” qui analyse STDOUT pour ce genre de test de base …
:smiley:


#15

hum, oui, bon, j’ai rien dit, la prochaine je regarderais le man avant de dire n’importe quoi :laughing:


#16

Ah, j’oubliais, proxyo, évite de nommer tes scripts avec le même nom que les commandes de base UNIX. :angry:

Dans le cas présent, ca ne présente pas de problème, mais dans le cas où tu n’aurais pas ajouté le suffixe “.sh” à ton script. Quel est le diff appelé au moment de l’exécution de ton script ?

/usr/bin/diff
OU
/un_repertoire/diff <-- ton script

:question: :question: :question:

Enfin, tout dépend de l’organisation de ton PATH …


#17

Ya pas de blême …

:laughing:

Euh … Evitons de lancer un troll :slightly_smiling:


#18

[quote=“Jabba”]Ya pas de blême …

:laughing:

Euh … Evitons de lancer un troll :slightly_smiling:[/quote]

aller un troll soyons fou!
moi je me suis juste marre j’ai rien dit :laughing: