2016-04-22 293 views
0

內的shell腳本我有一個包含一個週期包含的Perl腳本文件名:運行Perl腳本

$zipfile = FS.one.two.$file_date_str.three.1_1.zip; 

其中$file_date_str包含日期YYYYMMDD格式。

我想在本地讀取此文件,然後ftp它到遠程位置。在遠程位置的文件名,它必須與CD.ABCD123.

爲前綴的意義不同,我寫如下行做到這一點:

$filePrefix=CD.ABCD123.; 
$scpcmd = '$myscriptdir/ftpscript $zipfile $filePrefix${zipfile} ${REMOTE_ID}@${REMOTE_SERVER}'; 
print L $scpcmd . "\n"; 
$ret=system($scpcmd); 

ftpscript是UNIX shell腳本文件FTP做偏遠的地點。

我得到下面的錯誤上運行此:

Bareword found where operator expected at my_script_name line 77, near "1_1.zip" 
    (Missing operator before zip?) 
Bareword found where operator expected at my_script_name line 92, near "1_1.zip" 
    (Missing operator before zip?) 
syntax error at my_script_name line 77, near "1_1.zip" 
syntax error at my_script_name line 92, near "1_1.zip" 

我是新來的Perl腳本編程。有人能幫助我在上面做錯什麼嗎?

+0

註標命名爲world是'$ myscriptdir'等不會單引號內的擴張。 – Biffen

回答

0

根據您的示例(顯示已編輯,使其難以排除故障),看起來好像您沒有引用字符串。取而代之的

$zipfile = FS.one.two.$file_date_str.three.1_1.zip; 

嘗試

$zipfile = "FS.one.two." . $file_date_str . ".three.1_1.zip"; 
+0

那麼$ filePrefix和$ scpcmd呢。這些行對於Perl語法明智嗎? – Nik

0

關注潛行的意見,有關設置zipfile,但你還需要一些更多的改變

變化:

$scpcmd = '$myscriptdir/ftpscript $zipfile $filePrefix${zipfile} ${REMOTE_ID}@${REMOTE_SERVER}'; 

分爲:

$scpcmd = "$myscriptdir/ftpscript $zipfile $filePrefix${zipfile} ${REMOTE_ID}\@${REMOTE_SERVER}"; 

順便說一句,一定要注意雙引號字符串中的\@。這是爲了防止perl查找數組。 (例如)"hello @world"將嘗試嵌入名爲world一個數組,只是因爲它會爲"hello $world"

+0

謝謝。附加filePrefix的語法是否正確? – Nik

+0

是的。我相信他們是你唯一的兩個問題。我無法從帖子中看出哪些是正確的/想要的,但是您是否需要filePrefix和zipfile之間的「/」?我查看了你發佈的所有內容,並且沒有發現任何其他問題[並且我已經在爲20+做perl了]。我可能錯過了一些東西,但是,否則事情會好起來的。 –