最近遇到一个需求,调用perl脚本,由于自己不会perl硬着头皮上
实现的功能是,下一周任一时间发送上一周一周报
#!/usr/bin/perl -w
#检测是否是闰年
#输入参数年:数值类型
#如:2017
sub is_leap_year{
my ($year) = @_;
my $flag = 0;
if((($year) %4 == 0 && ($year) % 100 != 0) || ($year) % 400 == 0){
$flag = 1;
}else{
$flag = 0;
}
return $flag;
}
#返回偏移后的unix时间戳
#参数:年,月,日,偏移日期(可正可负),数值类型
#如:2017,9,15,-3,返回2017-9-12-0;00:00的unix时间戳
sub getOffsetTimeSecond{
my $ii = 0;
my $j = 0 ;
my $sec = 0;
my ($year,$month,$day,$offsetday) = @_;
my @days = (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
for($ii =1970;$ii < $year; $ii = $ii + 1 )
{
my $gg = is_leap_year($ii);
my $flag = 1;
if($gg == $flag){
$sec += 31622400;
}else{
$sec += 31536000;
}
}
for( $j = 1; $j < $month; $j = $j + 1)
{
my $mm = 2;
my $ll = is_leap_year($year);
my $flagg = 1;
$sec += $days[$j] * 86400;
if( $j == $mm && $flagg == $ll)
{
$sec += 86400;
}
}
$sec += ($day- 1) * 86400;
$sec -= 28800;
$sec += 86400 * $offsetday;
return $sec;
}
my $txdate;
my $jobname;
$txdate = $ARGV[2];
$jobname = $ARGV[1];
my $y=substr($txdate, 0, 4) + 0;
my $m=substr($txdate,4,2) + 0;
my $d=substr($txdate,6,2) + 0;
my $mysecondtest = getOffsetTimeSecond($y,$m,$d,0);
my ($tsec1,$tmin1,$thour1,$tmday1,$tmon1,$tyear_off1,$twday1) = localtime($mysecondtest);
if($twday1 == 0){
$twday1 += 7;
}
my $lastsecond = getOffsetTimeSecond($y,$m,$d,-6-$twday1);
my($sec,$min,$hour,$day,$mon,$year) = localtime($lastsecond);
$mon++;
$year += 1900;
$txdate = sprintf("%04d%02d%02d",$year,$mon,$day);
#print "$txdate\n";
#发送报表 周报RP_SOHU_AD_WEEKLY
my $code=system("/bin/sh /opt/dwetl/tableau/sh/tableau_mail.sh 'RP_AD_WEEKLY' '$txdate'");
exit $code/256;