Если пункты не работают должным образом в Unix - PullRequest
0 голосов
/ 06 мая 2019

Я борюсь с моим сценарием Unix, чтобы отправить почту из success.log и fail.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, но это не помогло.

1 Ответ

0 голосов
/ 06 мая 2019

Сценарии оболочки требуют от вас мучительного внимания к пробелам.

Команда [ - это обычная команда (а также встроенная оболочка); обычно вы найдете исполняемый файл /bin/[ или /usr/bin/[ (а также /bin/test или /usr/bin/test. Следовательно, оболочка находит команду только тогда, когда она написана правильно. Также, когда пишется имя команды [, последний аргумент должен быть ] (только).

У вас есть:

if [-f "$DB_Success_log" ] ; then

Скорее всего, на вашей машине нет команды /bin/[-f; вы должны получить сообщение об ошибке оболочки «команда [-f не найдена». Вам нужно:

if [ -f "$DB_Success_log" ] ; then

Я почти автоматически удалил пробел перед точкой с запятой (оболочка все равно удаляет точку с запятой перед выполнением команды [). Это не вредит, но не нужно.

У вас та же проблема с "$DB_failure_log" - меня интересует непоследовательная заглавная буква в именах переменных, но это в основном ваша проблема.

Вы также, похоже, не указали правильную двойную кавычку для команды, начинающейся с echo " From :$from; это должно появиться перед строкой > $mail_content. Вам также необходимо проверить, отсутствует ли у вас первая sendmail команда, и есть ли еще множество других предметов (fi отсутствует, дважды?), О которых вам также следует позаботиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...