我正在尝试检查表格并根据记录数发送电子邮件。如果特定日期的记录为零,则成功电子邮件将发出。如果特定日期有任何记录,则应显示错误消息。 我的问题是 - 正在发生相反的情况。即使没有记录,也会发出错误邮件。
下面是脚本
#!/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 脚本的菜鸟,所以请帮忙。 在此先感谢您的帮助。
答案 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 必须紧跟在您测试错误代码的命令之后
答案 1 :(得分:0)
考虑到您的 psql
命令工作正常,您在上述脚本中只有一个问题。在两个 if 条件中,'[' 之后和 ']' 之前的空格都丢失了。
所以你的 if
条件应该是:
if [ $vartest -eq 0 ]
和
if [ $error -eq 0 ]