[英]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.