Shell 在if语句中使用grep

Shell 在if语句中使用grep,shell,if-statement,grep,Shell,If Statement,Grep,我是一个shell脚本的初学者,需要一个脚本来检查进程的状态,并在启动时给我输出“正在运行”,在关闭时给我输出“未运行” 我尝试了下面的一个,但不起作用: if [ -s `/opt/reds/recycle.sh status | grep "pid"` ]; then echo "running" else echo "not running" fi 有人能帮我吗?将if语句更改为: if /opt/reds/recycle.sh status | grep "pid" t

我是一个shell脚本的初学者,需要一个脚本来检查进程的状态,并在启动时给我输出“正在运行”,在关闭时给我输出“未运行”

我尝试了下面的一个,但不起作用:

if [ -s `/opt/reds/recycle.sh status | grep "pid"` ];
then
    echo "running"
else
    echo "not running"
fi

有人能帮我吗?

if
语句更改为:

if /opt/reds/recycle.sh status | grep "pid"
then
    ...
fi
您可能想让grep保持沉默:

-q
用于安静操作。
-s
以抑制错误消息(此处不需要它,因为
grep
正在从
stdin
获取输入)

通常,要使用
if
检查命令的退出状态,请执行以下操作:

if command;then
   ...
fi

如果
recycle.sh
脚本完全正确执行,它应该设置退出代码以指示状态

如果是这种情况,您应该能够观察到,当状态为OK(可能意味着服务正在运行)时,它返回零,否则返回非零

这样,您就根本不需要
grep

if /opt/reds/recycle.sh status >/dev/null; then
    echo running
else
    echo not running
fi

正确编写的脚本也可能有一个
--query
选项或类似的(
--quiet
--silent
--script
?),它允许在不重定向其输出的情况下在此构造中使用它。

如果[-s$(/opt/reds/recycle.sh status | grep“pid”)
通常,
-s
操作检查由以下参数命名的文件是否具有非零大小(不是空文件)。您想用
-s
做什么?虽然您想在
grep
中添加
-q
标志,以避免将匹配项打印到标准输出。@tripleee yap,但也有一个
-s
选项来抑制错误消息;虽然我很难想象在阅读标准输入时会出现什么样的错误消息,但我还是想忽略它。如果机器内存不足或类似情况,您可能希望得到通知。@tripleee是的,对。。在这种情况下不需要,谢谢。工作正常:-)但是,recycle.sh有一些错误,因为输出中出现了一些不必要的行。如何在输出中仅获取“正在运行”或“未运行”?重定向到
/dev/null
应该已经消除了任何正常的输出。如果它还将虚假输出打印到标准错误,则需要将
2>&1
添加到重定向中。实际上我已经尝试过了。我也犯了同样的错误。。“如果/opt/reds/recycle.sh status 2>&1>/dev/null;”不,这是
/dev/null 2>&1很抱歉在@tripleee.打扰了你。。我也试过这个,但运气不好。当进程未运行时,recycle.sh会在输出中写入一些错误。这其实很好。但是,在我的“查找状态”脚本的输出中看起来不太好:(