0

我有一个包含这一行的脚本:

if [ -z "`/sbin/service mysqld status | grep 'mysqld (.*) is running'`" ] ; then

我想用变量替换服务名称和 grep 正则表达式。不同版本的 OS/MySQL 有不同的服务名称和报告不同的状态。我厌倦了编辑代码中的行。所以我这样做了:

SERVICE_NAME=mysql
SERVICE_RUNNING_STR="MySQL (.*) running"
...
if [ -z "`/sbin/service $SERVICE_NAME status | grep '$SERVICE_RUNNING_STR'`" ] ; then
...

除非它不起作用。它在 grep 语句中输出 SERVICE_RUNNING_STR。我尝试了许多引号和其他东西的组合,但都没有奏效。我不确定嵌入引号、刻度和单引号中需要什么。

4

2 回答 2

1

不要使用单引号,它们不会扩展变量。反斜杠双引号:

[ -z "`/sbin/service $SERVICE_NAME status | grep \"$SERVICE_RUNNING_STR\"`" ] 
于 2013-07-11T22:34:40.710 回答
1

而不是[ -z ... ]用来查看 grep 是否输出任何内容,只需检查 grep 的退出状态(并使用其-q选项来抑制输出,正如@choroba 指出的变量引用周围的双引号):

if ! /sbin/service $SERVICE_NAME status | grep -q "$SERVICE_RUNNING_STR"; then
于 2013-07-12T03:41:16.143 回答