使用日志记录触发过程的Shell脚本

使用日志记录触发过程的Shell脚本,shell,Shell,这是需要触发存储过程的shell脚本,当记录计数为0时,它应该在日志中捕获找到的重复记录为0,如果大于0,则在没有记录的情况下进行日志记录。 此外,如果存在任何sqlerror,则应将其写入日志文件中,并在所有情况下发送通信。 我们有一个funct文件,它声明了所有目录,我们在这里引用的是日志文件路径目录。 你能帮我纠正一下代码逻辑吗 #!/bin/ksh . /local/dir1/funct.sh sqlplus -s ${ORAUSER}/${ORAPASSWD}@

这是需要触发存储过程的shell脚本,当记录计数为0时,它应该在日志中捕获找到的重复记录为0,如果大于0,则在没有记录的情况下进行日志记录。 此外,如果存在任何sqlerror,则应将其写入日志文件中,并在所有情况下发送通信。 我们有一个funct文件,它声明了所有目录,我们在这里引用的是日志文件路径目录。 你能帮我纠正一下代码逻辑吗

    #!/bin/ksh
    . /local/dir1/funct.sh
    sqlplus -s ${ORAUSER}/${ORAPASSWD}@${ORASRVC} <<EOF > $LOG_TEXT 
    set head off
    set serveroutput on
    SELECT TO_CHAR(SYSDATE,'MMDDRRRRHH24MISS') FROM DUAL;
    EOF    
 TIME_STAMP=`cat ${LOG_TEXT}`    
 LOG_FILE_NAME='FileStatus'${TIME_STAMP}'.log'
 LOG_FILE=${LOGFILEDIR}'/FileStatus/'${LOG_FILE_NAME}

write_log "Database Timestamp is $TIME_STAMP"
write_log "Executing FileStatus now..."

sqlplus -s ${ORAUSER}/${ORAPASSWD}@${ORASRVC} <<EOF >> ${LOG_TEXT} 
set feedback off
set heading off
DECLARE
v_count NUMBER;
BEGIN
select count(*) INTO v_count from (select col1,col2,count(col3) from Tab1 group by col1,col2 having count(col3)>1);
whenever sqlerror exit -1
whenever oserror exit -1
execute FileStatus;
END;
EOF

if [[ v_count -eq 0 ]] then
        write_log "FileStatus executed successfully."
    write_log "No Duplicate records Found: $LOG_FILE"
         mailx -s "No Duplicate records Found" XXXXX@gmail.com < ${success}
elif [[ "$v_count -gt 0 ]] 
 then
        write_log "FileStatus  executed successfully."
    write_log "Number of duplicate records found::$v_count:$LOG_FILE"
        mailx -s "Number of duplicate records found:$v_count" XXXXX@gmail.com < ${success}
else
        Write_log "FileStatus Failure."
         mailx -s "FileStatus" XXXXX@gmail.com < ${failure}

fi  
cleanup
exit 0;
#/bin/ksh
. /本地/dir1/funct.sh
sqlplus-s${ORAUSER}/${ORAPASSWD}@${ORASRVC}1);
每当sqlerror退出时-1
每当oserror退出时-1
执行文件状态;
结束;
EOF
如果[[v_计数-等式0]],则
写入日志“文件状态已成功执行”
写入日志“未找到重复记录:$log\u文件”
mailx-s“未找到重复记录”XXXXX@gmail.com<${success}
elif[“$v_计数-gt 0]]
然后
写入日志“文件状态已成功执行”
write_log“找到的重复记录数:$v_count:$log_FILE”
mailx-s“找到的重复记录数:$v_count”XXXXX@gmail.com<${success}
其他的
写入日志“文件状态失败”
mailx-s“文件状态”XXXXX@gmail.com<${failure}
fi
清理
出口0;

我可以发现一些问题。用于清理您的代码。祝您好运。而且,很抱歉,对
ksh
的支持有限(如果我错了,请纠正我),您可能应该将
#!/bin/bash
作为您的新shell。祝您好运。是的。我使用了shellcheck来清理代码,但它无法识别具有DB凭据和日志文件目录路径的func.sh文件,并收到此错误消息“找不到[没有这样的文件或目录]“你确定你真的想要
/local/dir1/funct.sh
。我不习惯看到系统有一个目录
local
,它位于
root
(即
/
)目录中。也许您想要
$HOME/local/bin/funct.sh
或类似的。祝你好运。我们正在其他脚本中使用相同的目录,这些脚本正在阅读,没有问题