一、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.service

五、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 0

SHELL编程概念&变量剖析的更多相关文章

  1. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  2. Linux —— Shell编程之变量赋值和引用

    Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...

  3. Linux编程 21 shell编程(环境变量,用户变量,命令替换)

    一.概述 这篇介绍shell的变量使用,跟其实语言一样,都有声明变量,使用变量,在shell中变量允许你临时地将信息存储中shell脚本中,以便和脚本的其他命令一起使用. 1.1 环境变量 在前面章节 ...

  4. Shell编程-02-Shell变量

    目录 什么是Shell变量 变量类型 环境变量初始化及其对应文件的生效顺序 什么是Shell变量     在初等数学数学方程式中,我们会经常碰到类似于这样的方程式:y=x+1 ,等号左右两边的x和y称 ...

  5. Linux Shell编程、变量、控制语句

    为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...

  6. linux shell编程之变量和bash配置文件(第一篇)

    编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...

  7. 一、shell编程与变量

    目录 命令是什么 命令是如何运行的: 基本语法 解释器 注释 如何执行 输入.输出流 重定向 管道符 | 变量 常见Shell变量的类型包括: 变量命名原则 单引号和双引号 反引号 变量作用范围 查看 ...

  8. Shell 编程 (变量和条件测试)

    变量: 1 . 变量声明 直接使用变量 + 赋值 #!/bin/bash NAME='HELLO WORD' echo $NAME 使用 declare 关键字声明 declare(选项)(参数) + ...

  9. Shell编程之变量进阶

    一.变量知识进阶 1.特殊的位置参数变量 实例1:测试$n(n为1...15) [root@codis-178 ~]# cat p.sh echo $1 [root@codis-178 ~]# sh ...

随机推荐

  1. k8s二进制部署 - etcd节点安装

    下载etcd [root@hdss7-12 ~]# useradd -s /sbin/nologin -M etcd [root@hdss7-12 ~]# cd /opt/src/ [root@hds ...

  2. Python——requests模块

    一.安装模块 pip install requests 二.引用 import requests 三.get方法 #GET访问页面 r = requests.get(url) print(r.text ...

  3. 二进制安装kubernetes(五) kubelet组件安装

    概述资料地址:https://blog.csdn.net/bbwangj/article/details/81904350 Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kube ...

  4. win10安装CUDA CUDNN tensorflow-gpu 1.14

    #1 安装anaconda 官网下载安装即可.python3.7版本 #2 安装CUDA CUDNN   tensorflowgpu1.14 对应CUDNN 7.6.1 CUDA 10.0 注意ten ...

  5. HDU 4335 What is N?(指数循环节)题解

    题意: 询问有多少数\(n\)满足\(n^{n!}\equiv b\mod p \land\ n\in[1,M]\),数据范围:\(M\leq2^{64}-1,p\leq1e5\) 思路: 这题显然要 ...

  6. nmap进阶使用[脚本篇]

        nmap 进阶使用 [ 脚本篇 ] 2017-05-18 NMAP 0x01 前言 因为今天的重点并非nmap本身使用,这次主要还是想给大家介绍一些在实战中相对比较实用的nmap脚本,所以关于 ...

  7. gradle中的build script详解

    目录 简介 project和task 一个例子 task详细讲解 task脚本 task依赖 动态task 默认task build script的外部依赖 gradle中的build script详 ...

  8. python文件持久化存储

    文件持久化存储 目录 文件持久化存储 脑图 文件的操作 with 语句 OS模块 json模块 存储为Excel文件 脑图 文件的操作 import os import platform # 1. 获 ...

  9. tfrecords转np.array

    import tensorflow as tf import numpy as np from keras.utils import to_categorical import sys def tfr ...

  10. 使用 js 实现一个简易版的 async 库

    使用 js 实现一个简易版的 async 库 具有挑战性的前端面试题 series & parallel 串行,并行 refs https://www.infoq.cn/article/0NU ...