我们经常遇到这样的业务场景,我们开发了一个线上工具,需要在Linux操作系统下面执行处理某些事情,例如我们开发了一个将用户某个活动数据清0的工具,命令如下:./clearTools -v 12306,意思是将用户id为12306的使用次数清零。
![675c038f74e70a2664cddd62439a003e.png](https://i-blog.csdnimg.cn/blog_migrate/c45fdf3d4ca824f4e8f9bef17f778096.jpeg)
这里有些同学可能会问,为什么我们需要开发工具,而不是直接从数据库中将次数清0,这是因为在生产环境中,任何一项业务都可能耦合众多业务逻辑,不是简单处理一张表就行,所以我们常常需要开发工具。
有一天,因为一些不知名的原因,反正肯定不是代码的bug,产品给了一批用户的id,需要我们将他们的参与次数重置,可是我们原来的工具只是处理单个用户的,如何快速地将工具改成可以批量执行多个用户呢?
![ccb340bfce49979b479485e5f656a197.png](https://i-blog.csdnimg.cn/blog_migrate/246025c7dfcf66f6f2e983bb37259255.jpeg)
方法一
我们可以修改工具的代码,让其读入一个文件,然后再依次执行,把原有的单个工具改成批量工具。这个方法虽然很好,但是难免显得有些太笨,作为一个极客程序员,这是难以接受的。
方法二
我们写一个shell脚本,在脚本里面读入文件,然后依次执行。这种方法虽然不用修改代码,但是也要写新的代码,虽然比上述方法更加可用,但是还是不够极客。
方法三
使用Linux的xargs命令,xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。
上述的例子,我们只要这么做,cat list.txt | xargs -I {} ./clearTools -v {} 即可。在这个命令中,对于输出的每一行,都会匹配-I参数后面的花括号,然后将其替换成读入的文件行。
![5d23fa96f9e3f53b138a599b423bc702.png](https://i-blog.csdnimg.cn/blog_migrate/5981fac5a8f9207ecb751aa8891f900f.jpeg)
总结
是不是非常的简单,我们只要一行简单的命令行,就可以轻松的把单个工具修改变成批量执行的工具,大大提高了生产效率。怎么样,学会了么?欢迎关注我,我们一起学习共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)