我有一个函数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软件包来检测它并返回已安装的软件包,以及是否不返回未安装。很简单,但显然没有那么多。
答案 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
}