Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于生成HTML输出的Shell脚本_Shell - Fatal编程技术网

用于生成HTML输出的Shell脚本

用于生成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

下面的脚本正在生成所需的输出,但没有将结果重定向到/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 [ "$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