Linux FTP Shell脚本不工作
我想使用FTP从服务器下载文件 这是我的脚本代码。(myscript.sh) shell显示此消息: 本地目录的用法Linux FTP Shell脚本不工作,linux,shell,ftp,ksh,Linux,Shell,Ftp,Ksh,我想使用FTP从服务器下载文件 这是我的脚本代码。(myscript.sh) shell显示此消息: 本地目录的用法 我的脚本代码有什么问题?尝试通过以下方式启动命令:/myscript.sh,而不是通过sh./myscript.sh:您正在使用shebang指定ksh。直接调用sh肯定会“绕过”shebang(它会,除非sh读取并启动ksh-这取决于您的sh实现),并且不会根据需要调用ksh 此外,如果您希望end,则不应以EOF结束。另一点是,您可能希望将所有参数($1,$2,等等)放在引号
我的脚本代码有什么问题?尝试通过以下方式启动命令:
/myscript.sh
,而不是通过sh./myscript.sh
:您正在使用shebang指定ksh
。直接调用sh
肯定会“绕过”shebang(它会,除非sh读取并启动ksh-这取决于您的sh实现),并且不会根据需要调用ksh
此外,如果您希望end
,则不应以EOF
结束。另一点是,您可能希望将所有参数($1
,$2
,等等)放在引号之间,以便确保它们的值不被空格分隔(如“$1”
,“$2”
,等等)
但是,我怀疑这是导致错误消息的原因。关键是,我无法在本地复制您的错误,即使我复制/粘贴了您的脚本。然后,由于在本地FTP客户端(Debian)上有一个空的lcd
参数输出当前本地目录,因此我无法判断是什么原因导致出现此错误消息
我能给你的唯一答案是,在get
之前,你应该cd
到正确的目录(get
命令应该只包含当前目录中文件的路径)。那么你的剧本应该是:
#!/bin/ksh
ftp -n $1 << END
user $2 $3
lcd $4
cd $(dirname $5)
get $(basename $5)
bye
END
我解决了这个问题
原因是,编码
我使用windows编写脚本代码,在unix中运行
我错过了“进入”的区别。
UNIX的输入是\n
但是,Windows enter是\r\n
因此,如果不编码脚本代码,则必须发生错误。
大多数windows editer都提供编码选项。(UNIX、DOS、WINDOWS风格。)
如果使用unix编辑器(ex,vi),则不需要进行编码
添加。
仅供参考,您可以使用ncftpget在一条线上完成您正在尝试的操作。我想回答这个问题。我怀疑我能用ncFTP做到这一点。我想你可能想对这个问题本身留下一点评论?:)明天我会试试你的解决办法。(我无法在家中连接公司的FTP服务器。:)感谢您的回答。如果您必须使用
sh myscript…
来启动此脚本,您是否执行了chmod 755 myscript.sh
?这将使其直接可执行,并且您不需要使用sh…
,这可能会使您的问题复杂化,正如@7heo.tk在下面提到的那样。(看起来你的脚本应该可以工作,否则)。祝你好运。是的,我已经更改了权限。如果我没有更改权限,shell将显示“权限被拒绝”消息。谢谢你的评论,我将尝试@7heo.tk的解决方案。谢谢。你所谓的“回车”被调用。除此之外,“添加”中的第2点和第3点错误:EOF
没有结束herdocument字符串,它被发送到ftp客户端。由于EOF
不是已知的ftp命令,它是伪造的,因此被ftp客户端忽略。由于它也是最后一条指令,因此不会导致脚本出现“错误”(尝试在EOF
之后回显一些内容,您将看到)。此外,要运行shell脚本,您可以使用/scriptname
调用它。这就是使用shebang的全部意义。
sh myscript.sh 111.222.333.444 testuser test /myfolder/src/data/ DATA20140419.txt
#!/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