Bash:如果/其他语句在一行中

我正试图检查一个进程(假设它被称为some_process )正在服务器上运行。 如果是,则回显1,否则回显0。

这是我正在使用的命令,但它只能部分工作(更多信息在下面)。 请注意,我需要在一行中编写脚本。

 ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi 

注意: some_proces[s] [s]中的some_proces[s]是为了防止grep自身返回。

如果some_process正在运行,那么"1"得到回显,这很好。 但是,如果some_process没有运行,没有任何回应。

没有必要明确检查$? 。 做就是了:

 ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0 

请注意,这依靠回声没有失败,这当然不能保证。 写一个更可靠的方法是:

 if ps aux | grep some_proces[s] > /tmp/test.txt; then echo 1; else echo 0; fi 

&&表示“如果成功”; 通过将if语句放在其右侧,确保它只在grep返回0时才运行。 要修复它,使用; 代替:

ps aux | grep some_proces[s] > /tmp/test.txt ; if [ $? -eq 0 ]; then echo 1; else echo 0; fi

(或者只是使用换行符)。

使用grep -vc忽略ps输出中的grep并同时对行进行计数。

 if [[ $(ps aux | grep process | grep -vc grep) > 0 ]] ; then echo 1; else echo 0 ; fi 

您可以充分利用&&|| 这样的运营商:

 ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0 

为了排除grep本身,你也可以做这样的事情:

 ps aux | grep some_proces | grep -vw grep > /tmp/test.txt && echo 1 || echo 0