Shell编程从入门到实战

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有用:

# 定义变量
2.2 变量赋值
2.3 变量替换
2.4 变量运算
2.5 变量案例
3. 数值运算
4. 流程控制
5. 循环语句
6. 数组函数
7. 内置命令
8. 轻量级项目
发布了54 篇原创文章 · 获赞 138 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Thanlon/article/details/103073947