课堂课题:
如何写shell脚本?尝试自己编写一个简单脚本。
关联任务:
任务五
直播时间:
2019-10-30 15:30:00
课堂内容:
视频链接:
PPT链接:
提交按钮:
小课堂内容格式
标题:
【修真院xx(职业)小课堂】课题名称
开场语:
大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX
(1)背景介绍:
背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。
(2)知识剖析:
讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。
(3)常见问题:
最少列出1个常见问题。
(4)解决方案:
写清楚常见问题的解决方案。
(5)编码实战:
尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。
(6)拓展思考:
知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。
(7)参考文献:
引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。
(8)更多讨论:
Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答
(9)鸣谢:
感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
【修真院JAVA小课堂】如何写shell脚本?尝试自己编写一个简单脚本。
大家好,我是IT修真院北京分院第40期的学员,一枚正直纯洁善良的JAVA程序员,今天给大家分享一下,修真院官网JAVA任务二,深度思考中的知识点——如何写shell脚本?尝试自己编写一个简单脚本。
(1)背景介绍:
为什么要编写脚本?
之前将项目代码部署到服务器上,需要先在本地打包,上传到服务器,再检查端口是否被占用,tomcat是否关闭等等,都准备好了后才能运行项目,一系列的操作繁琐而且是重复性工作。为了解决这个问题,可以直接将重复性命令编写进脚本,运行脚本进行命令的批量操作,甚至可以将项目代码上传到GitHub上,直接编写脚本从GitHub上拉取项目代码,而后进行部署运行。这样就省去了很大的功夫。
(2)知识剖析:
什么是shell?
shell是一个用C语言编写的程序,它是用户使用linux的桥梁。它提供了一个界面,用户通过这个界面访问操作系统内核的服务。
shell即是一种命令语言,又是一种程序设计语言(也就是shell脚本),作为命令语言,它互动式的解释和执行用户输入的命令,作为程序设计语言,它定义了各种变量和参数,并提供许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是linux系统内核的一部分,但是它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
简单的理解,shell就是一个命令行解释器,作用是按照一定语法将输入的命令加以解释传给系统,而shell脚本是一种为shell编写的脚本程序,可以说是用来输入命令的,只不过相比传统的一个一个命令输入,脚本是将一部分命令按顺序排列,一次性输入给shell去解释。
(3)常见问题:
1、#!/bin/bash 和 #!/bin/sh 的区别?
2、Windows使用NodePad++编辑脚本文件,上传服务器运行为什么会报错?
3、脚本为什么使用“./”命令运行会报错,用“sh ./”命令就可以运行?
(4)解决方案:
1、“#!”是个指示路径的表示符,/bin/bash和/bin/sh是指定了脚本解析器的程序路径。
bash、sh都是命令解释程序,可以执行从标准输入或文件中读取的命令。
但是sh的脚本可以不加修饰在bash上运行,而bash的脚本在sh上运行则容易报错,简单说,bash包含sh。
2、编写脚本时,如果直接在linux上编写会很麻烦,在Windows上使用NodePad++编写后,上传到linux上会很方便,但是由于种种历史原因,Windows、Unix/linux、Mac三者之间,对于文件中所用回车换行符表示的方法都不一样,所以在使用时需要进行格式转换。
Windows上按一下回车,实际输入的是“回车CR”和“换行LF”,而linux则只输入“换行LF”,所以编辑的文件每行都会多一个CR,在linux上就无法运行。
这时需要使用vim命令进入编辑文件页面,使用“:set ff ”查看可以发现脚本文件格式为dos格式,使用“:set ff=unix”命令将格式改为unix格式,则可以在linux上运行脚本文件。
3、因为脚本文件没有相应的权限,如果想使用“./”命令,需要使用“chmod 777 xxx.sh”命令添加权限,777代表读、写、执行权限对所有人都开放。而直接用“sh ./”命令执行脚本,是直接运行解释器,这样就不需要在脚本文件的第一行指定解释器信息了,写了也没用。
(5)编码实战:
编写一个一键部署的脚本,从GitHub上拉下项目代码,maven打包,移动war包,并运行项目。
#!/bin/bash
echo 启动部署脚本...
echo 进入/git_xzy
cd /git_xzy
echo pull项目代码
git pull origin master
echo 进入/git_xzy/xzy_student项目
cd /git_xzy/xzy_student
echo maven命令打包
mvn clean package -Dmaven.test.skip=true
echo 进入war包所在文件夹
cd /git_xzy/xzy_student/target
echo 删除原有ROOT文件夹
rm -rf /usr/local/java/apache-tomcat-9.0.24/webapps/ROOT
echo 移动war包到webapps
mv ROOT.war /usr/local/java/apache-tomcat-9.0.24/webapps/
echo 捕捉Tomcat进程...
pid_student=`ps aux |grep tomcat |grep -v grep |grep -v restart |awk '{print $2}'`
if [ "$pid_student" != "" ];
then
echo Tomcat进程捕获
kill -9 "$pid_student"
echo $pid_student 进程已被杀死
else
echo 没有Tomcat进程
fi
echo 启动Tomcat...
sh /usr/local/java/apache-tomcat-9.0.24/bin/startup.sh
(6)拓展思考:
(7)参考文献:
【1】https://www.jianshu.com/p/070bd0b4855f
【2】https://blog.csdn.net/u012453843/article/details/69803244/
【3】https://www.runoob.com/linux/linux-shell.html
(8)更多讨论:
Q1:shell 和 shell 脚本有什么区别?
A1:简单说,shell就是一个命令行解释器,作用是按照一定语法将输入的命令加以解释传给系统,而shell脚本是一种为shell编写的脚本程序,可以说是用来输入命令的,只不过相比传统的一个一个命令输入,脚本是将一部分命令按顺序排列,一次性输入给shell去解释。
Q2:什么是一键部署?
A2:一键部署就是只需要运行该脚本,就可以从GitHub或SVN上拉取项目代码,进行一系列部署,运行服务器,启动项目。
Q3:脚本权限都有哪些?
A3:Unix和linux的各种操作系统下,每个文件都按读、写、运行设定权限,而权限的持有人分为user用户、group同组用户、others其他用户。
权限用数字表示,其中r=4,w=2,x=1。所以777就是最高权限,表示所有人都有读、写、运行权限,其它权限根据相应要求可自行设置。
比如“-rw-r--r--”,就是644,从第二个字符起,“rw-”即用户有读、写权限,但没有运行权,“r--”表示同组用户只有读权限,没有写、运行权限,其他用户和同组权限相同。
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
[北京|荣耀师兄]JAVA-白云中 发表于 2019-11-01 10:06:46 #1
能讲的再深入一些就更好了
回复