Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
aide sur script
Envoyé par: Assan

Bonjour,

Totalement profane en matière de script shell, j'ai nénamoins besoin d'en créer un. Je seche plutot sur le fond que sur la forme ! smiling smiley

C'est un script qui doit checker des fichiers avec l'extension ABC dans un repertoire. Si un ou plusieurs de ces fichiers sont trouvés alors je lance un action 1.

Lorsque ce fichier qui etait présent ne l'ai plus, je lance une action 2.

J'ai besoin de recuperer le nom du fichier dans les deux cas.

J'ai commencé comme cela (je ne souhaite pas utiliser de boucle), le script sera lancé en crontab. C'est un début... :-/

list=`ls | grep ABC`

for i in $list
do
echo "action 1 sur $i"
done

Mon probleme est que lorsque j'arrive dans la condition, le fichier est present.

Il faut que l'action 2 soit lancée lorsque le fichier qui etait present ne l'ai plus.

Merci de votre aide.

Au départ, il n'y a aucun fichier dans le repertoire.

Poste le Friday 5 January 2007 11:33:53
Répondre     Citer    
Re: aide sur script
Envoyé par: Calou

Dans ces cas, j'utilise souvent la fonction diff.
Donc tu refais ton `ls | grep ABC` > list2
et tu fais un diff list1 list2.
et tu travailles sur le resultat.
(il faut biensur mettre egalement list1 dans un fichier)
C'est la methode que j'utilise habituellement.
A discuter ...

Poste le Friday 5 January 2007 13:37:20
Répondre     Citer    
Re: aide sur script
Envoyé par: Sve@r

Citation
Assan
C'est un script qui doit checker des fichiers avec
l'extension ABC dans un repertoire. Si un ou plusieurs de ces fichiers sont trouvés alors je lance un action 1.

list=`ls | grep ABC`

Si tu cherches un fichier contenant "ABC" dans son nom, tu fais "ls *ABC*". Si tu cherches un fichier contenant l'extension "ABC", tu peux te contenter d'un "ls *.ABC". Mais en tout cas le grep n'est pas utile ici...

Citation
Assan
Lorsque ce fichier qui etait présent ne l'ai plus, je lance une action 2..
Il ne l'est plus pourquoi ? A cause de "action 1" ???
Dans ce cas, une fois l'action 1 faite, tu peux faire
if test ! -f $i
then
    echo "Lancement action 2"
fi

Citation
Assan
Au départ, il n'y a aucun fichier dans le repertoire.
Ben ça part très mal. Tu dis "je cherche les fichiers avec extension ABC" puis tu dis en final "en fait il n'y a aucun fichier" ?-(


L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Saturday 6 January 2007 19:53:23
Répondre     Citer    
Re: aide sur script
Envoyé par: Assan

Je recommence...

A la base, le repertoire est vide. Pas de fichier.

Lorsque le fichier toto_0.ABC apparait dans le repertoire, je veux déclencher l'action 1.

L'action 1 doit permettre de faire disparaitre le fichier.

Les fichiers sont au nombre de 6 : toto_0.ABC, toto_1.ABC, tata_0.ABC, tata_1.ABC, titi_0.ABC, titi_1.ABC

Voici ce que j'ai fais, je lance le script avec le nom du fichier (sans extension) en argument :

#!/bin/sh
set -x

dir=`/usr/local/bin/ssh user@x.x.x.x ls /home/user/log/$1.ABC`

if test ! -n "$dir"
then
# alors action 1
echo "Lancement action 1"
else
# sinon action 2
echo "Lancement action 2"
fi

Le fichier se trouve sur une autre machine d'où le ssh distant.

Poste le Monday 8 January 2007 11:46:02
Répondre     Citer    
Re: aide sur script
Envoyé par: Sve@r

Citation
Assan
Je recommence...

A la base, le repertoire est vide. Pas de
fichier.

Lorsque le fichier toto_0.ABC apparait dans le
repertoire, je veux déclencher l'action 1.

L'action 1 doit permettre de faire disparaitre le
fichier.

Les fichiers sont au nombre de 6 : toto_0.ABC,
toto_1.ABC, tata_0.ABC, tata_1.ABC, titi_0.ABC,
titi_1.ABC

Voici ce que j'ai fais, je lance le script avec le
nom du fichier (sans extension) en argument :

#!/bin/sh
set -x

dir=`/usr/local/bin/ssh user@x.x.x.x ls /home/user/log/$1.ABC`

if test ! -n "$dir"
then
# alors action 1
    echo "Lancement action 1"
else
# sinon action 2
    echo "Lancement action 2"
fi

Bon, tu fais un "ls" d'un certain fichier distant puis tu regardes si la chaîne récupérant le "ls" est vide (là tu peux mettre "-z" plutôt que "! -n"). Si c'est le cas (donc le fichier n'existe pas) tu fais action 1 sinon tu fais action 2.
Le "set -x" est inutile et va t'étouffer d'affichages de débugging donc tu peux l'enlever.

Déjà ton script démontre une certaine habitude du shell (par exemple mettre des guillemets autour de "$dir" dans le test). Moi quand j'étais profane je n'aurais jamais pu écrire ceci. Mais je ne vois pas où est le problème ???
Peut-être mettre un "2>/dev/null" après le "ls" (mais dans le "ssh") histoire de n'avoir pas de remontée d'erreur si le fichier n'existe pas mais c'est du détail...

Si tu veux que ton script surveille en permanence ledit répertoire, il te suffit d'encapsuler tout ton code dans un "while true; do ... done". Tu peux y mettre en plus un petit "sleep 5" juste avant le "done" histoire qu'il te laisse bosser même quand il tourne, voire même mettre un "nice -20" en première ligne histoire que le système le mette le moins prioritaire possible pour pas qu'il te prenne toutes tes ressources CPU...

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Monday 8 January 2007 18:30:30
Répondre     Citer    
Re: aide sur script
Envoyé par: Calou

Excusez moi,
Je croyais dans ma réponse que l'action 1 pouvait effacer ou pas le fichier recherché.
d'ou un deuxieme teste de presence du fichier et comparaison des 2 contenus du 'ls'.

Autant pour moi ?

Poste le Friday 12 January 2007 08:30:17
Répondre     Citer    
Re: aide sur script
Envoyé par: Sve@r

Citation
Calou
Excusez moi,
Je croyais dans ma réponse que l'action 1 pouvait effacer ou pas le fichier recherché. d'ou un deuxieme teste de presence du fichier et comparaison des 2 contenus du 'ls'.
Si action 1 peut effacer le fichier, alors sous action1 un nouveau "ls" te préviendra si le fichier a réellement été effacé. Pas vraiment la peine de comparer les 2 ls...

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Friday 12 January 2007 15:40:33
Répondre     Citer    
Re: aide sur script
Envoyé par: Assan

Bonjour,

J'utilise une table pour lire les fichiers que je recherche :

#!/bin/sh
cat table.txt | while read line
do
file=$line.doc
dir=`/usr/local/bin/ssh user@x.x.x.x ls /home/user/log/$file | cut -d/ -f5 2>/dev/null`

# Si le fichier n'est pas trouve
if test "$dir" = "$line"
# alors KO
then
echo "KO pour $file"
# sinon OK
else
echo "OK pour $file"
fi
done

Mon problème est que mon test distant stoppe le script et je n'obtiens que la réponse de la première ligne.

En remplaçant la ligne en gras par dir= ls $file, toutes mes lignes sont lues. Avec le ls distant, seule la premier l'est.

Pourquoi ?

Poste le Tuesday 27 February 2007 09:32:23
Répondre     Citer    
Re: aide sur script
Envoyé par: nicola

Ta ligne en gras passe ? Tu n’as pas de mot de passe ?

--
On ne prête qu’aux riches, et on a bien raison, parce que les autres remboursent difficilement.
-+- Tristan Bernard (1866-1947) -+-

Poste le Tuesday 27 February 2007 09:37:38
Répondre     Citer    
Re: aide sur script
Envoyé par: Assan

Oui la ligne passe sans probleme, c'est sans mot de passe.

En local :

bash-2.03$ ./test.sh
+ cat table.txt
+ read line
file=ligne1.doc
+ ligne1.doc
./test.sh: ligne1.doc: not found
+ test = ligne1
+ echo KO pour ligne1.doc
KO pour ligne1.doc
+ read line
file=ligne2.doc
+ ligne2.doc
./test.sh: ligne2.doc: not found
+ test = ligne2
+ echo KO pour ligne2.doc
KO pour ligne2.doc
+ read line
file=ligne3.doc
+ ligne3.doc
./test.sh: ligne3.doc: not found
+ test = ligne3
+ echo KO pour ligne3.doc
KO pour ligne3.doc
+ read line

En distant :

bash-2.03$ ./test.sh
+ cat table.txt
+ read line
file=ligne1.doc
+ /usr/local/bin/ssh user@x.x.x.x ls /home/user/log/ligne1.doc
+ cut -d/ -f5
ls: /home/user/log/ligne1.doc: No such file or directory
dir=
+ ligne1.doc
+ test = ligne1
+ echo KO pour ligne1.doc
KO pour ligne1.doc
+ read line

**** là le script s'arrete.


Il ne cherche pas à lire les lignes suivantes de la table, c'est ça mon probleme.



Poste le Tuesday 27 February 2007 10:29:04
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
aide sur script
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons