Linux bash脚本表现得很奇怪

The*_*gia 2 linux bash shell

我有一个简单的bash脚本,可以监视mysql是up还是down.如果它关闭,我想也阻止HAProxy运行.下面是我简单的bash脚本:

#!/bin/bash

nc -z 127.0.0.1 3306
rt_val=$?
msg=$(sudo service haproxy stop);
if [ $rt_val != 0 ]; then
    eval $msg
    exit 3
else
    exit 0
fi
Run Code Online (Sandbox Code Playgroud)

MySQL运行或不运行的部分工作得很好.停止HAProxy部分似乎有问题.发生的事情是当mysql停止时HAProxy停止.但是当我启动MySQL和HAProxy时,即使MySQL启动并运行,脚本似乎也会继续停止HAProxy.

Mic*_*ros 7

在您的脚本中,您无条件地执行sudo service haproxy stop$msg使用命令替换存储输出.

您可以将命令存储在变量中,但这被认为是非常糟糕的做法(请参阅Bash FAQ 050).相反,尝试将命令分配给函数并稍后调用它(function关键字既是可选的又是Bash特定的,为了便于携带而留下它):

#!/bin/bash

function stopcmd() { sudo service haproxy stop ; } # semicolon needed if on single line

nc -z 127.0.0.1 3306
rt_val=$?

if [ $rt_val != 0 ]; then
    stopcmd
    exit 3
else
    exit 0
fi
Run Code Online (Sandbox Code Playgroud)

此外,[ ... ]在这种简单的情况下,函数和test()都不是必需的.您的脚本可以写成:

#!/bin/bash 

if nc -z 127.0.0.1 3306
then
    exit 0
else
    sudo service haproxy stop
    exit 3
fi
Run Code Online (Sandbox Code Playgroud)