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