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 中包含的命令。
我必须检查我的 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 中包含的命令。