bash 脚本没有正确给出 MariaDB 服务状态

bash script not giving the MariaDB service status correctly

我必须检查我的 MariaDB 服务是否在 CentOS 7 中 运行ning。

为此,我只创建了 .sh 文件。此文件内容如下

#!/bin/bash
service=mariadb

if ( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 )
then
  echo "$service is running!!!"
else
  echo "$service is not running!!!"
fi

当我运行下面的命令

ps -ef | grep -v grep | grep mariadb | wc -l

如果服务是运行宁return1

如果服务停止return 0

以上输出正确。

但是当我execute my .sh file它给出了错误的输出

如果服务是 运行ning return(mariadb 不是 运行ning!!!)

如果服务停止return(mariadb 不是运行ning!!!)

( 用于创建子 shell,可能并不是您真正想要的。你可以做

if [ $(ps -ef | grep -v grep | grep "$service" | wc -l) -gt 0 ]; then

但实际上 pgrep 这会容易得多,而不是构建您自己的管道来查找流程。尝试:

#!/bin/bash
service=mariadb

if pgrep -f "$service"
then
    printf '%s is running!!!' "$service"
else
    printf '%s is not running!!!' "$service"
fi

pgrep 将以 0 退出,当它处于退出状态时,如果找到某些东西,则为成功;如果没有找到任何匹配的进程,则为 1

此外,我切换到 printf 而不是 echo。这个例子应该没​​有问题,但是echo isn't the preferred way most of the time

在您尝试使用括号时,您试图使用 > 作为大于比较,但它实际上会被 shell 作为重定向运算符使用(我敢打赌你现在在该目录中有一个名为 0 的文件)。如果你想做算术运算,你需要双括号 ((...)) 或者,如果你想测试一些东西,你可以像我上面那样使用方括号。单括号表示 运行 子 shell 中包含的命令。