我的代码如下
#!/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脚本的新手,即使我搜索了错误,也找不到它。
答案 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 ...
。