在条件语句中的grep语句中转义变量

时间:2013-07-11 22:22:24

标签: bash shell

我有一行脚本:

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。我已经尝试了许多引号和其他东西的组合,并没有让它工作。我不确定嵌入引号,刻度和单引号需要什么。

2 个答案:

答案 0 :(得分:1)

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

[ -z "`/sbin/service $SERVICE_NAME status | grep \"$SERVICE_RUNNING_STR\"`" ] 

答案 1 :(得分:1)

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

if ! /sbin/service $SERVICE_NAME status | grep -q "$SERVICE_RUNNING_STR"; then