A voir également:
- Shell et Code retour d'une commande ftp
- Invite de commande - Guide
- Commande terminal mac - Guide
- Le code ascii - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
5 réponses
Bonjour,
Sans passer par un fichier intermédiaire (exemple pour création d'un répertoire) :
# Commande ftp pour création répertoire avec récupération affichage dans variable
(à écrire dans un script)
ret_ftp=`ftp -u nom_machine << FIN_DIR
user nom_user password_user
verbose
cd rep_virtuel (facultatif)
mkdir nom_rep
FIN_DIR`
# Analyse si création répertoire ok ou non
if echo $ret_ftp|grep "directory created" > /dev/null
then
echo "Creation ok"
else
echo "Creation ko"
fi
Sans passer par un fichier intermédiaire (exemple pour création d'un répertoire) :
# Commande ftp pour création répertoire avec récupération affichage dans variable
(à écrire dans un script)
ret_ftp=`ftp -u nom_machine << FIN_DIR
user nom_user password_user
verbose
cd rep_virtuel (facultatif)
mkdir nom_rep
FIN_DIR`
# Analyse si création répertoire ok ou non
if echo $ret_ftp|grep "directory created" > /dev/null
then
echo "Creation ok"
else
echo "Creation ko"
fi
j ai trouve l astuce suivante :
- recupere les status du mode verbose dans un fichier
- tester si le transfert c est bien deroulé (status 266)
ftp -n $SERVER > rapport 2>rapport_err <<fin
quote user $USER
quote pass $USERMDP
verbose
cd /tmp
put $FICHIER
bye
fin
result=`cat rapport|grep 226|wc -l`
echo $result
if [ $result = '0' ]
then
echo "Erreur de transfert"
else
echo "Transfert termine"
fi
- recupere les status du mode verbose dans un fichier
- tester si le transfert c est bien deroulé (status 266)
ftp -n $SERVER > rapport 2>rapport_err <<fin
quote user $USER
quote pass $USERMDP
verbose
cd /tmp
put $FICHIER
bye
fin
result=`cat rapport|grep 226|wc -l`
echo $result
if [ $result = '0' ]
then
echo "Erreur de transfert"
else
echo "Transfert termine"
fi
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
50
6 déc. 2005 à 17:15
6 déc. 2005 à 17:15
Une façon de faire (existe +ieurs) est de rediriger si problemes vers un fichiers du genre:
ftp -n $HOST > /tmp/ftp.ok 2> /tmp/ftp.no <<fin
bla bla ...
fin
# etat de sortie
EXITSTATUS=$?
if [ $EXITSTATUS != "0" ]
then
# message_erreur
fi
ftp -n $HOST > /tmp/ftp.ok 2> /tmp/ftp.no <<fin
bla bla ...
fin
# etat de sortie
EXITSTATUS=$?
if [ $EXITSTATUS != "0" ]
then
# message_erreur
fi
Bonjour
Merci pour ta réponse.
Lorsque je fais ainsi (recupération du code erreur avec CR=$? ) le message qui s'affiche est toujours OK même lorsque la connection ftp échoue. (Je suppose que la variable d'environnement dans ce cas contient le code de retour de EOF... ?).
Par contre, je vais utiliser ton idée et tester si le fichier ftp.no a une taille nulle.
Merci pour ta réponse.
Lorsque je fais ainsi (recupération du code erreur avec CR=$? ) le message qui s'affiche est toujours OK même lorsque la connection ftp échoue. (Je suppose que la variable d'environnement dans ce cas contient le code de retour de EOF... ?).
Par contre, je vais utiliser ton idée et tester si le fichier ftp.no a une taille nulle.
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
50
>
glwadys
6 déc. 2005 à 19:30
6 déc. 2005 à 19:30
Tu peux encore essayer avec ncftpput (fourni avec ncftp) et tu fais:
#!/bin/sh
ncftpput -u user -p pass $HOTE /REP_DISTANT /REP_LOCAL/ton_script.sh
if [ "$?" = "0" ] ; then
echo "OK"
else
echo "NOK"
fi
Ça devrait marcher avec ça. L'inconvénient c'est qu'avec le ncftpput il faut transférer un répertoire entier, du coup, tu dois ouvrir autant de connexion que de fichiers à transferer. C'est pas pratique, à moins que tu regroupe le moins possible de fichiers a transférer dans un reprtoire, car le temps de connexion sera d'autant plus lent que le nbre de fichiers a transferer est plus grand!
#!/bin/sh
ncftpput -u user -p pass $HOTE /REP_DISTANT /REP_LOCAL/ton_script.sh
if [ "$?" = "0" ] ; then
echo "OK"
else
echo "NOK"
fi
Ça devrait marcher avec ça. L'inconvénient c'est qu'avec le ncftpput il faut transférer un répertoire entier, du coup, tu dois ouvrir autant de connexion que de fichiers à transferer. C'est pas pratique, à moins que tu regroupe le moins possible de fichiers a transférer dans un reprtoire, car le temps de connexion sera d'autant plus lent que le nbre de fichiers a transferer est plus grand!
glwadys
>
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
7 déc. 2005 à 10:07
7 déc. 2005 à 10:07
Bonjour,
J'ai lu le man du ncftpput et si j'ai bien compris c'est pour le transfert des scripts?
Je vais essayer la seconde solution.
Merci pour ta réponse
J'ai lu le man du ncftpput et si j'ai bien compris c'est pour le transfert des scripts?
Je vais essayer la seconde solution.
Merci pour ta réponse
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
50
>
glwadys
6 déc. 2005 à 19:41
6 déc. 2005 à 19:41
Autre alternative (celle-là je ne l'ai pas essayé!):
lftp -e 'cd /; mput toto; exit' ftp://toto:toto@localhost/; echo $?
lftp -e 'cd /; mput toto; exit' ftp://toto:toto@localhost/; echo $?
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
6 déc. 2005 à 21:48
6 déc. 2005 à 21:48
Salut,
Le status de ftp n'est pas représentatif de la réussite ou pas des commandes
ftp. Pour cela il faut analyser les réponses et en particulier les codes de
réponses 550, 200, 120, etc...
Mon client ftp, si il arrive à contacter le serveur ftp, retourne toujours
succès même si le login se passe mal.
Pour connaître la signification des codes et essayer de savoir si tout est ok
se reporter à la RFC de FTP (en anglais) et en particulier le chapitre 4.2 :
http://www.faqs.org/rfcs/rfc959.html
Le status de ftp n'est pas représentatif de la réussite ou pas des commandes
ftp. Pour cela il faut analyser les réponses et en particulier les codes de
réponses 550, 200, 120, etc...
Mon client ftp, si il arrive à contacter le serveur ftp, retourne toujours
succès même si le login se passe mal.
Pour connaître la signification des codes et essayer de savoir si tout est ok
se reporter à la RFC de FTP (en anglais) et en particulier le chapitre 4.2 :
http://www.faqs.org/rfcs/rfc959.html
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
7 déc. 2005 à 21:12
7 déc. 2005 à 21:12
Salut,
J'ai testé sous Linux (slackware 10.1), le $? vaut toujours 0, même si le
serveur n'existe pas ...
Pour l'analyse ses codes de retour des commandes ftp, il faut analyser la sortie
standard du processus et rechercher ces fameux codes et vérifier qu'ils
correspondent bien à ce que tu attends. Là il faut jouer avec du grep, du awk
ou du perl.
Y a peut-être les commandes ncftpget et ncftpput qui donnent un status ($?)
plus exploitable.
A+, crabs
J'ai testé sous Linux (slackware 10.1), le $? vaut toujours 0, même si le
serveur n'existe pas ...
Pour l'analyse ses codes de retour des commandes ftp, il faut analyser la sortie
standard du processus et rechercher ces fameux codes et vérifier qu'ils
correspondent bien à ce que tu attends. Là il faut jouer avec du grep, du awk
ou du perl.
Y a peut-être les commandes ncftpget et ncftpput qui donnent un status ($?)
plus exploitable.
A+, crabs
Crabs le $? vaut toujours 0-1 même si le serveurs n'existe pas. Puis le mieux c'est qu'il faut jouer avec du PERL. Car le GREP et le AWK ce n'est pas trop pareil que le PERL. Et oui il y a d'autre commande ncftpget et ncftpput qui donne ce statut suivant : ===< ($.?) Encodage Perl ou PAA2*c cela restera le mieux. Ou sinon tu peux toujours créer un Shell code Polymorphique.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
19 févr. 2010 à 10:44
5 ans après... pourquoi pas ;-D
13 déc. 2011 à 16:53
Merci