用于生成HTML输出的Shell脚本
下面的脚本正在生成所需的输出,但没有将结果重定向到/home/myuser/slavedelay.html #!/bin/bash用于生成HTML输出的Shell脚本,shell,Shell,下面的脚本正在生成所需的输出,但没有将结果重定向到/home/myuser/slavedelay.html #!/bin/bash host=<ip> echo $host user=usr1 password=mypass threshold=300 statusok=OK statuscritical=CRITICAL for i in ert7 ert9 do echo "<html>" > /home/myuser/slavedelay.html if
host=<ip>
echo $host
user=usr1
password=mypass
threshold=300
statusok=OK
statuscritical=CRITICAL
for i in ert7 ert9
do
echo "<html>" > /home/myuser/slavedelay.html
if [ "$i" == "ert7" ]; then
slvdelay=`mysql -u$user -p$password -h<ip> -S /backup/mysql/mysql.sock -e 'show slave status\G' | grep Seconds_Behind_Master | sed -e 's/ *Seconds_Behind_Master: //'`
if [ $slvdelay -ge $threshold ]; then
echo "<tr><td>$i</td><td>CRITICAL</td>" >> /home/myuser/slavedelay.html
echo "<tr><td>$i</td><td>CRITICAL</td>"
else
echo "<tr><td>$i</td><td>OK</td>" >> /home/myuser/slavedelay.html
echo "<tr><td>$i</td><td>OK</td>"
fi
fi
done
echo "</html>" >> /home/myuser/slavedelay.html
主机=
echo$host
用户=usr1
密码=我的通行证
阈值=300
状态OK=OK
状态临界=临界
因为我在ert7 ert9
做
echo”“>/home/myuser/slavedelay.html
如果[“$i”==“ert7”];然后
slvdelay=`mysql-u$user-p$password-h-S/backup/mysql/mysql.sock-e'show slave status\G'| grep Seconds_Behind|u Master | sed-e'S/*Seconds_Behind_Master://'`
如果[$slvdelay-ge$threshold];然后
echo“$iCRITICAL”>>/home/myuser/slavedelay.html
回声“$iCRITICAL”
其他的
echo“$iOK”>>/home/myuser/slavedelay.html
回声“$iOK”
fi
fi
完成
echo”“>>/home/myuser/slavedelay.html
如果我对它给出的输出文件/home/myuser/slavedelay.html进行cat
<html>
</html>
执行结果:
sh slave_delay.sh
<tr><td>sdb7</td><td>OK</td>
sh slave\u delay.sh
sdb7OK
更换:
if [ "$i" == "ert7" ];
与:
您也可以在测试中使用
=
运算符。每次通过循环时,您都会因为命令而清空输出文件
echo "<html>" > /home/myuser/slavedelay.html
我试过了,但结果都一样。在控制台中,这是正确的结果。但是没有重定向到输出文件(/home/myuser/slavedelay.html)。这是一个逻辑错误,在for循环中给出了echo”“>/home/myuser/slavedelay.html。相反,你需要在循环之前给出它。将outout文件名放在一个变量中,这样你就可以确保没有输入错误(我猜你在发布之前编辑了它,这可能就是问题所在)。仍然尝试了相同的问题。。documentroot=/home/myuser/slavedelay.html,documentroot替换为文件路径的所有位置
echo "<html>" > /home/myuser/slavedelay.html
for i in ert7 ert9
do
if [ "$i" == "ert7" ]; then
echo "<html>" > /home/myuser/slavedelay.html
slvdelay=`mysql -u$user -p$password -h<ip> -S /backup/mysql/mysql.sock -e 'show slave status\G' | grep Seconds_Behind_Master | sed -e 's/ *Seconds_Behind_Master: //'`
if [ $slvdelay -ge $threshold ]; then
echo "<tr><td>$i</td><td>CRITICAL</td>"
else
echo "<tr><td>$i</td><td>OK</td>"
fi | tee -a /home/myuser/slavedelay.html
echo "</html>" >> /home/myuser/slavedelay.html
fi
done