Le code de session FTP ne fonctionne pas dans la boucle while / for. Comment résoudre?

J’ai une exigence comme celle-ci, Lisez le contenu d’un fichier X présent sur le serveur A et connectez-vous au serveur B et récupérez le contenu du fichier X.

Mon code est

set -x idFile="/tserver/Ravi/logs/FilesToBeCopied.txt" while read line do echo $line ftp -in hrserver < FtpLog.log user ravi welcome1 cd /hrserver/kumar/Images lcd /tserver/Ravi/logs/FTPFiles/ get $line quit done < $idFile 

L’erreur que j’ai eu est:

 ./myScript.sh + idFile=/tserver/Ravi/logs/FilesToBeCopied.txt ./myScript.sh: line 13: syntax error: unexpected end of file 

Essayé d’utiliser pour la boucle aussi:

 for line in `cat /tserver/Ravi/logs/FilesToBeCopied.txt`;do echo $line echo "$line $FileStorageLocation" ftp -in hrserver < FtpLog.log user ravi welcome1 cd /hrserver/kumar/Images lcd /tserver/Ravi/logs/FTPFiles/ get $line quit done 

J’ai eu la même erreur, pointant vers la dernière ligne du fichier et montrant une erreur de syntaxe.

Lorsque j’ai essayé d’exécuter le même script en commentant les boucles while / for, le script s’est exécuté avec succès et le ftp a été effectué (ici, la valeur de ligne codée en dur). Comme mon exigence est de lire chaque ligne du fichier et d’effectuer un ftp, j’ai opté pour une boucle.

Je ne suis pas familier avec les scripts shell. Ma question est la suivante: est-il possible d’incorporer une commande FTP dans une boucle? Si oui, pouvez-vous m’aider à identifier où mon code va mal et à le résoudre? Si non, pouvez-vous apporter une solution à mes besoins?

Votre Here-document manque la sentinelle de fermeture. (Ou vous avez eu un problème avec le copier-coller dans votre publication).

Essayer

 idFile="/tserver/Ravi/logs/FilesToBeCopied.txt" while read line do echo $line ftp -in hrserver << ! > FtpLog.log user ravi welcome1 cd /hrserver/kumar/Images lcd /tserver/Ravi/logs/FTPFiles/ get $line quit ! done < $idFile 

C'est pourquoi je préfère utiliser un jeton plus grand. EOF (End Of File) est un fichier commun.

Rappelez-vous également here-docs permet de mettre en retrait le jeton à l'intérieur de votre script shell si vous citez le jeton ou si vous le préfixez avec le caractère - c'est-à-dire

 ftp -in hrserver <<-EOF > ftpLog.log ..... EOF 

OU

 ftp -in hrserver <<'EOF' > ftpLog.log  .... EOF 

Ou bien d'autres combinaisons selon les besoins. Obtenez d'abord un simple document ici en retrait, puis jouez avec le style d'indentation dont vous avez réellement besoin.

REMARQUE: Il n'y a pas d'espaces devant la fermeture de EOF, mais les espaces à l'intérieur du document ici sont laissés en place, ce qui permet un petit formatage.

IHTH