目录
注:下文为自动化小系列第一篇的补发文章,其余几篇均已发布,如有兴趣请在主页基地树洞专栏查看
什么?!

你还在烦恼每天忘了提交日报?
忙着完成繁琐的部署配置?
又或是疯狂敲着键盘抢选修课?
... ...
NONO NO

大可不必如此繁琐!
有了自动化,
跟所~有的烦恼~说~白~白~
跟所~有的快乐~说~嗨~嗨~
好消息!好消息!在今后的《生活中的代码》专栏里,我会带来《自动化》这一小系列,由浅入深地介绍一系列脚本、工具、以及类库,教大家一步一步实现我们想要的全自动!
在这个小系列里呢,我会分 5 篇来讲述这些东西:
【os脚本篇】
操作系统shell脚本、bat脚本相关;
【浏览器篇】
js、py(selenium)实现浏览器自动化;
【整合篇】
py(pyautogui + requests + db)完美实现自动化整合;
【分享篇】
如何把自己做的东西分享给别人装X;
【番外篇】
java实现QQ群机器人,自动客服相关;
五篇推文带你搞定自动化,
拿捏数据、拿捏摸鱼时间(bushi)、拿捏薪资
指日可待!
下面就开始我们的【OS脚本篇】~
自动化其实离我们并不遥远,它太过便利以至于我们都几乎忽略了它。
那么在教大家具体怎么写自动化脚本前,我们先来看一个自动化的小实例。
让大家惊呼——“哦!原来这也是自动化”——就是我在这里展示这个小实例的目的。此外还带大家大致了解自动化是怎么实现的,以及它究竟带来了多大的便利性。
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 off
- rem Licensed to the Apache Software Foundation (ASF) under one or more
- rem contributor license agreements. See the NOTICE file distributed with
- rem this work for additional information regarding copyright ownership.
- rem The ASF licenses this file to You under the Apache License, Version 2.0
- rem (the "License"); you may not use this file except in compliance with
- rem the License. You may obtain a copy of the License at
- rem
- rem http://www.apache.org/licenses/LICENSE-2.0
- rem
- rem Unless required by applicable law or agreed to in writing, software
- rem 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 and
- rem limitations under the License.
-
- rem ---------------------------------------------------------------------------
- rem Start script for the CATALINA Server
- rem ---------------------------------------------------------------------------
-
- setlocal
-
- rem Guess CATALINA_HOME if not defined
- set "CURRENT_DIR=%cd%"
- if not "%CATALINA_HOME%" == "" goto gotHome
- set "CATALINA_HOME=%CURRENT_DIR%"
- if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
- cd ..
- set "CATALINA_HOME=%cd%"
- cd "%CURRENT_DIR%"
- :gotHome
- if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
- echo The CATALINA_HOME environment variable is not defined correctly
- echo This environment variable is needed to run this program
- goto end
- :okHome
-
- set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
-
- rem Check that target executable exists
- if exist "%EXECUTABLE%" goto okExec
- echo Cannot find "%EXECUTABLE%"
- echo This file is needed to run this program
- goto end
- :okExec
-
- rem Get remaining unshifted command line arguments and save them in the
- set CMD_LINE_ARGS=
- :setArgs
- if ""%1""=="""" goto doneSetArgs
- set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
- shift
- goto setArgs
- :doneSetArgs
-
- call "%EXECUTABLE%" start %CMD_LINE_ARGS%
-
- :end
#2
catalina.bat文件分析
而catalina.bat文件的脚本就比较多了,我们就找其中最重要的一步看看就好。
catalina.bat文件
-
- ......
-
- rem Execute Java with the applicable properties
- if not "%JPDA%" == "" goto doJpda
- if 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
- :doJpda
- if 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会有多麻烦。
对于日常工作生活中繁琐的问题,
我们同样也可以写脚本来自动化完成!
而且要比上述实例要简单地多,
下面我们就开始吧~
shell脚本一般是在linux服务器上使用的,所以我们主要还是来学习windows上的bat脚本,毕竟我们主题还是去使用脚本解决生活中的问题。(如果你是使用mac的开发,我觉得你的shell脚本水平肯定是可以了,毕竟一般人是玩不转mac开发的,狗头保命)
此外,你可能还疑惑,为什么不用java,python脚本做呢?当然可以,但是我们为什么选择bat呢?
因为在windows平台下,该脚本是通用的,不需要考虑别人有没有运行环境,不需要考虑别人有没有编程基础,你发给一个小白,他只要会使用鼠标就能运行你的脚本。这就是为什么我第一篇要讲bat的原因。
创建脚本的方式也很简单,我一般创建记事本改后缀为.bat,然后右键编辑即可。
注意,如果有乱码,请检查记事本的编码,应使用ANSI。

首先我们就来熟悉下面几个命令。
echo:打印命令
echo off:执行该语句后只显示指令,不显示路径
@echo off:不显示命令行
pause:暂停命令
set /p 变量=输入提示:输入赋值命令
if 条件 () else ():条件判断
:goto:跳转命令
下面我们来看几个小脚本巩固一下:



通过如上三个练习,大家是否已经大概悟了bat脚本的玩法?
这里再说一下以后怎么用,一般都是@echo off开头,pause结尾,关闭命令路径及语句是为了更加美观,而pause则是防止脚本执行完直接关闭,我们还是要看一眼执行结果的。
最后,我要补充的是,bat脚本一般是和一些cmd命令一起使用的,比如cd,dir,ipconfig等我们常见的命令,和一些我们不常见的命令,按需百度复制粘贴使用即可。
从生活学习工作中出发,大家能想到哪些应用场景呢,例如:
开机自动启动所有的开发软件小工具
定时清空回收站垃圾小工具
定时提醒小工具
文件批量改名小工具
还有什么特别的玩法吗?欢迎留言补充~
接下来,我给大家看看我实际工作中写的一些脚本。
其实很多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
因为我们当前在做的一个项目是前后端分离项目,有时候改bug想自己跑一下前端调用一下自己的接
口,之前都是进入文件夹,打开命令行,暂存,拉代码,还原,运行。
每次都要重复同样的步骤,这也太麻烦了,于是我写了脚本,来简化这种重复操作。
这样,以后再想启动前端项目,我就只用双击bat脚本即可啦,极大的简化了我的操作~


虽然这一章很简单,但是我们可以从中开拓视野,学到了这种解决问题的方案,拓宽了视野,存在即有他自己的道理,tomcat不也是在使用嘛~
归根结底,能解决我们问题的代码才是真正我们需要的~ Why code?This may an answer ~
解决生活中真实遇到的问题,而不是为了编码而编码,这或许才是我们应该反思的!
更多自动化的内容,敬请期待!