朋友们...
我有 bash 脚本,它每次都调用 perl 脚本并通过电子邮件发送日志文件结果。
我想更改我的 bash 脚本,使其仅在 perl 子例程行计数器(rcounter++)中有值时才发送电子邮件,而不是所有时间。
有关如何更改 .ksh 文件的任何提示?
.ksh
#!/bin/ksh
d=`date +%Y%m%d`
log_dir=$HOME
output_file=log.list
if ! list_tables -login /@testdb -outputFile $output_file
   then    
      mailx -s "list report : $d" test@mail < $output_file
 fi
=======Below if condition also works for me=============================
  list_tables -login /@testdb -outputFile $output_file
 if ["$?" -ne "0"];
    then    
          mailx -s "list report : $d" test@mail < $output_file
 fi
========================================================================
Perl 脚本:list_tables
use strict;
use Getopt::Long;
use DBI;
use DBD::Oracle qw(:ora_types);
my $exitStatus = 0;
my %options = ()
my $oracleLogin;
my $outputFile;
my $runDate;
my $logFile;
my $rcounter;
($oracleLogin, $outputFile) = &validateCommandLine();
my $db = &attemptconnect($oracleLogin);
&reportListTables($outputFile);
$db->$disconnect;
exit($rcounter);
#---------------------------
sub reportListTables {
    my $outputFile = shift;
    if ( ! open (OUT,">" . $outputfile)) {
        &logMessage("Error opening $outputFile");
    }
    print OUT &putTitle;
    my $oldDB="DEFAULT";
    my $dbcounter = 0;
    my $i;
    print OUT &putHeader();
    #iterate over results
    for (my $i=0; $i<=$lstSessions; $i++) {
        # print result row
        print OUT &putRow($i);
        $dbCounter++;
    }
    print OUT &putFooter($dbCounter);
    print OUT "   *** Report End \n";
    closeOUT;
}
#------------------------------ 
sub putTitle {
    my $title = qq{
   List Tables: Yesterday
  --------------
};
#------------------------------
sub putHeader {
    my $header = qq{
   TESTDB
  ==============
    OWNER       Table   Created
};
#------------------------------
sub putRow {
    my $indx = shift;
    my $ln = sprintf "%-19s %-30s %-19s",
       $lstSessions[$indx]{owner},
       $lstSessions[$indx]{object_name},
       $lstSessions[$indx]{created};
return "$ln\n";
}
#------------------------------
sub getListTables {
    my $runDt = shift;
       $rcounter = 0;
    my $SQL = qq{
    selct owner, object_name, to_char(created,'MM-DD-YYYY') from dba_objects
    };
    my $sth = $db->prepare ($SQL) or die $db->errstr;
    $sth->execute() or die $db->errstr;;
    while (my @row = $sth->fethcrow_array) {
        $lstSessions[$rcounter] {owner}     =$row[0];
        $lstSessions[$rcounter] {object_name}   =$row[1];
        $lstSessions[$rcounter] {created}   =$row[2];
        &logMessage(" Owner:    $lstSessions[$rcounter]{owner}");
        &logMessage(" Table:    $lstSessions[$rcounter]{object_name}");
        &logMessage(" created:  $lstSessions[$rcounter]{created}");
        $rcounter++;
    }
    &logMessage("$rcounter records found...");
}
谢谢..
如果这让生活更轻松,也很高兴在 perl 中包含 mail-x 部分..