Bash函数返回似乎无法正常工作

时间:2019-05-27 14:27:00

标签: mysql bash shell

我有一个函数is_mysql_db()来识别服务器中已安装的数据库是否是mysql服务器。因此,理想情况下,主体中的代码应调用该函数以确定我是否应将此服务器视为mysql服务器。

我在函数的末尾尝试使用方括号或方括号将方括号(“ =”)用于比较。老实说,我没有想法,我希望这段代码看起来尽可能清晰,因为这只是其中的一小部分。

在我的示例代码下面:

#!/bin/bash

is_mysql_db(){
    yum_mysql_out=$(yum list installed | grep mysql-community | awk '{ print $1 }' | tail -n1)
    [ $yum_mysql_out == "mysql-community-server.x86_64" ]
}


if [ is_mysql_db ]
then
        echo "Installed"
else
        echo "Not Installed"
fi

我希望是否已安装MySQL yum软件包来检测它并返回已安装的软件包,以及是否不返回未安装。很简单,但显然没有那么多。

1 个答案:

答案 0 :(得分:2)

不是shell函数是错误的,而是您对它的调用。

将字符串放在方括号中不会运行该命令,它只会测试字符串本身是否为空。

请勿将函数放在方括号中,它将作为命令运行。

示例:

$ if [ false ] ; then echo "false is true??"; else echo "false is false as expected" ; fi

false is true??

$ if false ; then echo "false is true??"; else echo "false is false as expected" ; fi

false is false as expected

顺便说一句,您的功能可能更简单:

is_mysql_db(){
    yum list installed | grep -q mysql-community-server
}

甚至直接使用rpm,因此yum不会重新加载其软件包索引:

is_mysql_db(){
    rpm --quiet -q mysql-community-server
}