00:00
哎,同学们,那接下来呢,我们写一下这个脚本啊。叉点SH,我们先做最简单的一件事,就是把之前的这个传过来的东西给它给删了。这行没用了,给它删掉啊,删除命令RM对吧,杠RF这是递归啊目录,我们这个叉叉O这个目录是吧,这样就这样就可以了,最简单就最简单的一条命令,然后我们出去。是不是这叉叉O,没错,这叉叉O,然后我们执行一下这个脚本。走LS啊,没有了,OK,这是最简单的,我们要做的第一件事就是把他的这个呃,这个这个这个之前传过来的文件给他给清了,那么接下来呢,我们做第二件事儿,这第二件事儿就是。停掉当前的这个进程,我们看当前这个启动的一个,呃,启动的这么一个。进程就是跑正在跑我们的这个炸包,那想要清他的话,你说Q杠九吗?但是现在这个ID号我们现在不知道,那么如果知道的话,我直接给他Q杠九就可以了,想知道他的ID号怎么做呢?
01:08
这么做对吧,然后杠杠这个EF这个命令大家都用过是吧?查看当前这个进进程,然后去做过滤筛选,然后GP,呃,我们过滤一下当前的这个进程名称,比如叫DEMO什么什么什么的,我叫DEMO。在呢,出现了两个进程对吧,这个进程呢。嗯,再再来一下,我们看这两个进程呢啊,我们看一下这个具体它我们返回这个数据,这是第一个啊字符串,这是第二个字符串,这是第三个字符串,前面第一行呢,这是我们真正运行呃,Java,呃,这个这个炸包的这么一个进程下边这是我们查看。当前这个呃,进程的进程啊,这有点难理解,其实就是我们刚才敲这个啊,就是这个进程,那我们现在有两行这个数据,那我们想要取到我们第一行数据这个ID号。
02:03
如果取到这个ID号之后,我们再把它给杀掉,这是不是就可以了,那么逻辑上是这样的,那但是现在有两行,那么接下来呢,就需要清理到其中的一行啊,那怎么去清理掉,清理掉另外一行呢?第一种方式呢,我可以再次过滤一下,比如说我这JP了DEMO,那么我们再去JP一下把这个。呃,我们的这个这个呃,Java给它给呃过滤掉。啊,这不是过滤掉啊,把它给筛选出来啊,直接这个GP啊,后边不带参数,这是筛选,就取这个按条件获得另外一个呢,还有这么一个命令啊g Rep-V大家看。这是过滤掉。我们试一下JPDEMO,这是把和DEMO相关的呢,给它给筛选出来了,然后在JP这后边可以跟两个的杠V,然后我们后边再跟一个字符串,比如说我不想要带这个j Rep的这么一个。
03:02
呃,数据,那么后边再跟一个j Rep来大家看,这我不知道大家能不能看懂前面的j Rep DEMO就是把所有进程全都列出来之后呢,我过滤筛选包含DEMO的给我留下,那么现在呢,有两条数据对吧,都包含,那么再去过滤筛选剔除掉包含g Rep的,那么这这会儿就只剩一行了。这能看懂吧,那么这是一种方式,还有另外一种方式,我可以写两个这样一批。这是筛选嘛,GP就是在当前的数据集当中呢,我筛选包含什么东西的,大家看这两行数据里边最大的差异化在哪?第一个呢就是Java,第二个呢,就是这个目录,还有这个杠栅,那么我们在这儿可以过滤Java或者是杠这。比如Java更这样更完整一些。啊,在这儿啊,呃,得加个引号。
04:00
因为这是这个杠支不是特殊字符嘛,对吧,我再去,呃,从当前结果集里边呢。去筛选一下,把Java JA和带DEMO的全都拿出来,很明显这这一行数据它就不带这个我们第二次筛选的呃,这个条件了,所以呢就被过滤掉了,那么我们这会儿呢,取到了一条数据,那取到一条数据之后,这会儿就好办了啊,那我们去把它当前返回这行数据的第二个啊,第二第二个位置的字符串给它给取出来。就可以了,那怎么取呢?还有另外的一个工具,在这个JP后边,我们还可以再跟有一个字符串处理工具,叫aw k。这个是处理字符串的,在aw k这个命令后边呢,可以跟很多的条件,包括呃,通配符啊,包括这个正则表达式,我们在这儿呢,希望让他做这个,另外一件事就是让他把第二个字符给我们打出来,这个怎么做呢?
05:02
这么做,首先这是单引号啊,然后里边是大括号,就是固定写法啊,然后用这个print f打印出来这第二个字符。怎么打?找到这个它的这个游标,第一个,第二个后边Dollar跟二,这样它就能把第二个字符给我们输出来,来我们看一下走。在这看了吗1805。那么这有两个,一个是1805,一个是三个九。那这两个哪个才是它真正的这个PID啊,肯定是前面这个嘛,这是它的ID对吧?啊,我们到1805之后,那我们接下来的Q这个1805是不是就可以了。对吧,这是第一步啊啊呃,那我不知道有没有同学可能会想啊,如果这不是这个,呃,只有这么一个炸包正在运行,也就是我们在勾时候,我们能看到有好几个炸包正在运行,那么很有可能我们取到这第一个,它就不是这个,呃,这个这个最精确的PID了,有可能把别人的这个PID。
06:07
给它给取出来了,对吧,那这会儿怎么办?我们还可以在这这个JP后边再去增加额外更多的筛选条件。是吧?啊,那么呃这是第一步操作,那么把它具体落地到我们的shell脚本里,我们先把它给它拿出来,我们自己写shell脚本的时候呢,也需要啊,或者说最好是我们在呃命令行里边,先把呃我们想写的这些命令呢,先试验一下是吧。然后在这第一步呢,我们是删除是吧,写个注释这是删除。删除呃,历史数据。然后第二部。我们这是获得这个,呃,它的这个炸包的PID。获取。呃,正在。运行的。
07:01
呃,这包PID。那把这个PID我们拿到之后呢,我们给它赋给一个变量。在这儿呢,我们起一个叫PID,这叫有点我们写Java程序一样了是吧,但这有一点不同是吧,你这么直接给它赋值的话,这不行,它不是一个完整的整体啊,我们需要用这个。呃,撇啊,就是123,你键盘上123最左边的那个,一的最左边啊,然后EEESC这个下边的这个撇。注意它这个全角和半角,把它给括起来,并且赋值给这个PID,那么有了这个PID之后呢,我们输出一下这个PID。PID。这输出这个PID啊,前边就得加一个符呢,它是一个变量,不是一个具体字符。来,我们试一下保存退出。
08:01
嗯,叉点SH走1805对吧,啊,直接给它拿出来了勾我们看一下没没问题对吧,这就是1805。这是我们的第一步,拿到了PID之后呢?我们接下来啊,又去给他给杀死了,怎么杀呀?Q嘛,对吧?杠九,然后这个。呃,Dollar PID,这样是不是就可以了?这是最简单的处理,我们先一步一步把它给完善来WQ保存。然后注意看勾。当前的这个进程呢,正在运行,然后我们执行一下我们的这个脚本走。然后再勾看。呃。之前是有1805的,那么现在呢,没有了对吧?啊,已经没有了,然后再看它也是没有啊,就能正常的把我们当前所运行的这个这个这个。
09:01
呃,一个一个炸包给它给Q掉了,对吧,这是最简单的,那么这个炸包啊,我们在删除的时候,如果想要把它做到通用性的话,那么现在我们只能删其中的,呃,具体的一个,因为我们是斜死在这儿的这个筛选条件对吧。啊,那么这个筛选条件,这这是这是写死在这儿,如果我们要全都删除这个这不是这个Q这个炸包的话,这个呢,呃倒还好,但是前面这个项目名称,这个DEMO有可能会换,那么能不能想一下啊,把它作为一个变量,通过这个SH脚本给它给传进来。那我们看一下啊,如果想要让它传进来的话,大概它在执行的时候是这个样子的,叉点SH后边呢,我们跟一个DEMO啊,然后让他去这个。让他去这个这个把我们的这个,呃,这个具体想要Q掉这个包名称,让他给补全,或者是这个模糊的去匹配,从进程当中找到它,并且把它给杀死,但是现在呢,它是不支持的,那想要让它支持的话,怎么做,就是传在后边的传入的这个,呃,参数在shell里边呢,可以这么去取。
10:12
用这个,嗯,在这吧。写一下就是获取传入的参数。DOLLAR1啊,这个DOLLAR1就表示它传进来的第一个参数啊,DOLLAR2就是传进来的第二个参数,注意这是在最外边写,不是在这PID里边写的啊,也不是在这里写的。这个。一呢,我们可以在这儿输出一下。嗯。比如说我们输出个字符串,呃,这个argument。是啥?在这刀一,然后我们保存。退出,然后再执行。
11:02
大家看啊,Arguments是DEMO,我们已经获取到了这个纯进来的参数,你看11222。啊,这是第一个参数,当然我们现在只需要一个参数,那么拿到这个参数之后呢,我们是不是可以把它给。传到我们这个JP后边了,让它变成一个变量,而不是在写死的这种状态下,对吧?啊,那怎么做呢?还是这个道理,给他先赋个值或者直接。在这写GP。Dollar。来,我们先试一下。呃,这个啊,对,然后会在这echo这个PID对吧,WQ,然后我直行走。啊,现在是没有对吧,所以这个它筛选不出来,我们我们把这个包呢,再给它运行一下。Java杠这。
12:00
嗯,DEMO。哦,现在已经没有炸包了,没有炸包了。没有炸包了,我想想啊啊,再跑一下这个。咱们的这个任务哈,让他把这炸包给他扔过来。这跑任务的时候呢,它就会掉我们刚刚写的那个呃x.SH了啊,他就会把之前的这个清,之前的这个清理掉了。哎,叉叉O已经有了QPS我们看。这个也起来了是吧,我们先把这个删除炸包这个命令啊,给它给掉啊,先别删。等到最后的时候呢,再。再把它删掉。来看QPS现在正在运行是吧,然后呢,我们想给他传一个DEMO 1122,这个他找不着是吧,DEMO呢,这应该能够匹配的上来走大家看。
13:09
呃,DEMO啊,然后。Arguments,然后2131,他把这个PID给我打出来了,然后再看这个勾。是不是并且同时把它的这个进程也给它杀掉了,对吧?啊,这就是传入一个项目名称或者正在运行的进程名称,然后我们让他去匹配,通过这个去找到具体的这个进程,然后接下来呢,自动化的把它给删掉。不知道同学们有没有看懂啊,然后我们再进去,咱们再看一下啊,我们这个JP1啊,这个一就是它传进来这个参数啊,那么到写到这儿呢,其实也不是特别的这个完整,那么我们如果要是没有运行的话,那我们再运行一下,你看它会报错。这呢,少了一层这个逻辑判断啊,If else,也就是如果要是你看我们当前的这个。
14:07
PID如果要是找不着的话,那怎么办?它也要Q杠九这个PID嘛,那肯定不行啊,对吧,所以在这呢,我们做一层简单的逻辑判断。这个这么写,这个逻辑判断。啊。和写Java的这个代码差不太多,但是区别呢还是有的啊,比如在这先写个if,然后中括号。啊,咱们那个Java里边不是这个小括号吗?这里是中括号,在中括号里边写判断空值和非空值是吧,我们想要去判断它的这个注释。PID为空。然后提示一下。啊,否则啊,这个执行Q命令。啊,在这里边做判断,PID这个Dollar。
15:04
PID怎么判断它是否为空呢?在这儿是这么判断的,呃,这个杠Z。Z呢是zero嘛,对吧?啊是用这种方式去判断啊,注意前边后边呢要留空格杠,Z的前面留空格,在PID的后边也要六空格,在if语句写完之后呢,加一分号,这就是shell脚本的固定写法。啊,这是空值判断啊。再写一下注释,这是空值。判断。这使用。杠Z做空值判断。那判断完之后呢,啊,如果这是处,那么。衣服正好。朕指的就是接下来要做的事儿。要要干啥,如果它是空的,那么我们提示一下I。嗯。
16:02
这个刀一我们在这儿呢,把它传入的这个给它也给它,呃,搞一个变量哈。在这,嗯。比如APP吧。等于这个DOLLAR1。好,然后在这个下边呢,我们E扣一下。注意,这是Dollar。APP name,哎,你看我们写Java的时候,把它写在这个双引号里边,这是不是就会直接给我们输出出来,在这是不会的啊APP name。然后这个note start。Started not started。这是现在这个程序没有运行的情况下,那如果它正在运行呢,对吧,然后在这呢,Else,那接下来呢,我们就要给它。杀掉。Q,杠九是吧,然后顺便呢,咱们油耗的提示一下。
17:04
嗯,在这儿再echo一下。我们的这个。进程或者我们这个程序。Stop。应啊,正在。呃,给他给杀死啊,这这这个这正在停止,这是if else,然后if else最后呢啊,前面有if,后边有Fi,也就是开口的用AB口的用Fi。在这后边呢,还得再写一个Fi,这表示这一层if语句彻底结束了,我们再带大家看一下if,这是里边做判断。还写错了,是空值。空之。判断做完控制判断之后呢,如果这个值真的是空的,那么提示一下,那就不再去Q了,如果不是空的呢,再去Q掉啊,然后最终这个I闭口来,我们保存退出试一下啊。
18:09
看看这个能不能成功。WQ。然后点现在先看看它有没有运行,现在没有运行是吧,那叉点我们看看。走。嗯。看看我们哪写的有问题啊,这是as用法什么什么什么啊。这应该是里边写的,我看一下啊。那这块啊,这是不是哦,这我没有传值是吧,刚才好像我们看一下。DEMO。吧啊,这因为没有值是吧,这必须传值,那么当然我们还以再做一个这个值的这个判断,对吧,咱们就不这么多层在这呢,Not started,那接下来我们给它启动起来看一下。
19:04
嗯,Java杠这。然后叉叉oo,然后下边的这个,然后我们让它后台运行加一个and符。然后勾。哎哎,讨厌勾。大家看这个DEMO啊,对吧,现在已经启动起来了,然后执行一下这个脚本。差点SH。走。已杀死啊,我们把这个这个已杀死啊,它是这个正常的日志里边输出出来的啊。呃,再看GPS这个进程呢,已经被正常正常的给杀死了哈,呃,那么好,现在呢,我们已经能够正常的让他去传个值,然后来判断当前进程是否正在运行,如果正在运行的呢,这如果正在运行的话呢,就把它给杀死,如果没运行的话呢,啊,就不做什么。
20:00
这个程序呢,基本上现在已经写完了,那我们这里边儿啊,还可以再让他稍微的去,怎么说呢,稍微的再健壮一点,让他来提示一下,我们究竟有没有刚才这个杠九成功的把这个进程给杀死,其实我们最常用的Q这个命令啊,除了杠九之外呢,还有另外一个杠15Q,杠九是直接把这个进程无条无有没有条件的把它给终止掉。还有一个杠15呢,是让它稍微优雅的一点,给它给终止掉啊,那么在这呢,我们呃,Q的Q了之后,我们还可以再稍微的去让他见证一下,检查一下究竟有没有被kill掉,怎么写呢,再做一个逻辑判断。嗯。我们前面不是写了一个if了吗?是吧,这个if我们还可以再复用一下,把它给。过来。检查一下呢,这个D现在还有没有,那怎么怎么检查,比如还用这个pif吗?也可以啊,对吧,直接把这个PID给它给进去,但是这个这么做的话,嗯,如果还是这么j Rep的话,这事它就不严谨了,如果要是正好有某一个数字正在运行的一个进程,那么很有可能把它给错杀掉。
21:15
是吧,那么在这我们呃教大家另外一个呃的这么一个呃用法吧,有一杠W叫精确匹配。就p EFG Rep。嗯。J21P,把前面这些都删了吧。JP,我们的这个PID是吧。那为了避免这个PID有冲突呢,更W精确匹配啊,不加W是模糊匹配,不管开头还有结尾,只要你有就算是吧,然后在这再去筛选一下j Rep这个Java,这个Java还是要留着的,不然它出来的条有点多,给它换一个名字就叫。
22:04
嗯。Check。啊,我们就不取具具体的这个第几个这个字符串了,那么在这去判断一下这个check。啊,如果要是这个check是空的,那么说明没问题啊,当前没有这个进程的ID了,如果他不是空的,说明我们这个之前Q杠九这个呢,并没有真正的把他给杀死是吧。在这儿。呃,If正。I。APP name传进来,Is stop。APP name,然后然后PID是。Dollar PID is stop了,然后else。
23:02
然后让他输出一个。Stop。Fell。的啊,然后最后呢,把它给关个口,这是if嘛,然后Fi。然后我们再来试一下WQ执行一下这个脚本DEMO。没毛病,然后启动一下这个炸包。启动成功了啊,这日志还会打啊,这个有点烦,然后我们再执行一下这个脚本来走。啊,这个已杀死,呃,再说一下,它是日志里边打出来的啊,你看这儿我们传出来穿进的这个参数是DEMO,然后2314的PID,然后stopping,然后a stop的啊是吧?OK,这是相对来说比较完整的这么一个,呃,可以执行可以用的脚本,那么。
我来说两句