把shell获取grep结果的结果问题,怎么解决

    今天在写一个shell脚本的时候有一個操作是使用shell获取grep结果命令在一个文件中搜索指定内容。指定内容存放在文件中使用一个变量去获取文件中内容,再传到shell获取grep结果命令Φ去

    因为使用shell获取grep结果时,最后要执行的命令是(shell获取grep结果 "域\[2\]" test.txt)所以直接把双引号写在content.txt的文本中了。然后执行脚本执行脚本的时候開始不对劲了,直接执行(shell获取grep结果 "域\[2\]" test.txt)是能够搜索到内容的但是在脚本中就是搜索不到内容了,于是添加了“set -x”来查看执行的命令顯示执行的命令就是(shell获取grep结果 "域\[2\]" test.txt)。最后折磨了半天发现原来是content.txt文本中的双引号的问题。改成如下后就执行成功能够搜索到内容了。

于是想了想又另外写了个脚本测试:

这个脚本实际模拟的就是上面把双引号当作变量的一部分。

执行结果显示执行的命令是:

和上面那例看到的是一样表面上看起来是在test.c中搜索hello,但实际上搜索的是("hello")所以搜索不到。同样对于之前的例子,我以为搜索的是(域\[2\])其实搜索的是("域\[2\]"),但是("域\[2\]")这个确实是没有的所以搜索不到。

    也就是如果把双引号放在content.txt传给变量 导致双引号作用不再是把要查询的内容引起来,而是双引号是变量的一部分了最后虽然两个看到的外观一模一样,但是意义却不一样了哎,shell好神奇啊不要相信伱看到的,哈哈

大部分人在写Shell 过滤进程的时候 都會使用 shell获取grep结果 在 ps aux 的输出结果中查找指定的进程但此时也会把 shell获取grep结果 进程也显示出来 比如查找 pptpd 进程,会匹配出来两条:

常见的防止shell获取grep结果进程出现的方法就是在对加一个管道 shell获取grep结果 -v shell获取grep结果 进行过滤:

还有一个更方便的方法是用 正则 shell获取grep结果 [p]ptpd来搜索pptpd这个进程:

虽然說它比 shell获取grep结果 -v shell获取grep结果 也未必方便多少但是如果用大量循环的监控脚本上,每次都能减少一次系统shell获取grep结果调用也就是减少一次创建进程,虽然提升很小可以忽略不计但是用在shell写的监控脚本上来说多少还有点提升的,优化就是注重细节嘛

以下是执行五次测试结果:

在a文件中如果含有“sucess”的字符程序就继续进行,否则就打印错误并推出

加载中,请稍候......

我要回帖

更多关于 shell获取grep结果 的文章

 

随机推荐