Bash脚本错误“意外令牌”确定php命令

时间:2018-11-11 15:44:59

标签: bash

我的代码如下

#!/bin/bash

function execute_php () {

process=$(ps -A | grep php)
if [-z "$process"]; then echo "no php running" fi

}

(sleep 5 && execute_php)

我正在尝试确定命令“ php”是否正在执行,但出现错误“第8行:意外令牌'}'附近的语法错误”

我是使用bash脚本的新手,即使我搜索了错误,也找不到它。

1 个答案:

答案 0 :(得分:2)

if [-z "$process"]

需要有空格:

if [ -z "$process" ]

几乎可以肯定,这至少在1000个不同的问题中重复出现,但是它的简短之处在于您正在尝试调用名为[的命令,但是您无意中调用了名为[-z的命令您的PATH中可能不存在。 [不是语法的一部分。这是一个命令。如果您改为这样写,这将更加清楚:

if test -z "$process"

此外,您在fi之前缺少分号(或换行符)。

请注意,您可以通过直接检查grep来更轻松地检查其状态:

execute_php () {
    if ! ps -A | grep -q php; then echo "no php running"; fi
}

进一步请注意,如果所需进程未运行,则返回非零值可能会更好:

execute_php() { 
    if ! ps -A | grep -q php; then echo "no php running" >&2; return 1; fi
}

但是,说实话,这太冗长了(函数名称似乎错误。您没有执行任何操作。)IMO,您应该编写:

check_php() {
    ps -A | grep -q php
}

,然后呼叫者可以执行if check_php; then ...