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