文章目录
1. 基本概述
1.1 shell
shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,将用户输入的命令翻译给操作系统并将处理的结果输入至屏幕。shell命令是存在交互式与非交互式的两种方式。交互式是我们日常使用最多的一种模式,登录终端、执行命令、返回结果。再输入命令,然后等待结果,最后结束工作退出shell会话。当退出shell会话后,当前的shell会话也就终止了。非交互式不进行交互,直接读取某个文件进行执行。文件中有什么,其实就是一堆的命令,当该文件从头执行到尾结束后,当前的shell也就终止了。
1.2 shell脚本
第一种是将命令堆积到一起,顺序执行(简称系统命令的堆积)。其实不是严格意义上的shell脚本,因为缺少逻辑判断,如果中间有某一个环节出现问题,脚本就无法正常运行下去。严格意义上的shell是由特定格式、特定的语法、系统的命令组成的文件简称为shell脚本。shell能做什么?
- 基础配置:系统初始化操作、系统更新、内核调整、网络、时区、SSH优化
- 安装程序:部署LNMP、LAMP、MySQL、Nginx、Redis等等
- 配置变更:Nginx Conf、PHP Conf、MySQL Conf、Redis Conf,配置管理是最强的。
- 业务部署:shell配合git、jenkin实现自动化部署php、java代码,以及代码回滚
- 日常备份:使用shell脚本对MySQL进行每晚的全备与增量备份
- 信息采集:Zabbix+Shell,硬件、系统、服务、网络等
- 日至分析:取值->排序->去重->统计->分析
- 服务扩容:监控服务器集群cpu,如cpu负载持续80%触发脚本;调用api开通云主机>初始化分析环境>加入集群>对外提供
- 服务缩容:监控服务器集群cpu使用率,低于20%检测当前有多少个web节点,判断是否超过预设,缩减到对应的预设状态,变更负载的配置
Shell脚本主要的作用是:简化操作步骤,提高效率,减少人为干预,减少系统故障。
1.3 脚本的基本规范
- 脚本存放在固定目录/scripts
- 开头必须加上#!/bin/bash,它的作用是告诉脚本使用哪种命令解释器。如果不指定shell,默认是bash执行。
- 附带作者和版权信息
- 脚本扩展名为*.sh
- 脚本中不使用中文
- 成对的符号一次书写完成
- 循环格式一次性输入完成
1.4 脚本的执行方式
Shell脚本的执行方式有两种,一种是直接使用解释器执行脚本,无需执行权限。另一种是以./运行的方式执行,但是需要拥有执行权限。
thanlon@thanlon-master:~$ bash helloword
Hello World!
thanlon@thanlon-master:~$ chmod +x helloword
thanlon@thanlon-master:~$ ./helloword
Hello World!
脚本中不写#!/usr/bin/bash来指定使用何种解释器翻译,在脚本执行的过程中,如果以./方式运行执行(需要权限)默认使用bash命令翻译。如果脚本中指定了使用什么解释器翻译,那么在使用./时会调用对应的解释器执行。
2.Shell脚本变量
2.1 变量概述
变量是shell传递数据的一种方法,简单理解就是用一个固定的字符串去表示不固定的值,便于后续引用。
2.2 变量命名规范
变量由字母、数字、下划线组成,尽量字母开头,变量名最好具备一定的意义,定义变量时不要与系统的命令产生冲突。定义变量时,等号是赋值的意思,等号两边不能有空格。定义变量:
# 正确定义变量的方式
thanlon@thanlon-master:~$ HostName=$(hostname)
thanlon@thanlon-master:~$ echo $HostName
thanlon-master
# 下面变量的定义是错误的
thanlon@thanlon-master:~$ HostName = $(hostname)
HostName:未找到命令
2.3 变量定义的方式
- 用户自定义变量:人为定义变量
- 系统环境变量:保存的是和系统操作环境相关的变量
- 位置参数变量:向脚本中进行参数传递,变量名不能自定义,变量的作用是固定的
- 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
用户自定义变量示例,当前shell有用:
# 定义变量