扫码阅读
手机扫码阅读

基地树洞|自动化小系列之OS脚本篇

148 2024-03-14

开启自动化小系列

什么?!

你还在烦恼每天忘了提交日报?

忙着完成繁琐的部署配置?

又或是疯狂敲着键盘抢选修课?

... ...

NONO NO

大可不必如此繁琐!

有了自动化,

跟所~有的烦恼~说~白~白~

跟所~有的快乐~说~嗨~嗨~

好消息!好消息!在今后的《生活中的代码》专栏里,我会带来 《自动化》这一小系列,由浅入深地介绍一系列脚本、工具、以及类库,教大家一步一步实现我们想要的全自动!

在这个小系列里呢,我会分 5 篇来讲述这些东西:

【os脚本篇】

  • 操作系统shell脚本、bat脚本相关;

【浏览器篇】

  • js、py(selenium)实现浏览器自动化

【整合篇】

  • py(pyautogui + requests + db)完美实现自动化整合

【分享篇】

  • 如何把自己做的东西分享给别人装X

【番外篇】

  • java实现QQ群机器人,自动客服相关

篇推文带你搞定自动化,

拿捏数据、拿捏摸 鱼时间(bushi)、拿捏薪资

指日可待!

下面就开始我们的 【OS脚本篇】~

一个自动化实例——

Tomcat服务器一键启动

自动化其实离我们并不遥远,它太过便利以至于我们都几乎忽略了它。

那么在教大家具体怎么写自动化脚本前,我们先来看一个自动化的小实例。

让大家惊呼—— “哦!原来这也是自动化”——就是我在这里展示这个小实例的目的。此外还带大家大致了解自动化是怎么实现的,以及它究竟带来了多大的便利性。

Tomcat服务器一键启动

Tomcat服务器是一个java开发的、免费的开放源代码的Web应用服务器。

在win系统下,我们可以只需进入bin目录双击startup.bat就可以一键启动,在linux系统下,我们可以双击startup.sh一键启动。

/ Tomcat服务器的启动文件

虽说一键即可启动,但这背后并没有那么简单,下面我们就对这两个启动脚本进行分析。

启动脚本分析

@echo是打印指令,rem是注释指令,这些后面会讲到。知道了这些,加上我们的一点编程基础,再看这部分脚本就能大概看懂了。

#1

startup.bat文件分析

分析startup.bat文件,我们发现他实际上就做了一件事,启动catalina.bat。

就是说,我们也可以直接执行catalina.bat运行tomcat~

startup.bat文件

@echo offrem Licensed to the Apache Software Foundation (ASF) under one or morerem contributor license agreements.  See the NOTICE file distributed withrem this work for additional information regarding copyright ownership.rem The ASF licenses this file to You under the Apache License, Version 2.0rem (the "License"); you may not use this file except in compliance withrem the License.  You may obtain a copy of the License atremrem     http://www.apache.org/licenses/LICENSE-2.0remrem Unless required by applicable law or agreed to in writing, softwarerem distributed under the License is distributed on an "AS IS" BASIS,rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rem See the License for the specific language governing permissions andrem limitations under the License. rem ---------------------------------------------------------------------------rem Start script for the CATALINA Serverrem --------------------------------------------------------------------------- setlocal rem Guess CATALINA_HOME if not definedset "CURRENT_DIR=%cd%"if not "%CATALINA_HOME%" == "" goto gotHomeset "CATALINA_HOME=%CURRENT_DIR%"if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHomecd ..set "CATALINA_HOME=%cd%"cd "%CURRENT_DIR%":gotHomeif exist "%CATALINA_HOME%\bin\catalina.bat" goto okHomeecho The CATALINA_HOME environment variable is not defined correctlyecho This environment variable is needed to run this programgoto end:okHome set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" rem Check that target executable existsif exist "%EXECUTABLE%" goto okExececho Cannot find "%EXECUTABLE%"echo This file is needed to run this programgoto end:okExec rem Get remaining unshifted command line arguments and save them in theset CMD_LINE_ARGS=:setArgsif ""%1""=="""" goto doneSetArgsset CMD_LINE_ARGS=%CMD_LINE_ARGS% %1shiftgoto setArgs:doneSetArgs call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end

#2

catalina.bat文件分析

而catalina.bat文件的脚本就比较多了,我们就找其中最重要的一步看看就好。

catalina.bat文件

...... rem Execute Java with the applicable propertiesif not "%JPDA%" == "" goto doJpdaif not "%SECURITY_POLICY_FILE%" == "" goto doSecurity%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%goto end:doSecurity%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%goto end:doJpdaif not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%goto end:doSecurityJpda%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%goto end :end

通过第三行注释,我们就能知道,整个脚本最终是执行了带一系列参数的java命令。如果我们直接双击启动,就会使用默认参数来启动项目。而前面的代码就是检查和设置参数罢了。

如果没有这种脚本,可想而知,我们想启动tomcat会有多麻烦。

对于日常工作生活中繁琐的问题,

我们同样也可以写脚本来 自动化完成!

而且要比上述实例要简单地多,

下面我们就开始吧~

快速入门

为什么选择学习bat脚本?

shell脚本一般是在linux服务器上使用的,所以我们主要还是来学习windows上的bat脚本,毕竟我们主题还是去使用脚本解决生活中的问题。(如果你是使用mac的开发,我觉得你的shell脚本水平肯定是可以了,毕竟一般人是玩不转mac开发的,狗头保命)

此外,你可能还疑惑,为什么不用java,python脚本做呢?当然可以,但是我们为什么选择bat呢?

因为在windows平台下,该脚本是通用的,不需要考虑别人有没有运行环境,不需要考虑别人有没有编程基础,你发给一个小白,他只要会使用鼠标就能运行你的脚本。这就是为什么我第一篇要讲bat的原因。

bat脚本的创建方式

创建脚本的方式也很简单,我一般创建记事本改后缀为.bat,然后右键编辑即可。

注意,如果有乱码,请检查记事本的编码,应使用ANSI。

bat脚本命令

首先我们就来熟悉下面几个命令。

  • echo:打印命令

  • echo off:执行该语句后只显示指令,不显示路径

  • @echo off:不显示命令行

  • pause:暂停命令

  • set /p 变量=输入提示:输入赋值命令

  • if 条件 () else ():条件判断

  • :goto:跳转命令

bat脚本实例

下面我们来看几个小脚本巩固一下:

通过如上三个练习,大家是否已经大概悟了bat脚本的玩法?

bat脚本的使用方式

这里再说一下以后怎么用,一般都是@echo off开头,pause结尾,关闭命令路径及语句是为了更加美观,而pause则是防止脚本执行完直接关闭,我们还是要看一眼执行结果的。

最后,我要补充的是,bat脚本一般是和一些cmd命令一起使用的,比如cd,dir,ipconfig等我们常见的命令,和一些我们不常见的命令,按需百度复制粘贴使用即可。

实战案例

从生活学习工作中出发,大家能想到哪些应用场景呢,例如:

  • 开机自动启动所有的开发软件小工具

  • 定时清空回收站垃圾小工具

  • 定时提醒小工具

  • 文件批量改名小工具

还有什么特别的玩法吗?欢迎留言补充~

接下来,我给大家看看我实际工作中写的一些脚本。

#1

杀死占用端口的后台程序

其实很多cmd指令都是可以百度到的,做成脚本,以后就不用再每次百度复制粘贴使用了~

@echo off set /p port=请输入port: netstat -aon|findstr "%port%" set /p pid=请输入进程id: tasklist|findstr "%pid%" set /p op=是否杀死改进程(y/n): if "%op%"=="y" (taskkill /T /F /PID %pid%) else if "%op%"=="n" (echo 已选择不杀死进程) pause

#2

开机自动拉取代码并启动前端代码

因为我们当前在做的一个项目是前后端分离项目,有时候改bug想自己跑一下前端调用一下自己的接

口,之前都是进入文件夹,打开命令行,暂存,拉代码,还原,运行。

每次都要重复同样的步骤,这也太麻烦了,于是我写了脚本,来简化这种重复操作。

这样,以后再想启动前端项目,我就只用双击bat脚本即可啦,极大的简化了我的操作~

总结

虽然这一章很简单,但是我们可以从中开拓视野,学到了这种解决问题的方案,拓宽了视野,存在即有他自己的道理,tomcat不也是在使用嘛~

归根结底,能解决我们问题的代码才是真正我们需要的~ Why code?This may an answer ~

解决生活中真实遇到的问题,而不是为了编码而编码,这或许才是我们应该反思的!


更多自动化的内容,敬请期待!

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247505117&idx=1&sn=ff7c49a735634e6909c109e04ad23cf9&chksm=c02fef7bf758666d2d99771bad18c68b855aba77b928140e2f405c30db1e7a575b63fc50fde9#rd