当我计算进程的数字以使用wc -l
时,命令行中的数字是2,但在shell脚本中发现是4,发生了什么?
$ ps -ef |grep -v grep |grep etcd |wc -l
2
$ bash -x count.sh etcd
++ ps -ef
++ grep -v grep
++ grep etcd
++ wc -l
+ num=4
+ case $1 in
+ echo 4
4
外壳脚本
#!/usr/bin/env bash
num=$(ps -ef |grep -v grep |grep etcd |wc -l)
case $1 in
etcd)
echo ${num}
;;
*)
echo "other"
;;
esac
我猜您调用的脚本带有一个参数:count.sh etcd
。脚本本身将是ps输出的一部分,这会增加结果。
使用pgrep
,它适用于
pgrep -c etcd
我进一步建议使用-x
(精确匹配(参数,以防止其与etcdctl
匹配,例如:
pgrep -xc etcd
#!/usr/bin/env bash
num=$(pgrep -xc etcd)
case $1 in
etcd)
echo "${num}"
;;
*)
echo "other"
;;
esac