发送电子邮件的 shell 脚本中的问题

时间:2021-05-28 14:13:53

标签: postgresql shell

我正在尝试检查表格并根据记录数发送电子邮件。如果特定日期的记录为零,则成功电子邮件将发出。如果特定日期有任何记录,则应显示错误消息。 我的问题是 - 正在发生相反的情况。即使没有记录,也会发出错误邮件。

下面是脚本


#!/bin/bash
export PGPASSWORD=xyz
TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
mailid='xyz@gmail.com'

cd /opt/postgres/pgsql/bin

vartest=`./psql -U user -h  host -p port umrm -t -c "select count(*) from dataprocess_errors where error_date = current_date"` >> /opt/rmapp/test_error.log

if [$vartest -eq 0]
then

echo 'Files processed without errors'  | mutt -s "Processing Success `date`" $mailid $attached  >> /opt/rmapp/test_error.log

else

error=`./psql -U user -h  host -p port umrm-t -c "select count (*) from dataprocess_errors where error_date = current_date and error_message like '%More than 25 employees%';"` >> /opt/rmapp/test_error.log

if [$error -eq 0]
        then

        echo 'Please check the table and fix the errorneous records'  | mutt -s "Alert!! $vartest records failed in processing  `date`" $mailid $attached  >> /opt/rmapp/test_error.log

        else

        echo 'Please check the table'  | mutt -s "Alert!!! processing stopped  `date`" $mailid $attached  >> /opt/rmapp/test_error.log
        fi

fi

echo "Error Check completed at :  $TIMESTAMP" >>  /opt/rmapp/test_error.log

else 部分中的第二个 if 条件是根据变量“error”的输出来识别不同类型的错误。

我是 shell 脚本的菜鸟,所以请帮忙。 在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在你的台词里

vartest=`./psql -U rmdbprd -h  atla-db-rmgr-prd-priv.com -p 5432 umrm -t -c "select count(*) from dataprocess_errors where error_date = current_date"`

error=`./psql -U rmdbprd -h  atla-db-rmgr-prd-priv.com -p 5432 umrm-t -c "sele ........

您从命令中获取标准 - 而不是错误代码

您可以(例如)获取错误代码:

./psql -U rmdbprd -h  atla-db-rmgr-prd-priv.com -p 5432 umrm -t -c "select count(*) from dataprocess_errors where error_date = current_date"
if [ $? -ne 0 ];
then
  echo "there was an error on above command"
fi

注意:if 必须紧跟在您测试错误代码的命令之后

参考:https://en.wikipedia.org/wiki/Bash_(Unix_shell)

答案 1 :(得分:0)

考虑到您的 psql 命令工作正常,您在上述脚本中只有一个问题。在两个 if 条件中,'[' 之后和 ']' 之前的空格都丢失了。 所以你的 if 条件应该是:

if [ $vartest -eq 0 ]

if [ $error -eq 0 ]
相关问题