Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2008, 10h02   #1
Membre habitué
 
Avatar de straasha
 
Homme
Développeur en systèmes embarqués
Inscription : juillet 2004
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur en systèmes embarqués
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2004
Messages : 115
Points : 120
Points : 120
Par défaut [tcsh] commande qui retourne 0 ou 1 suivant qu'un fichier est vide ou non

bonjour

je cherche a tester si un fichier est vide ou pas dans un programme de test
pour cela j'ai pense a une commande system("commande tcsh") mais en paramètre je doit lui donner une commande qui retourne 0 ou 1 suivant que mon fichier est vide ou non.
pour l'instant j'ai pense a un truc du genre
Code :
if (-z toto) exit 1 ; else exit 0 endif
je l'ai tester en ligne de commande mais il reconnait pas la fin du if (j'ai essaye plusieurs trucs du genre endif, if , end) et dans la commande system il renvoie syntax error

quelqu'un a une idée ?
straasha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 10h38   #2
Membre habitué
 
Inscription : août 2008
Messages : 116
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : août 2008
Messages : 116
Points : 117
Points : 117
la commande "test" c'est [ sous unix

if [ -z toto ] exit 1 ; else exit 0 endif
delete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 10h52   #3
Membre habitué
 
Avatar de straasha
 
Homme
Développeur en systèmes embarqués
Inscription : juillet 2004
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur en systèmes embarqués
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2004
Messages : 115
Points : 120
Points : 120
ok merci mais j'ai quand même "if : expression syntax" en ligne commande avec :
Code :
if [ -z toto ] echo 3 ; else echo 4 ; endif
j'ai essayé en remplacant endif par fi, end ou rien et c'est pareil
straasha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 11h02   #4
Membre habitué
 
Inscription : août 2008
Messages : 116
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : août 2008
Messages : 116
Points : 117
Points : 117
Je connais pas le tcsh mais ca doit être similaire au bourne shell, enfin sinon tu fait plus simple :

[ -z toto ] && exit 1 || exit 0 ;

delete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 11h50   #5
Membre habitué
 
Avatar de straasha
 
Homme
Développeur en systèmes embarqués
Inscription : juillet 2004
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur en systèmes embarqués
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2004
Messages : 115
Points : 120
Points : 120
ça compile mais que mon fichier soit plein ou vide ça retourne 0
straasha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 15h23   #6
Membre habitué
 
Inscription : août 2008
Messages : 116
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : août 2008
Messages : 116
Points : 117
Points : 117
Arf' normal c'est ton code qui est buggué du début à la fin

le test à faire c'est -s
delete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 15h43   #7
Membre habitué
 
Avatar de straasha
 
Homme
Développeur en systèmes embarqués
Inscription : juillet 2004
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur en systèmes embarqués
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2004
Messages : 115
Points : 120
Points : 120
toujours pareil avec -s
là j'essaye d'envoyer le résultat d'un "wc -l" dans un fichier tempo et de lire le résultat mais avec ce @ç#! de langage de test propriétaire de ma boite c'est pas gagné
straasha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 16h40   #8
Membre habitué
 
Inscription : août 2008
Messages : 116
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : août 2008
Messages : 116
Points : 117
Points : 117
Code :
1
2
3
4
5
6
7
8
9
10
11
12
$ tcsh
www:/tmp> uname -s -r
Linux 2.6.24.5-grsec-xxxx-grs-ipv4-32
tcsh --version
tcsh 6.14.00 (Astron) 2005-03-25 (i486-intel-linux) options wide,nls,dl,al,kan,rh,nd,color,filec

www:/tmp> [ -s ZZ ] && echo ok || echo no
no
www:/tmp> echo 1 > ZZ
www:/tmp> [ -s ZZ ] && echo ok || echo no
ok
Tu ne dois pas avoir le même tcsh que les autres

Pour te faire plaisir j'ai même fait un fichier toto :

[ -s ZZ ] && exit 1 || exit 0
echo pas de exit ;

quand on l'execute ca marche incroyable ( il n'affiche bien entendu pas le texte pas de exit)

Ca teste si le fichier est vide si il y a un octet dedant il n'est pas vide....
delete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 16h53   #9
Membre habitué
 
Avatar de straasha
 
Homme
Développeur en systèmes embarqués
Inscription : juillet 2004
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur en systèmes embarqués
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2004
Messages : 115
Points : 120
Points : 120
effectivement on doit pas avoir le même shell puisqu'avec ta commande j'ai :
mais je suis en train d'approcher de la solution en faisant un script à part qui sera appelé dans la fonction system() sauf que la valeur de retour de la fonction system ne correspond pas à la valeur de sortie de mon script mais ça c'est plus du au langage de test que j'utilise qu'au shell

merci quand meme
straasha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 17h03   #10
Membre habitué
 
Inscription : août 2008
Messages : 116
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : août 2008
Messages : 116
Points : 117
Points : 117
change par la commande shell qui s'appelle test
mais sinon sur ton shell en tapant [ et entrée
il devrait te retourner une erreur du genre

[: « ] » manquant

Sinon il est bizare ton unix
delete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2008, 10h08   #11
Membre habitué
 
Avatar de straasha
 
Homme
Développeur en systèmes embarqués
Inscription : juillet 2004
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur en systèmes embarqués
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2004
Messages : 115
Points : 120
Points : 120
comme shell j'ai :
Code :
1
2
[xxxxxx/xxxxxxx/xxxxxx/xxxx> echo $SHELL
/usr/local/bin/tcsh
d'où le flag [tcsh] de mon post, tu dois pas avoir la même réponse
mais c'est pas grave, j'ai pu contourner mon pb
ceci dit je serai même pas étonné si tu étais en tcsh aussi, mon projet ayant été démarré il y a plus de 15 ans, j'ai peut être pas la dernière version de tcsh (au passage je ne connais absolument pas l'évolution de ce shell et donc je ne sais pas s'il y a différente version)
straasha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2008, 14h53   #12
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 779
Points : 7 779
je connais pas tcsh mais tu peux contourner la question

wc -c truc

et faire un test sur le chiffre retourné il te suffit de voir le man page de csh ou tcsh pour connaitre la syntaxe du if.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2008, 15h54   #13
Membre habitué
 
Avatar de straasha
 
Homme
Développeur en systèmes embarqués
Inscription : juillet 2004
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur en systèmes embarqués
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2004
Messages : 115
Points : 120
Points : 120
merci frp31 mais c'est a peu de chose près la solution que je tentai dans le post #7 (je comptai les lignes et toi les caractères) et qui marche pas a cause du langage de test que j'utilise.
Sa fonction system me renvoie 0 si tout s'est bien passé, 1 sinon, et ce, sans tenir compte des éventuelles valeurs d'exit que j'aurai pu mettre dans la commande.
straasha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2008, 18h32   #14
Membre habitué
 
Inscription : août 2008
Messages : 116
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : août 2008
Messages : 116
Points : 117
Points : 117
Pourtant ce n'est pas les solutions qui manquent a l'appel :

du
ls -s
wc -l ou -c
grep -c

Et pas besoin de rediriger dans un fichier un affectation de variable et hop'

Mais pour le tcsh je ne peux rien faire pour toi, un bon man tcsh devrait faire l'affaire.
delete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2008, 02h27   #15
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 971
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 971
Points : 1 378
Points : 1 378
csh et tcsh sont des shells dépassés mais voici quand même une solution:
Code :
1
2
3
4
5
#!/usr/bin/tcsh
if ( -z toto ) then
  exit 1
else
  exit 0
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2008, 10h01   #16
Membre habitué
 
Avatar de straasha
 
Homme
Développeur en systèmes embarqués
Inscription : juillet 2004
Messages : 115
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur en systèmes embarqués
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2004
Messages : 115
Points : 120
Points : 120
oui merci, c'est la 1ere solution que j'avais tenté mais comme dit plus haut mon problème vient en fait plus de la fonction system() du langage de test que j'utilise (langage interne développé par ma boite spécifiquement pour nos bancs de tests) que de la commande que j'y passe en paramètre.
je met donc le tag résolu puisqu'on a répondu ici de plusieurs manière à la question posée en plus j'ai pu contourner mon problème d'une autre manière qui marche avec ce @#$!% de langage
straasha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h10.


 
 
 
 
Partenaires

Hébergement Web