- shell的基本语法结构。如:变量定义、条件判断、循环语句(for , until , while)、分支语句、函数和数组等
- 基本正则表达式;
- 文件处理三剑客:grep , sed , awk 工具的使用;
使用shell脚本完成一些较复杂的任务,如:服务搭建,批量处理等。
说明:以上内容仅仅是基本要求,还有很多更深更难的语法需要扩充学习。
本节目标
简单来说就是将 需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要编译。
- 准确叙述
2、什么时候用到脚本
重复化、复杂化的工作,通过把工作的命令写成脚本,以后仅仅需要执行脚本就能完成这些工作。
3、shell脚本能干啥
1、自动化部署软件 LAMP\LNMP\Tomcat
2、自动化管理 系统初始化脚本、批量修改主机密码、推送公钥
3、自动化分析处理 统计网站访问量
4、自动化备份 数据库备份、日志转储
5、自动化监控脚本
4、如何学习shell脚本
1、尽可能记忆更多命令(记忆命令使用功能和场景)
2、掌握脚本的标准的格式(指定魔法字节、使用标准的执行方式运行脚本)
3、必须熟悉掌握脚本的基本语法(重点)
5、学习shell脚本的秘诀
6、shell脚本的基本写法
1、脚本第一行,魔法字符 #! 指定解释器 【必写】#! /bin/bash
表示以下内容使用bash解释器解析
注意
如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题,所以可以使用:#!/bin/env 解释器
。
2、脚本第二部分, 注释号( # 号)说明,对脚本的基本信息进行描述【可选】
#!/bin/env
# 以下内容是对脚本的基本信息的描述
# name : 名字
# desc : 描述describe
# path : 存放路径
# useage : 用法
# update : 更新时间
# 下面就是脚本的具体内容
commands
……
7、shell脚本的执行方法
- 标准脚本执行方法(建议) ```powershell vim /shell/first_shell.sh
chmod +x first_shll.sh
绝对路径
/shell/first_shell.sh
相对路径
cd /shell ./first_shell
- 非标准的执行方法 (不建议)
1、直接在命令行指定解释器执行
```powershell
-x : 一般用于排错,查看脚本的执行过程
-n : 用来查看脚本的语法是否有问题
2、使用 source
命令读取脚本文件,执行文件里的代码。
source /shell/first_shell.sh
eg:
#!/bin/env bash # 打印"报告首长,任务于2020年-08-17 23:10:00时间完成" echo "报告首长,任务于$(date +'%F %T')"
二、变量的定义
1、变量是什么?
一句话概括:变量是用来临时保存数据的,该数据是可以变化的数据。
2、什么时候需要定义变量
如果某个内容需要多次使用,并且在代码中重复出现 ,那么可以用变量代表该内容。这样在修改内容的时候,仅仅需要修改变量的值。
- 在代码运行的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,就可以直接使用这个变量。
3、变量如何定义?
变量名=变量值 (等号两边不可以有空格)
变量名: 用来临时保存数据的
变量值: 就是临时的可变化的数据
4、变量的定义规则
- 变量名区分大小写
- 变量名不能有特殊符号 。特别说明:对于有空格的字符串赋值时,要用引号引起来。
- 变量名不能以数字开头
- 等号两边不能有任何空格
- 变量名尽量做到见名知意。一般变量名使用大写(小写也可以)
5、变量的定义方式有哪些?
1、基本方式
直接赋值给一个变量
2、命令执行结果赋值给变量
3、交互式定义变量(read)*
目的:让用户自己给变量赋值,比较灵活
语法: read [选项] 变量名
常见选项
选项 | 释义 |
---|---|
-p | 定义提示用户的信息 |
-n | 定义字符数(限制变量值的长度) |
-s | 不显示(不显示用户输入的内容) |
-t | 定义超时时间,默认单位为秒(限制用户输入变量值的超时时间) |
4、定义有类型的变量(declare)
目的:给变量做一些限制,固定变量的类型,比如: 整型、只读
用法:declare 选项 变量名=变量值
常用选项
选项 | 释义 | 举例 |
---|---|---|
-i | 将变量看成整数 | declare -i A=123 |
-r | 定义只读 | declare -r B=hello |
-a | 定义普通数组;查看普通数组 | |
-A | 定义关联数据;查看关联数组 | |
-x | 将变量通过环境导出 | declare -x AAA=123456 等于 export AAA=123456 |
6、变量的分类
1、本地变量
本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。
2、环境变量
环境变量:当前进程有效,并且能够被子进程调用。
全局变量 :全局所有的用户和程序都能调用,且继承,新建的用户也能默认调用。
- 相关配置文件介绍: | 文件名 | 说明 | 备注 | | —- | —- | —- | | $HOME/.bashrc | 当前用户的bash信息,用户登录时读取 | 定义别名,umask,函数等 | | $HOME/.bash_profile | 当前用户的环境变量,用户登录时读取 | | | $HOME/.bash_logout | 当前用户退出当前shell时最后读取 | 定义用户退出时执行的程序等 | | /etc/bashrc | 全局的bash信息,所有用户都生效 | | | /etc/profile | 全局环境变量信息 | 系统和所有用户都生效 |
说明: 以上文件修改后,都需要重新 source
让其生效或者退出重新登录。
用户登录系统读取相关文件的顺序
系统变量(内置bash中变量):shell本身已经固定好了它的名字和作用。 | 内置变量 | 含义 | | —- | —- | | $? | 上一条命令执行后返回的状态;状态值为0表示执行正常,非0表示执行异常或错误。 | | $0 | 当前执行的程序或脚本名称 | | $# | 脚本后面接的参数个数 | | $* | 脚本后面的所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开 | | $@ | 脚本后面的所有参数,参数是独立的,也是全部输出 | | $1~$9 | 脚本后面的位置参数,$1表示第一个位置参数,以此类推 | | ${10}~${n} | 扩展位置参数,第10个位置变量必须使用{}大括号括起来(两位数以上扩起来) | | | 当前所在进程的进程号,如:echo | | $! | 后台运行的最后一个进程号(当前终端) | | !$ | 调用最后一条命令历史中的参数 |
三、简单的四则运算
算数运算:默认情况下,shell就只能支持简单的整数运算
运算内容:加(+) 、 减(-) 、 乘(*) 、 除(/) 、 求余数(%)
1、四则运算符号
表达式 | 举例 |
---|---|
$(( )) | echo $((1+2)) |
$[ ] | echo $[5-2] |
expr | expr 10/5 |
let | n=1;let n+=1 等价于 let n=n+1 |