PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > fr.comp.os.unix > bash: probleme de test dans if
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
fr.comp.os.unix Système UNIX.

bash: probleme de test dans if

Réponse
 
LinkBack Outils de la discussion
Vieux 30/04/2007, 03h36   #1
Hugolino
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut bash: probleme de test dans if


Salut,

J'ai encore un problème de test d'existence de fichier quand celui-ci
n'existe pas. (Pas de problème quand le fichier existe)

L'exécution du script raconte ça:

[: 53: /home/hugo/mail/mbox_du_jour: unexpected operator

Les lignes en cause sont:
8<-----------8<---------8<----------8<----------8<----------8<----------8<
16 BOITE_MAIL_SOURCE=~/mail/mbox_du_jour


47 if [ ! -a ${BOITE_MAIL_SOURCE} ]
48 then
49 echo ${RED}" Pas de fichier "${CYAN}${BOITE_MAIL_SOURCE}
50 echo ${GREEN}" (Il n'y a pas eu de courrier reçu récemment)"
51 echo ${NORMAL}
52 exit 1
53 fi
8<-----------8<---------8<----------8<----------8<----------8<----------8<

J'ai essayé avec ou sans accolades, $BOITE_MAIL_SOURCE ou
${BOITE_MAIL_SOURCE} et le problème est le même.

Qu'est-ce que j'ai encore mal fait ?!??

Merci de votre aide.

--
$ rm *>o
$ ls
o
Hugo (né il y a 1 357 307 702 secondes)
  Réponse avec citation
Vieux 30/04/2007, 03h47   #2
Vincent Lefevre
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bash: probleme de test dans if

Dans l'article <slrnf3alhj.h9b.hugolino@Deborah.Rock-n-Roll.org>,
Hugolino <hugolino@free.fr> écrit:

> J'ai encore un problème de test d'existence de fichier quand celui-ci
> n'existe pas. (Pas de problème quand le fichier existe)


> L'exécution du script raconte ça:


> [: 53: /home/hugo/mail/mbox_du_jour: unexpected operator


> Les lignes en cause sont:
> 8<-----------8<---------8<----------8<----------8<----------8<----------8<
> 16 BOITE_MAIL_SOURCE=~/mail/mbox_du_jour



> 47 if [ ! -a ${BOITE_MAIL_SOURCE} ]


Le -a, c'est un "and", qui ne peut donc pas suivre un "!" (not).

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
  Réponse avec citation
Vieux 30/04/2007, 07h21   #3
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bash: probleme de test dans if

2007-04-30, 02:47(+00), Vincent Lefevre:
> Dans l'article <slrnf3alhj.h9b.hugolino@Deborah.Rock-n-Roll.org>,
> Hugolino <hugolino@free.fr> écrit:
>
>> J'ai encore un problème de test d'existence de fichier quand celui-ci
>> n'existe pas. (Pas de problème quand le fichier existe)

>
>> L'exécution du script raconte ça:

>
>> [: 53: /home/hugo/mail/mbox_du_jour: unexpected operator

>
>> Les lignes en cause sont:
>> 8<-----------8<---------8<----------8<----------8<----------8<----------8<
>> 16 BOITE_MAIL_SOURCE=~/mail/mbox_du_jour

>
>
>> 47 if [ ! -a ${BOITE_MAIL_SOURCE} ]

>
> Le -a, c'est un "and", qui ne peut donc pas suivre un "!" (not).



Oui, quoique quand il n'y a pas ambiguité, c'est aussi un
synonyme de "-e". Autrement dit, il y a deux -a: un unary et un
binary. Seul le binary est standard.

if [ ! -e "$BOITE_MAIL_SOURCE" ]
if ! [ -e "$BOITE_MAIL_SOURCE" ]

if ! ls -d -- "$BOITE_MAIL_SOURCE" > /dev/null
qui est en fait equivalent a
if ! [ -e "$BOITE_MAIL_SOURCE" ] ||
! [ -L "$BOITE_MAIL_SOURCE" ]

[ -e ... ] retournera false si ... est un lien symbolique vers
un fichier qui n'existe pas.

--
Stéphane
  Réponse avec citation
Vieux 30/04/2007, 12h11   #4
Vincent Lefevre
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bash: probleme de test dans if

Dans l'article <slrnf3b2p9.4va.stephane.chazelas@spam.is.invalid> ,
Stephane Chazelas <cette.adresse@est.invalid> écrit:

> Oui, quoique quand il n'y a pas ambiguité, c'est aussi un
> synonyme de "-e". Autrement dit, il y a deux -a: un unary et un
> binary. Seul le binary est standard.


Bizarre, la page man ("man [") n'indique pas la forme unary:

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
  Réponse avec citation
Vieux 30/04/2007, 12h21   #5
Nicolas George
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bash: probleme de test dans if

Vincent Lefevre wrote in message
<20070430110956$2b90@prunille.vinc17.org>:
> Bizarre, la page man ("man [") n'indique pas la forme unary:


La page de man de bash ([ est un builtin de bash) en parle.
  Réponse avec citation
Vieux 30/04/2007, 12h37   #6
Vincent Lefevre
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bash: probleme de test dans if

Dans l'article <4635d125$0$641$426a34cc@news.free.fr>,
Nicolas George <nicolas$george@salle-s.org> écrit:

> Vincent Lefevre wrote in message
> <20070430110956$2b90@prunille.vinc17.org>:
> > Bizarre, la page man ("man [") n'indique pas la forme unary:


> La page de man de bash ([ est un builtin de bash) en parle.


Effectivement. Mais à noter que le -a unaire n'est pas portable. Et
sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec
la construction [[.

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
  Réponse avec citation
Vieux 30/04/2007, 12h44   #7
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bash: probleme de test dans if

2007-04-30, 11:37(+00), Vincent Lefevre:
> Dans l'article <4635d125$0$641$426a34cc@news.free.fr>,
> Nicolas George <nicolas$george@salle-s.org> écrit:
>
>> Vincent Lefevre wrote in message
>> <20070430110956$2b90@prunille.vinc17.org>:
>> > Bizarre, la page man ("man [") n'indique pas la forme unary:

>
>> La page de man de bash ([ est un builtin de bash) en parle.

>
> Effectivement. Mais à noter que le -a unaire n'est pas portable. Et
> sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec
> la construction [[.


En l'occurrence, je pense qu'il s'agit d'un bug. D'apres la doc
de zsh [ -a file ] devrait marcher.

Ni -e ni -a n'existait dans le Bourne shell. Je pense que [ -a
est apparu en premier dans ksh. Je ne sais pas comment -e est
apparu mais c'est celui qui a ete choisi par POSIX.

-e est pour "exists", c'est un peu misleading dans la mesure ou
un fichier peut exister et ce test renvoyer false. En fait, il
teste si on peut faire un stat(2) (pas lstat(2)) avec success
sur le fichier. D'ou -a...ccessible je suppose.

--
Stéphane
  Réponse avec citation
Vieux 30/04/2007, 12h50   #8
Vincent Lefevre
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: bash: probleme de test dans if

Dans l'article <4635d125$0$641$426a34cc@news.free.fr>,
Nicolas George <nicolas$george@salle-s.org> écrit:

> Vincent Lefevre wrote in message
> <20070430110956$2b90@prunille.vinc17.org>:
> > Bizarre, la page man ("man [") n'indique pas la forme unary:


> La page de man de bash ([ est un builtin de bash) en parle.


Le -a ne semble pas fonctionner avec [ et ! sous bash:

vlefevre@vin:~$ touch exists
vlefevre@vin:~$ [ ! -e exists ] || echo found
found
vlefevre@vin:~$ [ ! -a exists ] || echo found
vlefevre@vin:~$

En revanche, on a bien:

vlefevre@vin:~$ [[ ! -e exists ]] || echo found
found
vlefevre@vin:~$ [[ ! -a exists ]] || echo found
found
vlefevre@vin:~$

et

vlefevre@vin:~$ [ -e exists ] && echo found
found
vlefevre@vin:~$ [ -a exists ] && echo found
found
vlefevre@vin:~$

C'est la version 3.1 (paquet Debian bash 3.1dfsg-8). Je viens de faire
un rapport de bug sur le BTS de Debian.

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 18h47.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,13995 seconds with 16 queries