2015-04-14 157 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標籤。但是,只有當前導縮進是製表符而不是空格時才起作用,所以它肯定是需要解釋的東西(並且不是沒有相同的有用答案)。 –