在Perl脚本中运行Shell脚本

时间:2016-04-22 05:55:27

标签: perl shell

我有一个包含文件名的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脚本的新手。有人可以帮忙解决我上面做错的事吗?

2 个答案:

答案 0 :(得分:0)

根据您的示例(显示已编辑,使其更难以排除故障),看起来好像您没有引用字符串。

而不是

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

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

答案 1 :(得分: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的数组,就像world

的名为"hello $world"的标量一样