一、shell软件概念和应用场景
1) 学习Linux技术,不是为了学习系统安装、命令操作、用户权限、配置IP、网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件、程序(Apache、MYSQL、Redis、PHP、Nginx、Tomcat等);
2) 学习Linux技术,如果不懂SHELL编程,可以说不懂Linux,要想实现月薪过万,SHELL编程技能是运维人员必备的,那么SHELL编程到底是什么呢?
3) 通过Xshell和CRT远程连接Linux操作系统,默认会登陆到命令行终端,命令行终端提示符#、$,为什么要登陆命令行呢?其实可以直接登陆图形界面,最终用户是为了什么?为了能够控制和管理操作系统。
4) 而Linux操作系统核心是Linux内核(数以万计的代码组成的),默认用户是不能直接操作Linux内核的,借助第三方的工具:命令行、图形界面UI,默认登陆到Linux命令行终端,也称为SHELL命令行终端;
5) 用户基于SHELL命令行终端,可以输入各种Linux指令,当我们在SHELL命令行终端输入df –h命令按下Enter键时,Linux指令传递给SHELL(软件程序),经过SHELL解析,并且将解析之后内容传递给Linux内核,Linux内核接收以后会处理,处理完毕之后会将数据内容返回给SHELL,由SHELL经过解析最
终返回给用户终端;
6)通常将SHELL称为Linux内核的外壳,用于连接用户和Linux内核之间桥梁,将SHELL称为中间件,SHELL外壳程序有很多种类和版本,查看Linux操作系统SHELL类型和SHELL版本:
#查看Linux默认的SHELL种类;
echo $SHELL
#查看默认的SHELL种类版本;
/bin/bash --version
SHELL和SHELL编程概念有什么区别呢?
- SHELL和SHELL编程是两个不同的概念,SHELL是用户和Linux内核之间沟通桥梁,而SHELL编程主要是基于SHELL解释器去编写各种指令或者代码;
- SHELL编程一定要有SHELL(SHELL解释器),SHELL解释器是SHELL编程的基石,没有SHELL就没有SHELL编程;
7) SHELL编程的核心思想?
SHELL编程是将Linux单个指令或者多个指令按照一定的逻辑关系和顺序堆积在文本文件(脚本文件)中,文本文件中的指令会通过SHELL解释器去解析,最终实现某个具体的功能和需求;
8) SHELL编程的产物是SHELL脚本文件(以.sh结尾命名的),而SHELL脚本文件是由单个命令或者多个命令堆积而成的,SHELL脚本中命令会通过SHELL解释器去解析和执行;
9) SHELL编程的意义和用途?
- 可以将手工重复的操作写入脚本文件,下次操作变得简单、快捷;
- 可以将繁杂的工作任务变成简单化、自动化的操作流程;
- 可以减轻运维人的工作量,提高运维人员的工作效率;
- 可以加快企业自动化运维的进程和脚步;
二、SHELL编程开发Nginx WEB源码部署脚本
1) SHELL编程是将手工操作的指令按照一定顺序和逻辑关系堆积在脚本文件中,脚本文件中指令会以SHELL解释器去解析,从而完整最终的功能和需求;
2) Nginx WEB软件部署方式有两种:基于YUM二进制方式,基于MAKE源码编译方式,此处采用MAKE源码编译方式;
- 基于YUM二进制方式
部署方式简单、快捷、高效,可以自动校验软件包的正确性,可以自动解决软件包之间的依赖关系,可以自动安装软件并且设置为系统服务,不能自定义软件特定的功能和模块,安装之后的文件和目录相对比较分散,不便于后期的管理和维护;
- 基于MAKE源码编译方式
部署方式复杂、繁琐、低效,不能自动校验软件包的正确性,不能自动解决软件包之间的依赖关系,不能自动安装软件并且设置为系统服务,可以自定义软件特定的功能和模块,安装之后的文件和目录相对比较统一,便于后期的管理和维护;
3) 基于MAKE源码编译Nginx WEB软件,首先从Nginx官网下载最新稳定版本软件包:Nginx-1.14.2.tar.gz,下载地址:
wget -c http://nginx.org/download/nginx-1.14.2.tar.gz
4) 因为Nginx软件包是基于tar工具打包和压缩的,通过tar工具解压缩,解压缩的指令:
#解压nginx软件包;(-x解压,-z gzip属性,-v详细信息,-f文件属性)
tar -xzvf nginx-1.14.2.tar.gz
#进入Nginx源码目录;
cd nginx-1.14.2
5) 预编译,./configure --prefix=/usr/local/nginx/ --user=www --group=www
主要是检测Linux系统安装该软件所需的依赖环境、库文件,检测Linux系统是否存在GCC编译器(C、C++、G++、GO、JAVA等),可以自定义软件安装的路径和特定功能&模块,最终会生产Makefile文件;
6) 编译,make
基于make编译工具,读取Makefile文件,通过GCC编译器将软件包中的源代码文件编译生成二进制文件;(Makefile文件用途:告知make编译工具从哪个源代码文件开始编译至哪个源代码文件结束编译)
7) 安装,make install
将第二步make编译产生的二进制文件,拷贝或者安装至Linux操作系统指定的安装路径:--prefix=/usr/local/nginx/;
8) 启动,/usr/local/nginx/sbin/nginx
三、SHELL编程开发Nginx WEB源码部署脚本V1
#!/bin/bash #2019年1月15日22:00:06 #auto install nginx web #by author www.jfedu.net ####################### yum install -y wget gzip tar make gcc yum install -y pcre pcre-devel zlib-devel openssl-devel wget -c http://nginx.org/download/nginx-1.14.2.tar.gz tar -xzf nginx-1.14.2.tar.gz cd nginx-1.14.2 useradd -s /sbin/nologin www ./configure --prefix=/usr/local/nginx/ --user=www --group=www make make install /usr/local/nginx/sbin/nginx ps -ef|grep nginx netstat -tnlp|grep 80 setenforce 0 systemctl stop firewalld.serviceView Code
五、SHELL编程变量概念和应用场景
1) 变量是什么?跟变量相对是常量,固定的数值都是属于常量,变量是可变的数或者可变的值,变量主要是用于在编程中提高编程的效率,减少手工重复的操作,可以将重复性高词组替换为变量;
2) Linux操作系统定义变量使用=赋值,变量名称=变量值,例如:WEB=www.jfedu.net,引用变量的值:$WEB,变量定义完成之后,变量去哪里了呢?内存缓冲区的,退出当前SHELL,变量即销毁,或者通过unset WEB删除变量,在当前SHELL或者SHELL脚本文件中定义的变量称为:局部变量、临时变量;
3) SHELL编程变量的意义:
- 提高SHELL编程的效率和进度;
- 将重复的数值变成短名称,相当于别名,减少编程重复度;
- 有利于后期脚本的修改和维护
六、SHELL编程开发Nginx WEB源码部署脚本(v2)
#!/bin/bash #2019年1月15日22:00:06 #auto install nginx web #by author www.jfedu.net ####################### NGX_VER="1.14.2" NGX_SOFT="nginx-1.14.2.tar.gz" NGX_URL="http://nginx.org/download" NGX_DIR="/usr/local/nginx" NGX_SRC="nginx-1.14.2" NGX_YUM="yum install -y" NGX_ARG="--user=www --group=www" $NGX_YUM wget gzip tar make gcc $NGX_YUM pcre pcre-devel zlib-devel openssl-devel wget -c $NGX_URL/$NGX_SOFT tar -xzf $NGX_SOFT cd $NGX_SRC useradd -s /sbin/nologin www ./configure --prefix=$NGX_DIR/ $NGX_ARG make make install $NGX_DIR/sbin/nginx ps -ef|grep nginx netstat -tnlp|grep 80 setenforce 0View Code