发表于: 2019-12-18 00:00:44

2 1329


今天完成的事情:


根据别人的内容   

编写了部署复制war项目到tomcat/resin/jetty   

webapps文件夹下的shell脚本


个人理解:

shell脚本就是linux命令的合集

以便于设定条件去执行某项命令



shell脚本主要分两种   sh   和  bash


区别:

1. sh 遵循POSIX规范:“当某行代码出错时,不继续往下解释”。

bash 就算出错,也会继续向下执行。

2. sh是bash的一种特殊的模式,sh就是开启了POSIX标准的bash

 /bin/sh 相当于 /bin/bash --posix。


如何表明是sh  还是  bash 

在shell脚本开头表明    

#!是一个特殊标记,说明这是一个可执行的脚本。除了第一行,其他以#开头的都不再生效,为注释。

#!/bin/bash

#!/bin/sh



myshell.sh  文件目录   脚本内容



#!/bin/sh         

tomcathome=/usr/local/tomcat/apache-tomcat-9.0.29   (定义一个变量     赋值为tomcat路径)
jettyhome=/usr/local/jetty/jetty-9.4.24                       定义一个变量     赋值为jetty路径
resinhome=/usr/local/resin/resin-4.0.62                  定义一个变量     赋值为resin路径


function  deployall(){                      编写一个方法   名为deployall

rm -rf $1/webapps/*                           删除 参数1 webapps目录下的所有文件   
cd `dirname $0`                                   进入当前Shell程序的目录

cp *.war  $1/webapps                             复制此目录下的war包至   参数1 webapps目录下

sleep 2                                            休眠2s
cd $1/webapps                                     打开  参数1目录下的 webapps目录
ls                                                     ls展示
}


if [ $# -gt 0 ]; then                         循环函数 if then       如果传递给函数或脚本的参数个数 大于0

for input in $@                               for循环语句   for   do   done      输入所有参数
do                                                                                   执行
case $input in                                                              case语句   输入参数
1)                                                                                         1
deployall $tomcathome                                     执行deployall方法   把tomcat的主文件路径当参数传进去
;;
2)                                                                                          2
deployall $jettyhome                                          执行deployall方法   把jetty的主文件路径当参数传进去
;; 
3)                                                                                          3
deployall $resinhome                                执行deployall方法   把resin的主文件路径当参数传进去
;;
*)
echo "plaes input 1 2 or 3, which mean 1:tomcat 2:jetty 3:resin"            输出:请输入1 2 3  在3者间选择
esac                             case结束
done                                  for循环结束语句
else                                    否则
echo "1:tomcat 2:jetty 3:resin"           输出       "1:tomcat 2:jetty 3:resin"
fi               if结束语句


shell脚本语言参考这一篇

https://www.cnblogs.com/yinheyi/p/6648242.html


运行中出现了如下问题:

问题1.   Permission denied

原因:无权限

解决方法: 添加权限       chmod a+x  myshell.war



问题2:   bad interpreter: No such file or directory

原因:我用windows自带的文本编辑器编写的shell文,文档格式为   CR  LF

windows认,linux不认

解决方法:  用Notepad++ 程序编写shell    在里面转为LF格式     linux才能识别

这个我之前就下过了

使用notepad++将windows风格的文件转为linux风格

https://blog.csdn.net/beyondrl/article/details/90312945


问题3:

(1) syntax error near unexpected token `then'    


(2)


原因:很简单  都是空格的问题    

文档内所有指令之间都必须把空格加上


解决(1):

if语句 [ ] 之前 中间 空格都不能少


解决(2)

 

*war $1  之间加空格


shell脚本对空格要求很高,不能出错。


输入命令   运行shell脚本  后面是传入的参数数字


3个都是复制成功     且可以正常运行




看了nginx  没怎么看懂


就大概了解了正向代理  和 反向代理的区别


明天试试搭建这个


正向代理和反向代理的区别(通俗易懂)

1、正向代理:类似我们想要访问国外的Google服务器,但是由于访问限制,我们需要找一个代理去访问。换句话说,客户端明确知道要访问的服务器的地址,客户端把请求发送给代理,代理转发给服务器,服务器把响应传给代理,最后代理把响应传给客户端。我们可以看到客户端知道服务器是谁,但是服务器并不知道客户端是谁,这就是正向代理,隐藏了客户端的真实信息。


2、反向代理:类似我们访问淘宝,由于访问量巨大,淘宝会使用许多台服务器(就是分布式服务器)来支持,但是每个客户端的请求到底由哪一台服务器来响应,我们需要一个代理来决定。换句话说,客户端并不知道要把请求发送给哪一台服务器,但是知道发送给哪一个代理,然后代理依据规则(响应时间,负载均衡等)决定把请求转发给哪一台服务器。可以看到,客户端并不知道他访问的服务器是谁,这就是反向代理,隐藏了服务器的真实信息。



明天的计划:


完成剩余的任务




返回列表 返回列表
评论

    分享到