我一直希望得到一元运营商。似乎中国没有被赋予价值。
{{1}}
答案 0 :(得分:2)
不要忘记结束"fi"
:
PRC=`ps -ef | grep test| wc -l`
if [ "${PRC}" -eq 1 ]
then
echo "Congrats"
fi
你没有提到什么shell,但这在bash中有效。
使用-c(count)选项保存进程grep:
PRC=`ps -ef | grep -c test`
请注意您的管道在计数中包含grep命令本身,正如您在上面的评论中提到的,您的计数很可能会产生误导,因为它只是在计算自己。相反,使用这个:
PRC=`ps -ef | grep -c [t]est`
这将匹配带有“test”的命令,但不匹配grep命令本身。这是因为这是使用匹配以“t”开头的单词的正则表达式。您的命令以方括号开头,因此它自身不匹配。拒绝执行“grep test | grep -v grep”,这是一个草率的,只是不必要地使用一个过程。
答案 1 :(得分:2)
请注意,ps -ef | grep test
通常会在输出中包含grep
进程,您可能不想要。一个聪明的伎俩"为了避免这种情况,要匹配字符串" test"使用正则表达式,它不是简单的字符串" test" :
$ ps -ef | grep test
jackman 27787 24572 0 09:53 pts/2 00:00:00 grep --color=auto test
$ ps -ef | grep test | wc -l
1
与
$ ps -ef | grep '[t]est'
(no output)
$ ps -ef | grep '[t]est' | wc -l
0
我经常这样做,我写了这个bash函数psg
(对于" ps grep"):
psg () {
local -a patterns=()
(( $# == 0 )) && set -- $USER # no arguments? vanity search
for arg do
patterns+=("-e" "[${arg:0:1}]${arg:1}")
done
ps -ef | grep "${patterns[@]}"
}
您也可以使用
pgrep -f test