2016-04-22 255 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了]。我可能错过了一些东西,但是,否则事情会好起来的。 –