FTP Shell脚本无法正常工作

时间:2014-04-19 07:18:13

标签: linux shell ftp ksh

我想使用FTP从服务器下载文件。

这是我的脚本代码。 (myscript.sh)

#!/bin/ksh
ftp -n $1 << END
user $2 $3
lcd $4
get $5
bye
EOF

编写脚本并运行后,它无效。

sh myscript.sh 111.222.333.444 testuser test /myfolder/src/data/ DATA20140419.txt

shell显示以下消息: 用法lcd local-directory

我的脚本代码中的问题是什么?

2 个答案:

答案 0 :(得分:2)

尝试通过以下方式启动命令:./myscript.sh而不是sh ./myscript.sh:您正在使用指定ksh的shebang。直接调用sh肯定会绕过&#34;绕过&#34; shebang(除非sh读取它并启动ksh - 这取决于你的sh实现),并且不会按照需要调用ksh

此外,如果EOF期望END,则不应该将here document$1结束。另一点是,您可能希望将所有参数($2"$1"等)放在引号之间,因此您确定它们的值不是用空格分隔的(如{{1}中所示) },"$2"等等。

但是,我怀疑这是导致错误消息。关键是,即使我复制/粘贴您的脚本,我也无法在本地复制您的错误。然后,我无法分辨是什么导致出现此错误消息,因为空lcd参数确实在我的本地FTP客户端(Debian)上输出当前本地目录。

我能给你的唯一答案是,在get之前,你应该cd到正确的目录(get命令应该只包含文件的路径在当前的目录中)。然后你的脚本应该是:

#!/bin/ksh
ftp -n $1 << END
user $2 $3
lcd $4
cd $(dirname $5)
get $(basename $5)
bye
END

你应该像这样使用它:

$ ./myscript <server> <user> <passwd> <localdir> <remotedir/file>

示例:

$ ./myscript 1.2.3.4 7heo secret . /path/to/remote/file

答案 1 :(得分:-2)

我解决了这个问题。

原因是,编码。

我使用windows编写脚本代码,在unix中运行。

我错过了“输入”的区别。

UNIX的输入是\ n

但是,Windows输入是\ r \ n

所以,如果没有编码脚本代码,则必须发生错误。

大多数windows editer提供编码选项。 (UNIX,DOS,WINDOWS样式。)

如果使用unix编辑器(例如,vi),则无需编码。

<强>增添。

  1. 如果未设置远程目录(cd)或本地目录(lcd), source和destnation是默认文件夹。

  2. END,EOF不会影响脚本代码。你可以使用任何字符串。

  3. 要运行shell脚本,必须使用“sh”关键字。 “./”无法运行shell脚本。