繁体   English   中英

在邮件输出上不显示变量数据-Shell脚本

[英]No display of variable data on mail output - Shell scripting

我已经在UNIX环境中安排了一个任务,该任务发送使用Shell脚本运行/停止的服务的报告。 这是相同的代码;

#!/bin/bash
echo -e "\t\tServer daily monitoring report\n">/home/user/MailLog.txt
echo -e "\t\t`date "+%Y-%m-%d %H:%M:%S"`\n">>/home/user/MailLog.txt
sudo bash /home/user/commands.sh>>/home/user/MailLog.txt
echo >>/home/user/MailLog.txt
cat /home/user/MailLog.txt>>/home/user/StatusLog.txt
rn=`grep -c "running" MailLog.txt`
sp=`grep -c "stopped" MailLog.txt`
echo -e "Server status report\n\nServices running:\t $rn \nServices 
stopped:\t $sp "|mailx -v -s "Services report." -a /home/user/MailLog.txt 
useremail1@domain.com,useremail2@domain.com
#echo $run $stp
#rm /home/user/MailLog.txt

按照预定的任务,我会收到邮件和附件。 但是在“正在运行的服务:”和“已停止服务:”前面有一个空白。

当我手动运行脚本时,我得到正确的输出(数字+附件)。

请告诉我我在做什么错。

在两个grep命令中,将MailLog.txt替换为/home/user/MailLog.txt 通常,您很可能通常从/home/user/目录手动运行命令,但是脚本的工作目录不是/home/user ,这使得相对路径MailLog.txt指向不存在的文件。

rn=$(grep -c "running" /home/user/MailLog.txt)
sp=$(grep -c "stopped" /home/user/MailLog.txt)

更好的是,在变量中设置文件路径,并在每次要引用文件时重复使用该路径:

work_file="/home/user/MailLog.txt"
#[...]
rn=$(grep -c "running" "$work_file")
sp=$(grep -c "stopped" "$work_file")

请注意,您的代码可以通过许多其他方式进行改进,建议您使用shellcheck对其进行验证 (由于您的用户对MailLog.txt文件具有写权限,因此可以忽略sudo+redirect警告)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM