2015-04-14 124 views
-2

下面的脚本将文件传输到另一台没有密码的服务器,但在sftp进程下面的语句没有执行之后。如果我运行相同的脚本(保存在主shell脚本下的ftpAutomatic())函数并在case语句内调用它,我得到错误为“行441:语法错误:文件的意外结束 ”sftp shell脚本自动文件传输

脚本:

#!/bin/sh 

     ftp_site="10.***.***.**" 
     username="dwadmin" 
#source path 
     spath="/home/abc/data" 
#Remote Path 
     rpath="/home/def/bas" 

     cd $spath 

     sftp [email protected]$ftp_site <<EOL 
     cd $rpath 
     mput bcs_extract_*.txt.pgp 
     bye 
     EOL 
     echo "Success : $?" 
     mv $spath/bcs_extract* $spath/queue/ 

回声 “脚本做......”

在这里,我没有得到回音 “成功状态?” ,“脚本完成”和“mv”命令不工作...但文件传输已成功完成。但是,如果我在主脚本中将此脚本作为函数并从“case”语句中调用,则此文件传输也不起作用。

+0

请告诉我的错误在我的脚本如上 – user3321778

+2

为什么不直接使用'scp'? – Biffen

+1

你的'EOL'是缩进的。它不应该。我可以推荐使用http://www.shellcheck.net吗? – Biffen

回答

1
#!/bin/sh 

     ftp_site="10.***.***.**" 
     username="dwadmin" 
#source path 
     spath="/home/abc/data" 
#Remote Path 
     rpath="/home/def/bas" 

     cd $spath 

     sftp [email protected]$ftp_site <<-EOF 
     cd $rpath 
     mput bcs_extract_*.txt.pgp 
     exit 
     EOF 
     echo "Success : $?" 
     mv $spath/bcs_extract* $spath/queue/ 
+0

你能编辑你的答案来表明这与原始脚本有什么不同,以及这个改变如何解决这个问题? – Kenster

+0

@Kenster,'<< - '(vs'<<')是一个明显的变化,因为它允许在缩进时识别EOF标签。但是,只有当前导缩进是制表符而不是空格时才起作用,所以它肯定是需要解释的东西(并且不是没有相同的有用答案)。 –