脚本在 1 台机器上运行良好,在其他机器上出现错误

脚本在 1 台机器上运行良好,在其他机器上出现错误

我在多台机器上运行以下脚本,它在几台机器上运行良好,但现在在其他机器上运行,并给出错误。

下面给出了脚本和错误。

脚本:

host="$(/bin/hostname)";
qSize="$(/usr/sbin/exim -bpc)";
qLimit="100";
sTo="[email protected]";
sFr="root@"$hostname;


if [ $qSize -ge $qLimit ]; then
echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t

else

        echo -e "There are "$qSize "emails in the mail queue"

fi

错误!!

sed: -e expression #1, char 79: unterminated `s' command

有谁知道错误可能是什么?

答案1

你的代码:

echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t

读起来很痛苦。更糟糕的是,即使你重新格式化它以使其可读,无用的使用也是sed奇怪的 - 完全是错误的。您用于sed在 echo 语句的输出之前插入电子邮件标题。这完全没有意义。

简而言之,你不需要sed在这里使用,也不应该sed在这里使用。它只会增加额外的复杂性和出现错误的机会。

做这样的事情:

sendmail -t <<EOF
From: $sFr
To: $sTo
Subject: *ALERT* - Mail queue on '$host' exceeds limit

There are $qSize emails in the mail queue

EOF

或者像这样:

subject="*ALERT* - Mail queue on '$host' exceeds limit"
message="There are $qSize emails in the mail queue"

echo "$message" | sendmail -f "$sFR" -s "$subject" "$sTO"

甚至像这样:

{
  echo "From: $sFr"
  echo "To: $sTo"
  echo "Subject: *ALERT* - Mail queue on '$host' exceeds limit"
  echo
  echo "There are $qSize emails in the mail queue"
} | sendmail -t

即使这样也更好:

echo "From: $sFr
To: $sTo
Subject: *ALERT* - Mail queue on '$host' exceeds limit

There are $qSize emails in the mail queue" | sendmail -t

简而言之,几乎任何其他将多行文本通过管道传输到另一个程序(sendmail在本例中为 )的方式都比您正在执行的方式更好。

答案2

你有两条线

echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t

应该是单行

echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue on '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t

即该错误可能是由您将其复制/粘贴到本机的方式引起的。

问题出在第 79 列(80 列显示?)这一事实有点证实了这一点。

相关内容