用脚本判断用户传参的参数是否有对应的进程在运行并把结果显示给用户
目的很简单,用一个脚本,判断用户输入的参数,是否有对应的进程存在,根据进程是否在运行,给出不同的信息。
看起来脚本很好写,接受用户传来的参数,用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
用脚本判断用户传参的参数是否有对应的进程在运行并把结果显示给用户相关推荐
- python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解
最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...
- ajax 与route的区别,浅析vue-router jquery和params传参(接收参数)$router $route的区别
今天做项目时踩到了vue-router传参的坑(jquery和params),所以决定总结一下二者的区别. 1.jquery方式传参和接收参数 传参: this.$router.push({ path ...
- 【报错笔记】在maven项目中jsp页面使用window.location.href给controller传参时参数过长所以路径无法跳转至controller
在maven项目中jsp页面使用window.location.href给controller传参时参数过长所以路径无法跳转至controller 解决方案:使用a链接来用
- v-for 循环 @click 动态传参(参数动态)
v-for 循环 @click 动态传参(参数动态) 代码示下: @click="function('id_'+data.id)" 以上就是关于"v-for 循环 @cl ...
- url传参 获取参数方法
url传参 获取参数方法 //调用const infos = this.getQuery(); //该方法返回一个对象 key 为所传参数名 value 参数值getQuery(key) {var s ...
- java调用shell脚本,解决传参和权限问题
1. java 执行shell java 通过 Runtime.getRuntime().exec() 方法执行 shell 的命令或 脚本,exec()方法的参数可以是脚本的路径也可以是直接的 sh ...
- 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!...
看了很多关于阐述JAVA传参到底是值传递还是引用的问题,有些说得很肤浅让人感觉似懂非懂的感觉,但是好像又能解决一些问题,然后就止步了.还有一些则是,讲得很深奥,看着好像很有道理的样子,但是其实还是没怎 ...
- 通过URL传参(参数也是URL)
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. if ($("#pageType").val() == "treePage" ...
- python调用bat脚本传参,将参数从批处理文件传递给Python
I am trying to pass argument from batch file to python as following. It seems nothing has passed to ...
最新文章
- ASP.NET MVC – 视图简介
- Cookie、session、token对比
- 【CF1200E】Compress Words【kmp】
- CVE-2016-0143 漏洞分析(2016.4)
- linux bc命令全称,Linux bc 命令
- Oracle备份与恢复 关于expdp导出远程数据到本地的使用
- C语言 数组中删除指定字符
- Q96:PT(3.2):包裹的基于噪声的纹理(Wrapped Noise-Based Textures)
- 【CSS系列】获取实时数据做进度
- 从Q_Learning看强化学习
- 2011年国内五款值得关注网店系统
- 电脑安装什么杀毒软件最好?这4款满分杀毒软件了解一下
- 【云原生】Docker高级篇之网络、compose、可视化、监控
- 便携软件制作入门教程及实例
- 手机厂商为何取消3.5mm耳机孔?主要原因有5点,看完你就知道了
- _032_rationalRose_包图的画法
- [Pandas] 缺失值删除 df.dropna()
- 彻底解决“天平秤次品”问题
- Linux内核编译出错
- Linux文件压缩/解压缩命令7za(处理.7z等文件)使用攻略