shell if条件判断不成功

sh/bash/dash/ksh/zsh等Shell脚本
回复
ps3wifi
帖子: 63
注册时间: 2010-01-08 13:09
送出感谢: 1 次
接收感谢: 0

shell if条件判断不成功

#1

帖子 ps3wifi » 2020-02-21 14:24

#! /bin/bash
PROC_NAME=apache2
COMMAND=`ps -ef |grep -w $PROC_NAME |grep -v grep |wc -l &> /dev/null`
if [[ $COMMAND -le 0 ]]; then
echo "program is stop"
/etc/init.d/apache2 restart
else
echo "program is running"
fi
我想问一下大佬们,我参照网上的教程写的一个简单判断apache2进程是否存在,但是进程已经存在的情况执行代码还是会判断到第一条,显示program is stop,重新执行apache2 restart,如果我修改了if里面的条件又会变成program is running,进程我已经终止了也一样显示program is running执行else,不执行if里面的条件,我把if改成[ $? -gt 0 ]直接用命令成功失败返回的值做条件也失败
ps3wifi
帖子: 63
注册时间: 2010-01-08 13:09
送出感谢: 1 次
接收感谢: 0

Re: shell if条件判断不成功

#2

帖子 ps3wifi » 2020-02-21 14:44

ps3wifi 写了:
2020-02-21 14:24
#! /bin/bash
PROC_NAME=apache2
COMMAND=`ps -ef |grep -w $PROC_NAME |grep -v grep |wc -l &> /dev/null`
if [[ $COMMAND -le 0 ]]; then
echo "program is stop"
/etc/init.d/apache2 restart
else
echo "program is running"
fi
我想问一下大佬们,我参照网上的教程写的一个简单判断apache2进程是否存在,但是进程已经存在的情况执行代码还是会判断到第一条,显示program is stop,重新执行apache2 restart,如果我修改了if里面的条件又会变成program is running,进程我已经终止了也一样显示program is running执行else,不执行if里面的条件,我把if改成[ $? -gt 0 ]直接用命令成功失败返回的值做条件也失败
为什么修改成这样就可以了,使用wc -l统计列,程序终止时为0,程序启动时为1再if [ $COMMAND -eq 0 ]不能成功判断条件
#! /bin/bash
PROC_NAME=apache2
#COMMAND=`ps -ef |grep -w $PROC_NAME |grep -v grep |wc -l &> /dev/null`
ps -ef |grep -w $PROC_NAME |grep -v grep &> /dev/null
if [ $? -gt 0 ]; then
echo "program is stop"
/etc/init.d/apache2 restart
else
echo "program is running"
fi
头像
astolia
论坛版主
帖子: 4391
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 736 次

Re: shell if条件判断不成功

#3

帖子 astolia » 2020-02-22 1:04

你知道

代码: 全选

a=`b`
这种写法的意思吗?
ps3wifi
帖子: 63
注册时间: 2010-01-08 13:09
送出感谢: 1 次
接收感谢: 0

Re: shell if条件判断不成功

#4

帖子 ps3wifi » 2020-02-22 14:15

astolia 写了:
2020-02-22 1:04
你知道

代码: 全选

a=`b`
这种写法的意思吗?
就是给a赋值为b,后面调用变量a就是`b`,不知道我的理解对不对
onlylove
论坛版主
帖子: 4805
注册时间: 2007-01-14 16:23
送出感谢: 1 次
接收感谢: 137 次

Re: shell if条件判断不成功

#5

帖子 onlylove » 2020-02-22 14:33

你好像只说了一半,没说另一半``
ps3wifi
帖子: 63
注册时间: 2010-01-08 13:09
送出感谢: 1 次
接收感谢: 0

Re: shell if条件判断不成功

#6

帖子 ps3wifi » 2020-02-22 14:39

onlylove 写了:
2020-02-22 14:33
你好像只说了一半,没说另一半``
我就不理解为什么pgrep wc -l输出,程序没有运行时为0我给的条件就是-eq 0为什么脚本直接给我跳到else上去执行了
上次由 ps3wifi 在 2020-02-22 20:08,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 4391
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 736 次

Re: shell if条件判断不成功

#7

帖子 astolia » 2020-02-22 15:17

你没弄懂``的意思。估计&> /dev/null的意义你也不太清楚。找本shell编程的教程学习一下吧,比如这篇 https://www.ituring.com.cn/book/tupubarticle/19995
ps3wifi
帖子: 63
注册时间: 2010-01-08 13:09
送出感谢: 1 次
接收感谢: 0

Re: shell if条件判断不成功

#8

帖子 ps3wifi » 2020-02-22 18:53

astolia 写了:
2020-02-22 15:17
你没弄懂``的意思。估计&> /dev/null的意义你也不太清楚。找本shell编程的教程学习一下吧,比如这篇 https://www.ituring.com.cn/book/tupubarticle/19995
谢谢
头像
astolia
论坛版主
帖子: 4391
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 736 次

Re: shell if条件判断不成功

#9

帖子 astolia » 2020-02-23 12:37

ps3wifi 写了:
2020-02-22 14:39
程序没有运行时为0
你确定?你实际运行过你写的那条命令,还是只凭想象?
乳酸菌
帖子: 28
注册时间: 2020-02-03 8:53
系统: linux mint
送出感谢: 1 次
接收感谢: 0

Re: shell if条件判断不成功

#10

帖子 乳酸菌 » 2020-02-23 22:40

`~下边的`
和 “ 下边的' 是不一样的

>/dev/null 是执行过程不显示的一种方法

linux 有两个好玩的设备

/dev/null 无底洞 和
/dev/zero 该设备无穷尽地提供0
无限取 0 二进制0
回复

回到 “Shell脚本”