好奇怪的问题

来源:5-7 命令替换(下)

secrethaha

2019-03-03

老师您好 我遇到了个 很奇怪的问题
我虚拟机上装了nginx 我把它给停止了
我直接在终端输入echo $(ps aux|grep nginx | grep -v grep | wc -l) 是等于0
可是我在shell脚本里打印确是2

[root@VM_0_12_centos shellfile]# ps aux|grep nginx 
root     30657  0.0  0.0 112704   976 pts/0    S+   14:47   0:00 grep --color=auto nginx
[root@VM_0_12_centos shellfile]# echo $(ps aux|grep nginx | grep -v grep | wc -l)
0
[root@VM_0_12_centos shellfile]# sh ziqi_nginx.sh 
process:2
[root@VM_0_12_centos shellfile]# cat ziqi_nginx.sh 
#!/bin/bash
nginx_process_num=$(ps aux|grep nginx | grep -v grep | wc -l)
echo "process:$nginx_process_num"
if [ $nginx_process_num -eq 0 ];then
   echo "nginx down"
   /usr/local/nginx/sbin/nginx
   echo "nginx start"
fi
[root@VM_0_12_centos shellfile]# 
写回答

1回答

酷田

2019-03-03

你的脚本名称是不是包含了nginx这个字符串,如果是的话,执行脚本就会在系统中生成一个进程,所以你再ps,会得到一个存在的结果!但终端执行就没问题,老师课程中讲到这个问题了,也有规避办法……就是在脚本中通过$$获取到脚本执行的PID,然后将其grep -v过滤掉,就能得到正确的结果了!如果看不明白,可以把你的代码拍照发上来,我修改后给你标注发过去,你看了就明白了……有问题再联系哦

2
2
慕少7118645
确实神奇
2021-02-20
共2条回复

掌握Shell脚本编程 360架构师带你进阶Linux高手

30%知识讲解+70%实例操作 掌握Shell脚本编程能力

1638 学习 · 297 问题

查看课程