我正在努力使用Unix脚本来发送来自success.log和failure.log的邮件。
使用我当前的脚本和我所做的更改,要么是成功邮件,要么是失败邮件 DB_Success_log具有成功处理的所有数据库。 DB_Failure_log具有所有失败的数据库。下面只是我的脚本的骨架,而不是确切的脚本。
DB_Success_log=path/DB_success.log
DB_Failure_log=path/DB_failure.log
mail_content=path/mail_content.mail
if [-f "$DB_Success_log" ] ; then
echo " From :$from
To : $to
cc : $cc
Subject : $subject
Below Db got success >$mail_content
cat $DB_Success >>$mail_content
if [-f "$DB_failure_log" ] ; then
echo " From :$from
To : $to
cc : $cc
Subject : $subject
Below DB got failed >$mail_content
cat $DB_Failure >>$mail_content
cat $mail_content |sendmail -t
在以上两个中,只有一个正在运行。如果10个数据库中有5个失败,则5个成功,那么列表中只会出现失败的邮件或成功。我试图更改If子句,但无济于事。
答案 0 :(得分:0)
Shell脚本要求您特别注意空格。
[
命令是常规命令(以及内置的shell);通常您会找到可执行文件/bin/[
或/usr/bin/[
(以及/bin/test
或/usr/bin/test
。因此,shell仅在正确拼写命令时才能找到该命令。 ,当命令名称拼写为[
时,它要求其最后一个参数为]
(仅)。
您有:
if [-f "$DB_Success_log" ] ; then
您的计算机上很可能没有命令/bin/[-f
;您应该收到有关“找不到命令[-f
”的shell错误消息。您需要:
if [ -f "$DB_Success_log" ] ; then
我几乎自动删除了分号前的空格(无论如何,外壳程序都会在执行[
命令之前删除分号)。它没有害处,但不是必需的。
您在"$DB_failure_log"
上遇到了同样的问题-让我想知道变量名中的大小写不一致,但这主要是您的问题。
对于echo " From :$from
开始的命令,您似乎还缺少正确的右引号。大概应该出现在> $mail_content
行之前。您还需要检查是否缺少第一个sendmail
命令,是否还有其他杂项(fi
缺失两次?),您也应该注意。