[KSH] - Probleme de condition

Résolu
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Au risque de passer pour un neuneu, j'avoue cette condition ne fait pas ce que je souhaite. En resumer, je voudrais tester dans 3 répertoires distinct si il y a au moins un fichier *_EOF. S'il y en a au moins 1, je lance le traitement.

Ex :

REP1/*_EOF (non)
REP2/*_EOF (non)
REP3/*_EOF (non)

=>Je ne fais rien.

REP1/*_EOF (non)
REP2/*_EOF (oui)
REP3/*_EOF (non)

=>Je lance le traitement.

Voici le code que j'utilise :
if [ ! -f ${DIR_TAMPON_REF}/*_EOF && ! -f  ${DIR_TAMPON_IMG}/*_EOF && ! -f ${DIR_TAMPON_IMG}/*_EOF ];then
  echo "rien a traiter"
else
  echo "des fichiers a traiter"
fi


Je precise que je mets bien deux crochets ouvrants et fermants, mais si je le met comme ça dans le message, il me creer un lien ??

Si quelqu'un pouvais m'aider ce serait sympa.

Merci d'avance

4 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
Hi
Je pense que les wild card *_EOF ne fonctionnent pas comme esperé dans un test.
Pourquoi ne pas utiliser la commande find et tester si elle trouve un fichier EOF ?
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9
 
Salut,

Déjà, merci pour ta réponse.

Effectivement, je me suis demandé si cela ne venait pas de là, mais lorsque je fais :

# --- On verifie qu'il existe au moins un flag _EOF dans un des repertoires tampon
if [ ! -f ${DIR_TAMPON_REF}/*_EOF ];then
  echo "Pas de fichier de reference"
else
  echo "un ficheir de ref"
fi


le test fonctionne très bien.

Sinon, si je ne trouve pas de solution, je ferais des find, mais je trouve ça plus lourd que le test '-f'.

En tous les cas, merci pour ta réponse rapide.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Et en testant le code retour d'un "grep" via un "ls -R" ???
$ ls -R
.:
data/  text_ABC

./data:
repA/  repB/  repC/  repD/

./data/repA:
file1_EOF  file1.txt  file2_EOF  file2.txt

./data/repB:
jp.txt

./data/repC:
file1_EOF  file1.txt  file2_EOF  file2.txt

./data/repD:

$ ls -R data/ | grep _EOF >/dev/null; if [ "$?" == "0" ];then echo "OK";else echo "NOK";fi

OK

$ ls -R data/ | grep _ABC >/dev/null; if [ "$?" == "0" ];then echo "OK";else echo "NOK";fi

NOK

$  
;-))
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9
 
Bonjour jipicy,

Je vais finir par croire que c'est toi qui à inventé le shell ;-)

Sinon, ta solution est super, mais puis-je en profiter pour te poser une question par rapport à ta solution ?

Est-ce qu'on peut forcer le grep à ne rechercher que ce qui se termine par _EOF ?

Je m'explique : Les utilisateurs ont souvent comme reflex, pour supprimer un flag, de le renommer en *_EOF-- par exemple. Dans ce cas, je risque donc de les traiter quand même.

En tous les cas merci à tous pour votre aide.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
grep "_EOF$"
Un exemple :
$ ls -R

.:
data/  essai.sh*  text_ABC

./data:
repA/  repB/  repC/  repD/

./data/repA:
file1_EOF  file1.txt  file2_EOF  file2.txt  file3_EOF~

./data/repB:
jp.txt

./data/repC:
file1_EOF  file1.txt  file2_EOF  file2.txt

./data/repD:
$ ls -R | grep "_EOF$"

file1_EOF
file2_EOF
file1_EOF
file2_EOF

$  
;-))
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Super, ça marche Nickel

Merci encore pour votre aide
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
De rien ;-))
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Bonjour,

Désolé, je sais que j'avais mis le post en résolu, mais il me resterais une petite question par rapport à la réponse de jipicy.

Est-ce qu'on peut mettre le contenu d'une variable dans une expression réguliere ?

Ex :

grep '^${SelRef}\.[0-9][0-9][0-1][0-9]$'


Quand je passe cette commande, il ne trouve rien, alors qu'il y a bien un fichier de cette forme :-(

Merci pour votre aide,

Gorki
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
re-

Essaye :
 grep -E ${SelPre}'_(BILL|CONT)(\.[0-9]{4})*$'
;-))
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9
 
Salut jipicy,

J'ai essayer ta commande (en ajoutant /usr/xpg4/bin devant le grep, est-ce c'est normal ? et en modifiant legerement l'expression :
${SelPre}'_(BILL\.[0-9]{4}|CONT)*$'
), elle fonctionne à mervaille sauf dans un cas :

bash-3.00$ test.ksh
 SELECTIONS_BILL.0704 : Fichier à traiter
 SELECTIONS_CONT : Fichier à traiter
 TOTATASELECTIONS_CONT : Fichier à traiter
 PREIMPRIME_BILL.0704 : Fichier à traiter
 PREIMPRIME_CONT : Fichier à traiter


Tu aurais une idée pour pas qu'il me prenne TOTATASELECTIONS_CONT ?

Merci pour ton soutient
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
(en ajoutant /usr/xpg4/bin devant le grep, est-ce c'est normal ?
Oui
Les commandes standards Solaris ont beaucoup moins d'options que les commandes équivalentes Linux.
Les CDs / DVDs d'installation Solaris contiennent un disque avec les commandes GNU/Linux compilées. Demander au Sys admin.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Ben c'est bizarre :-\

Chez moi ça marche :
[jp@MDK rep]$ ls

PREIMPRIME_BILL.20  PREIMPRIME_BILL.28    PREIMPRIME_BILL.4055  SELECTIONS_BILL.1001  SELECTIONS_BILL.1009
PREIMPRIME_BILL.21  PREIMPRIME_BILL.29    PREIMPRIME_BILL.4056  SELECTIONS_BILL.1002  SELECTIONS_BILL.1010
PREIMPRIME_BILL.22  PREIMPRIME_BILL.30    PREIMPRIME_BILL.4057  SELECTIONS_BILL.1003  SELECTIONS_CONT
PREIMPRIME_BILL.23  PREIMPRIME_BILL.4050  PREIMPRIME_BILL.4058  SELECTIONS_BILL.1004  TOTATASELECTIONS_CONT
PREIMPRIME_BILL.24  PREIMPRIME_BILL.4051  PREIMPRIME_BILL.4059  SELECTIONS_BILL.1005
PREIMPRIME_BILL.25  PREIMPRIME_BILL.4052  PREIMPRIME_BILL.4060  SELECTIONS_BILL.1006
PREIMPRIME_BILL.26  PREIMPRIME_BILL.4053  PREIMPRIME_CONT       SELECTIONS_BILL.1007
PREIMPRIME_BILL.27  PREIMPRIME_BILL.4054  SELECTIONS_BILL.1000  SELECTIONS_BILL.1008
[jp@MDK rep]$ SelPre=SELECTIONS

[jp@MDK rep]$ ls * | grep -E ${SelPre}'_(BILL|CONT)(\.[0-9]{4})*$'

SELECTIONS_BILL.1000
SELECTIONS_BILL.1001
SELECTIONS_BILL.1002
SELECTIONS_BILL.1003
SELECTIONS_BILL.1004
SELECTIONS_BILL.1005
SELECTIONS_BILL.1006
SELECTIONS_BILL.1007
SELECTIONS_BILL.1008
SELECTIONS_BILL.1009
SELECTIONS_BILL.1010
SELECTIONS_CONT
TOTATASELECTIONS_CONT

[jp@MDK rep]$
;-))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Oups... j'ai mal interpretationné ta demande...
ls * | grep -E ^${SelPre}'_(BILL|CONT)(\.[0-9]{4})*$'
;-))
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Salut Jipicy,

Super, ça marche impeccable. Merci beaucoup pour ton aide. Grace à toi je n'aurais pas à acheter un perruque parcequ'à force de s'arracher les cheveux !!!

Merci aussi à dubcek pour sa réponse sur les commandes et leur emplacement.

A bientôt
0