Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > 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

Réponse
 
Outils de la discussion
Vieux 27/08/2008, 10h02   #1 (permalink)
Membre du Club
 
Avatar de straasha
 
Date d'inscription: juillet 2004
Localisation: Toulouse
Âge: 28
Messages: 97
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
Vieux 27/08/2008, 10h38   #2 (permalink)
Membre du Club
 
Date d'inscription: août 2008
Messages: 80
Par défaut

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
Vieux 27/08/2008, 10h52   #3 (permalink)
Membre du Club
 
Avatar de straasha
 
Date d'inscription: juillet 2004
Localisation: Toulouse
Âge: 28
Messages: 97
Par défaut

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
Vieux 27/08/2008, 11h02   #4 (permalink)
Membre du Club
 
Date d'inscription: août 2008
Messages: 80
Par défaut

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
Vieux 27/08/2008, 11h50   #5 (permalink)
Membre du Club
 
Avatar de straasha
 
Date d'inscription: juillet 2004
Localisation: Toulouse
Âge: 28
Messages: 97
Par défaut

ç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
Vieux 27/08/2008, 15h23   #6 (permalink)
Membre du Club
 
Date d'inscription: août 2008
Messages: 80
Par défaut

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
Vieux 27/08/2008, 15h43   #7 (permalink)
Membre du Club
 
Avatar de straasha
 
Date d'inscription: juillet 2004
Localisation: Toulouse
Âge: 28
Messages: 97
Par défaut

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
Vieux 27/08/2008, 16h40   #8 (permalink)
Membre du Club
 
Date d'inscription: août 2008
Messages: 80
Par défaut

Code :
$ 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
Vieux 27/08/2008, 16h53   #9 (permalink)
Membre du Club
 
Avatar de straasha
 
Date d'inscription: juillet 2004
Localisation: Toulouse
Âge: 28
Messages: 97
Par défaut

effectivement on doit pas avoir le même shell puisqu'avec ta commande j'ai :
Code :
[: Command not found
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
Vieux 27/08/2008, 17h03   #10 (permalink)
Membre du Club
 
Date d'inscription: août 2008
Messages: 80
Par défaut

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
Vieux 28/08/2008, 10h08   #11 (permalink)
Membre du Club
 
Avatar de straasha
 
Date d'inscription: juillet 2004
Localisation: Toulouse
Âge: 28
Messages: 97
Par défaut

comme shell j'ai :
Code :
[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
Vieux 28/08/2008, 14h53   #12 (permalink)
Membre Expert
 
Avatar de frp31
 
Date d'inscription: juillet 2006
Localisation: toulouse
Messages: 1 474
Par défaut

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.
__________________
Bye @+
(\__/)
(o..o)
(") (")

Soutenez le logiciel libre
frp31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 28/08/2008, 15h54   #13 (permalink)
Membre du Club
 
Avatar de straasha
 
Date d'inscription: juillet 2004
Localisation: Toulouse
Âge: 28
Messages: 97
Par défaut

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
Vieux 28/08/2008, 18h32   #14 (permalink)
Membre du Club
 
Date d'inscription: août 2008
Messages: 80
Par défaut

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
Vieux 30/08/2008, 02h27   #15 (permalink)
Membre éprouvé
 
Avatar de jlliagre
 
Date d'inscription: juin 2007
Localisation: Paris
Messages: 414
Par défaut

csh et tcsh sont des shells dépassés mais voici quand même une solution:
Code :
#!/usr/bin/tcsh
if ( -z toto ) then
  exit 1
else
  exit 0
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres systèmes > Unix



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 non
Pingbacks are non
Refbacks are non
Navigation rapide