目的很简单,用一个脚本,判断用户输入的参数,是否有对应的进程存在,根据进程是否在运行,给出不同的信息。

看起来脚本很好写,接受用户传来的参数,用ps -ef  | grep 进程名 进行检测,然后根据返回信息,给用户不同的提示就可以,但写得过程中,出现了一些问题。

首先看初始脚本,下面这个脚本式有问题的,不论用户传什么参数,都会提示有对应的进程运行。

#!/bin/bash
PROC=$1
RET=$(ps -ef | grep $PROC | grep -v grep | wc -l)
if [ $RET -gt 1  ]
then
echo  "$PROC is running"
else
echo "no $PROC running"
fi

运行脚本,测试是否能达到检测进程的目的

sh test-1.sh  aaaaaa
aaaaaa is running

显然,这是错误的,为什么呢?

这和脚本的运行有关,当脚本在运行的时候,脚本自身运行,就会有一个对应的进程,那么这个进程,是如何显示在 ps  -ef 里面的呢?

我们可以把上面的脚本改改,加上延时,并另外开启一个终端,看看就明白了

#!/bin/bash
RET=$(ps -ef  | grep  $1  | grep  -v  grep  | grep  -v $0 | wc -l)
sleep  10

运行这个脚本,并另外开启一个终端(比如,可以用SecureCRT的克隆会话功能去开启另外一个会话)

sh test7.sh   aaaaa
#开启另外一个终端,查看
ps -ef  | grep  aaaaa
root     32325 32168  0 13:15 pts/1    00:00:00 sh test7.sh aaaaa
root     32334 32296  0 13:15 pts/2    00:00:00 grep aaaaa

看到这里,相信各位都明白了,该脚本自身运行,必然有一个进程,而该进程在ps -ef里面的显示的名字,就是 用户所传入的全部参数,即$0,在这里,也就是sh test7.sh aaaaa,那么,在脚本里面用grep 去检查有没有aaaaa这个进程,必然会显示是有的

那么,怎么用脚本去检查用户传参来的进程呢?

其实,看了上面讲的,就知道干扰的原因,那么排除干扰就可以了,也就是过滤掉这个脚本执行时对应的整个命令行。

#!/bin/bash
PROC=$1
RET=` ps -ef  | grep $PROC | grep -v  grep |grep -v $0 | wc -l`
if [ $RET -gt 1  ]
then
echo "$PROC running"
else
echo  "$PROC not running"
fi

再来运行这个脚本,检测效果:

sh test.sh   ssh
ssh running
[root@cahoa ~]# sh test.sh   aaa
aaa not running

到这里,脚本已达到目的。

转载于:https://blog.51cto.com/khaozi/1347068

用脚本判断用户传参的参数是否有对应的进程在运行并把结果显示给用户相关推荐

  1. python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...

  2. ajax 与route的区别,浅析vue-router jquery和params传参(接收参数)$router $route的区别

    今天做项目时踩到了vue-router传参的坑(jquery和params),所以决定总结一下二者的区别. 1.jquery方式传参和接收参数 传参: this.$router.push({ path ...

  3. 【报错笔记】在maven项目中jsp页面使用window.location.href给controller传参时参数过长所以路径无法跳转至controller

    在maven项目中jsp页面使用window.location.href给controller传参时参数过长所以路径无法跳转至controller 解决方案:使用a链接来用

  4. v-for 循环 @click 动态传参(参数动态)

    v-for 循环 @click 动态传参(参数动态) 代码示下: @click="function('id_'+data.id)" 以上就是关于"v-for 循环 @cl ...

  5. url传参 获取参数方法

    url传参 获取参数方法 //调用const infos = this.getQuery(); //该方法返回一个对象 key 为所传参数名 value 参数值getQuery(key) {var s ...

  6. java调用shell脚本,解决传参和权限问题

    1. java 执行shell java 通过 Runtime.getRuntime().exec() 方法执行 shell 的命令或 脚本,exec()方法的参数可以是脚本的路径也可以是直接的 sh ...

  7. 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!...

    看了很多关于阐述JAVA传参到底是值传递还是引用的问题,有些说得很肤浅让人感觉似懂非懂的感觉,但是好像又能解决一些问题,然后就止步了.还有一些则是,讲得很深奥,看着好像很有道理的样子,但是其实还是没怎 ...

  8. 通过URL传参(参数也是URL)

    encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. if ($("#pageType").val() == "treePage" ...

  9. python调用bat脚本传参,将参数从批处理文件传递给Python

    I am trying to pass argument from batch file to python as following. It seems nothing has passed to ...

最新文章

  1. ASP.NET MVC – 视图简介
  2. Cookie、session、token对比
  3. 【CF1200E】Compress Words【kmp】
  4. CVE-2016-0143 漏洞分析(2016.4)
  5. linux bc命令全称,Linux bc 命令
  6. Oracle备份与恢复 关于expdp导出远程数据到本地的使用
  7. C语言 数组中删除指定字符
  8. Q96:PT(3.2):包裹的基于噪声的纹理(Wrapped Noise-Based Textures)
  9. 【CSS系列】获取实时数据做进度
  10. 从Q_Learning看强化学习
  11. 2011年国内五款值得关注网店系统
  12. 电脑安装什么杀毒软件最好?这4款满分杀毒软件了解一下
  13. 【云原生】Docker高级篇之网络、compose、可视化、监控
  14. 便携软件制作入门教程及实例
  15. 手机厂商为何取消3.5mm耳机孔?主要原因有5点,看完你就知道了
  16. _032_rationalRose_包图的画法
  17. [Pandas] 缺失值删除 df.dropna()
  18. 彻底解决“天平秤次品”问题
  19. Linux内核编译出错
  20. Linux文件压缩/解压缩命令7za(处理.7z等文件)使用攻略

热门文章

  1. fopen如何保存西里尔文文件名_如何下载微信视频号的视频?
  2. js 网页嵌套在div的方法
  3. 微信小程序格创校园跑腿小程序v1.1.64+前端
  4. 有趣的守萝卜的兔子卡通动画404页面源码 自适应
  5. 自动秒收录导航php源码
  6. [要记的]excel中把字母变为数字
  7. 一个简单的性能计数器:CodeTimer
  8. CSS3: 利用分层动画让元素沿弧形路径运动
  9. 关于大型网站技术演进的思考(四)--存储的瓶颈(4)
  10. 兼容IE和FF:获取Referer的JS和PHP方法 及 PHP利用curl伪造IP和来路