man test -z Vrai si la longueur de la chaîne est nulle.
heaven35
-z ça veut dire quoi exactement???
jlighty
en fait je me suis trompé, $? contient le code de retour de la fonction find et non pas son contenu sur la sortie standard.
Il faut que tu passes par une variable intermédiaire. De plus si find ne trouve rien, elle n'affiche rien (je me suis fais piéger par echo $a -> echo -n $a :D )
Pour aller au plus simple :
Code :
if [ -z `find .....` ];then echo "aucune réponse"; fi
heaven35
J'ai essayé mais ça ne marche pas...
Voici ce que j'ai ecrit :
find /home -ctime 1 >/dev/null
if [ "$?" eq "\n" ];
then
echo " rien n'a été modifié"
else
echo " le repertoire a été modifié "
fi
exit 0
J'ai le retour :
test.sh[7]: eq: 0403-012 Un paramètre de la commande test est incorrect
Si je mets -eq j'ai le retour :
test.sh[7]: \n: 0403-057 Erreur de syntaxe
jlighty
si tu mets l'affichage de find dans une variable :
ex:
Code :
a=`find.....`
puis que tu compares $a à "\n" ( le retour chariot indique que find n'a rien trouvé) avec
Code :
if [ "$a" eq "\n" ]
PS: $? revient au même puisqu'il correspond au résultat de la dernière commande exécutée.
heaven35
Désolé, je débute et je ne comprends pas...
jlighty
tu rediriges la sortie de la fonction find dans une variable puis tu compares cette variable à "\n".
heaven35
Je crois que j'ai compris. En fait, comme ma commande find fonctionne, elle me retourne toujours 0. Donc mon echo "le repertoire a été modifié" s'affiche obligatoirement...
En fait il faudrait que mon if soit interprêté comme : SI LE RESULTAT DE LA COMMANDE FIND EST /HOME
alors
echo " le repertoire a été modifié"
then
echo " rien n'a été modifié"
Mais je n'y arrive pas.
Quelqu'un aurait-il la formidable syntaxe???
ça me dépannerait....
heaven35
Je l'ai modifié ( j'ai enlevé le & .... ) mais mon if ne fonctionne pas
Je dois me tromper sur la syntaxe pour vérifier le code de retour de ma commande...Il me dit à chaque fois que le répertoire a été modifié alors que ce n'est pas le cas
Quelqu'un à une idée??
# find /home -ctime 1 > /dev/null if [ $? -eq 0 ] then echo "le repertoire a été modifié" else echo "rien n'a été modifié" fi exit 0 #
asmodaiii
Je n'utilise pas ksh mais en tout cas ton code marche en bash:
Code :
[asmodaiii@pink-chan] [12:32:35] ~ $ cat test.sh
find /home -ctime 1 &> /dev/null
if [ 0 -eq 0 ]
then
echo "le repertoire a été modifié"
else
echo "rien n'a été modifié"
fi
exit 0
[asmodaiii@pink-chan] [12:33:03] ~ $ sh test.sh
le repertoire a été modifié
heaven35
Bonjour,
J'écris un script en KSH qui me lance un certains nombre de commandes.
Par exemple, je fait un recherche pour savoir si un répertoire a été modifié depuis 24h.
Par contre je ne veux pas que le résultat apparaisse à l'écran. Je veux juste utiliser le code de retour pour afficher un echo.
Voici mon script :
#
find /home -ctime 1 &> /dev/null
if [ $? -eq 0 ]
then
echo "le repertoire a été modifié"
else
echo "rien n'a été modifié"
fi
exit 0
#
Le résultat quand je le lance est :
/home le repertoire a été modifié
Pourtant je ne veux pas que /home apparaisse dans mon résultat.